我有一个包含20000点geojson格式坐标的json文件,我想生成这些坐标的热图。我有两个想法,但我对这两个想法都有疑问:
使用谷歌地图 - >热图图层。我打算写一个html文件,如图所示 https://developers.google.com/maps/documentation/javascript/examples/layer-heatmap 但是,我不知道如何将json文件的坐标放入google.maps.LatLng()的批处理中,任何想法?
使用google Fusion Table。但是,似乎需要一个分隔的文本文件(.csv,.tsv或.txt)和Keyhole标记语言文件(.kml),是吗?
我不知道是否还有其他一些好的方法来生成热图。有什么好主意吗?
答案 0 :(得分:1)
我不认为geoJson是传输如此大量数据的好选择(我甚至不会将它用于2000项)。
让我们看看单个LatLng,(假设5位小数): 只需通过JSON传输所需的数据,例如:
//17 bytes, about 3.5 MB for 200000 points
[9.12345,5.43219]
在geoJson中:
//95 bytes, about 18 MB for 200000 items
{"type":"Feature","geometry":{"type": "Point","coordinates":[5.43219,9.12345]},"properties":{}}
我想我不必说什么......
#1的基本问题:(我认为无论您选择哪种格式,都不建议使用200000点):
由于无法通过JSON传输google.maps.LatLng
,因此您需要预处理JSON以使用LatLng创建数组(需要一些时间才能获得200000点)
我认为#2是您应该考虑的唯一选择。
你可以设置一个脚本,宏等,它在静态时解析geoJson并将其上传到FusionTable。
当数据不是静态数据时,您可以使用自动上传/更新数据的服务器端脚本。
点数不需要KML,您可以简单地使用CSV(lat和lng可以存储在单个字段中,以逗号分隔)或单独的字段中。
答案 1 :(得分:0)
为什么你应该选择#1选项。
a) 将GeoJSON数据点序列化为GoogleMap兼容格式latlng比选项#2更容易。您甚至可以加载GeoJSON数据,将其解析为GoogleMap坐标,并在地图上绘制而无需转换文件类型。
b) 如果选择选项2,则无需编写将GeoJSON文件转换为逗号分隔(或任何符号)文本文件的脚本。当您有新的GeoJSON数据时,您需要再次转换它。这不会节省您的时间。
因此,假设您选择选项#1
您只需添加一个脚本标记,该标记引用您的GeoJSON数据文件,如下所示:
<script type="text/javascript" src="data.json"></script>
然后使用您的JavaScript代码将其解析为JSON格式:
var geoData = JSON.parse(data);
然后,您需要将这些geoJSON数据解析为lat-lng坐标数组:
var coords = geoData.map(function mapToLatLng(c){
return new google.maps.LatLng(c.geometry.coordinates[0], c.geometry.coordinates[1])
});
使用上面的代码,您应该获得coords
,其中包含所有Google地图纬度 - 经度坐标,可以渲染到热图中。
要渲染这些点,您可以尝试:
heatmap = new google.maps.visualization.HeatmapLayer({
data: new google.maps.MVCArray(coords)
});
heatmap.setMap(map);