如何将JSON转换为与Google Maps API v3一起使用的GeoJson

时间:2019-06-19 10:19:58

标签: javascript google-maps google-maps-api-3

我正在尝试使用Google Maps API在地图上创建33,000个点的群集。首先,请允许我提供一些背景信息。

背景信息:

the Google Maps API documentation中,有一个名为loadGeoJson()的函数。

loadGeoJson()的回调将XHR请求返回的JSON对象转换为API可用的对象。该对象看起来像这样:

(2) [_.Ke, _.Ke]  
0: _.Ke {m: undefined, j: _.Ze, l: {…}, closure_uid_258027441: 237, __e3_: {…}}  
1: _.Ke {m: undefined, j: _.Ze, l: {…}, closure_uid_258027441: 238, __e3_: {…}}  
length: 2
__proto__: Array(0)

该对象设计用于API。我可以使用这种表示法调用features.map()feature.getGeometry().get(0)之类的方法。


问题:

如何获取格式为GeoJson的JSON对象,如下所示:

{features: Array(33156), type: "FeatureCollection"}
features: Array(33156)
[0 … 9999]
[10000 … 19999]
[20000 … 29999]
[30000 … 33155]
length: 33156
__proto__: Array(0)
type: "FeatureCollection"
__proto__: Object

... 并将其转换为可以由API使用的Google Maps GeoJson对象,而无需使用AJAX?

我的对象就在我的代码中,但是它无法使用,因为我没有从AJAX请求中获取该对象?那没有道理。

  

注意:使用addGeoJson()在地图上显示所有33,000多个要素(点),而我没有机会使用该数据创建聚类。太慢了!加载需要约18秒的时间(使用秒表计时)。

1 个答案:

答案 0 :(得分:0)

我找不到将JSON转换为API可“使用”的GeoJson对象的方法,因此我只使用JSON对象本身并将功能“映射”到标记中。

  // Map all Features to Markers
  var markers = geoJson.features.map(function (feature) {
    return new google.maps.Marker({
      position: { lat: feature.geometry.coordinates[1], lng: feature.geometry.coordinates[0] }
    });
  });
  // Make The Clusterizer
  var clusterizer = new MarkerClusterer(_map, markers,
    { imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m' });
  console.log(geoJson);

这比在地图上绘制33,000个标记要快

(2秒为18秒)