2016-10-04 57 views
-1

我嘗試更改要素集合數據疊加層的特定功能的樣式。這是我的JSON的一個片段:Google Maps API:getFeatureById功能集合不起作用

{ 
 
    "type": "FeatureCollection", 
 
    "features": [ 
 
    { 
 
     "type": "Feature", 
 
     "id": 1, 
 
     "properties": { 
 
     "name": "1 CBD - Bankenviertel", 
 
     "color": "transparent", 
 
     "isHovered": false, 
 
     "isActive": false 
 
     }, 
 
     "geometry": { 
 
     "type": "Polygon", 
 
     "coordinates": [ 
 
      [ 
 
      [ 
 
       8.67279430349, 
 
       50.1143807311 
 
      ], 
 
      [ 
 
       8.67280054398, 
 
       50.1143975981 
 
      ] 
 
     ] 
 
     ] 
 
     } 
 
    }

,這是從我的map.js

map.data.loadGeoJson('some.json'); 
 
console.log(map.data.getFeatureById(1));

相關片段而我總是得到控制檯中的「未定義」。

我在這裏做錯了什麼?

感謝,

羅伯特

+1

'Bankenviertel上' 不是一個id?嘗試使用'map.data.getFeatureById(1)' – DekiChan

+0

抱歉。我將ID從字符串更改爲int,但沒有發佈更新的js剪切。無法使用數字ID: – rkleinert

+1

我得到一個結果'map.data.getFeatureById(1)'([fiddle](http://jsfiddle.net/geocodezip/q8vq796b/))。我使用' .addGeoJson不是'.loadGeoJson',所以有可能你必須等待GeoJson在它可用之前異步加載(所以在回調函數中做這個請求)。 – geocodezip

回答

1

你需要調用map.data.getFeatureById(1)回調函數中(所以GeoJSON的加載之前它不執行)。

the documentation

loadGeoJson(網址:字符串,選項:Data.GeoJsonOptions,回調:函數(陣列)

返回值:無

負載GeoJS

proof of concept fiddle

代碼片段:

var geocoder; 
 
var map; 
 

 
function initialize() { 
 
    var map = new google.maps.Map(
 
    document.getElementById("map_canvas"), { 
 
     zoom: 4, 
 
     center: { 
 
     lat: -28, 
 
     lng: 137 
 
     }, 
 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
 
    }); 
 
    // map.data.addGeoJson(geoJson); 
 
    map.data.loadGeoJson(
 
    'https://api.myjson.com/bins/1teyu', {}, 
 
    function(features) { 
 
     console.log(map.data.getFeatureById(1)); 
 
     console.log(map.data.getFeatureById(1).getProperty("letter")); 
 
    }); 
 
} 
 
google.maps.event.addDomListener(window, "load", initialize);
html, 
 
body, 
 
#map_canvas { 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0px; 
 
    padding: 0px 
 
}
<script src="https://maps.googleapis.com/maps/api/js"></script> 
 
<div id="map_canvas"></div>