我正在尝试使用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秒的时间(使用秒表计时)。
答案 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秒)