如何基于json文件

时间:2015-06-05 08:26:55

标签: javascript json google-maps

我有一个包含20000点geojson格式坐标的json文件,我想生成这些坐标的热图。我有两个想法,但我对这两个想法都有疑问:

  1. 使用谷歌地图 - >热图图层。我打算写一个html文件,如图所示 https://developers.google.com/maps/documentation/javascript/examples/layer-heatmap 但是,我不知道如何将json文件的坐标放入google.maps.LatLng()的批处理中,任何想法?

  2. 使用google Fusion Table。但是,似乎需要一个分隔的文本文件(.csv,.tsv或.txt)和Keyhole标记语言文件(.kml),是吗?

  3. 我不知道是否还有其他一些好的方法来生成热图。有什么好主意吗?

2 个答案:

答案 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);