【发布时间】:2015-08-27 01:50:19
【问题描述】:
是否可以在单击时将特定点的所有多边形数据(描述和名称)合并到一个信息窗口中?我有一些重叠的多边形,信息窗口只显示最上面的数据。似乎这应该可以使用 Fusion Tables 和地图上的单击侦听器,以便当有人单击地图时,会向 Fusion Tables 发送查询以查找与单击的点相交的所有多边形(使用 ST_INTERSECTS 和CIRCLE 和一个非常小的半径)。我的 Fusion Table 中仅有的列是 Name、Description 和 Geometry(包含标准 KML)。
这是就我而言。多边形正在显示,圆圈正在渲染并居中单击。 InfoWindow 正在显示 [object Object]。
var lat = 37.4;
var lng = -122.1;
var tableid = '1mxcz4IDL1U7ItrqulVzt01fMasj5zsmBFUuQh6iM';
var meters = 10000;
layer = new google.maps.FusionTablesLayer({
query: {
select: 'geometry',
from: tableid,
}
});
layer.setMap(map);
google.maps.event.addListener(layer, 'click', function(event) {
changeCenter(event);
});
function changeCenter(event) {
lat = event.latLng.lat();
lng = event.latLng.lng();
circle.setCenter(event.latLng);
}
circle = new google.maps.Circle({
center: new google.maps.LatLng(lat, lng),
radius: meters,
map: map,
fillOpacity: 0.2,
strokeOpacity: 0.5,
strokeWeight: 1,
});
comboname = new google.maps.FusionTablesLayer({
query: {
select: 'name',
from: tableid,
where: 'ST_INTERSECTS(geometry, CIRCLE(LATLNG(' + lat + ',' + lng + '),' + meters + '))'
}
});
google.maps.event.addListener(layer, 'click', function(e) {
// Display all of the names in the InfoWindow
e.infoWindowHtml = comboname;
});
}
【问题讨论】:
-
听起来应该可以。你试过了吗?
-
加了上面的代码,还是不行。
-
我使用
PostGIS->geoJSON->[layerName]= new google.maps.Data(); k.addGeoJson(geoJSON,[etc]);而不是 FusionTables。我发现这样做的唯一方法是将点击的latLng带回 PostGIS 并在那里进行所有数据查询。遍历特征(通过k.ForEach(function (feature) {})-ing 数据层并获取几何结果生成一系列Polygon对象,但无法正确触发containsLocation([clickEvent.latLng],[feature.geometry])实用函数。
标签: google-maps google-maps-api-3 google-fusion-tables