谷歌地图 GeoJSON- 切换标记层?

Posted

技术标签:

【中文标题】谷歌地图 GeoJSON- 切换标记层?【英文标题】:Google maps GeoJSON- toggle marker layers? 【发布时间】:2014-05-25 07:53:42 【问题描述】:

我从对 PostGIS 数据库的调用中返回了一些 GeoJSON。我希望能够为每个功能添加一个标记,并能够切换不同类型的标记/功能。目前我正在使用 javascript 为每个功能生成一个标记,根据类型将它们添加到数组中,然后根据需要通过数组设置显示/隐藏来切换“层”。

这工作正常,但我想知道新的 GeoJSON 功能是否提供了更好的方法来做到这一点。但据我所见,所有功能都添加到同一个数据层中,并且切换它们的集合将涉及设置样式或仅替换为新的、预先过滤的 GeoJSON。

所以问题是是否有可能拥有多个数据层,并且可以轻松地从地图中添加/删除它们,还是我最好看看 OpenLayers 之类的东西?

编辑:更多研究表明这很简单。

对于我们想要打开的特征集合中的每种特征,创建一个新的数据对象。将所有相关功能添加到该数据对象。

var datalayer = new google.maps.Data();
datalayer.addGeoJson(feature);
datalayer.setMap(mainmap);

然后将每个数据对象/特征类型存储为键值对。在切换时,根据需要拉出相关数据对象和 setMap:

var datalayer= featuretypesobj["feature type to toggle"];
datalayer.setMap(mymap); //or
datalayer.setMap(null);

【问题讨论】:

【参考方案1】:

您也可以创建单独的图层

var layer_1 = new google.maps.Data();
var layer_2 = new google.maps.Data();

然后填充它,例如带json数据

layer_1.loadGeoJson('/path/to/data.json');
layer_2.loadGeoJson('/path/to/data2.json');

然后在地图上添加/删除它们

layer_1.setMap(map);
layer_2.setMap(map);
layer_1.setMap(null);

【讨论】:

【参考方案2】:

添加: var layer_1 = new google.maps.Data();应该在地图初始化函数中完成,如:

var map;

  var data_layer_for_ramps;



  function initialize() 

            map = new google.maps.Map(document.getElementById('map'), 
              zoom: 12,
              center: new google.maps.LatLng(-33.897907, 151.179138),//-33.8151,151.0032 
              mapTypeId: 'roadmap'
            );

            data_layer_for_ramps = new google.maps.Data();
           

【讨论】:

以上是关于谷歌地图 GeoJSON- 切换标记层?的主要内容,如果未能解决你的问题,请参考以下文章

谷歌地图 GeoComplete 与 GeoJson

在 android 谷歌地图中显示大型 geojson 文件

有没有办法在谷歌地图的叠加层上方添加标记反应?

将 geoJSON 对象直接加载到谷歌地图 v3

如何将谷歌地图 GeoJSON 转换为 GPX,保留位置名称

带有 3D 标记的 Android 谷歌地图?