我正在尝试创建美国的交互式地图,当点击某个位置时,该点所在的状态将变为阴影。 我创建了一个事件监听器,它将在点击时绘制图层,但我无法弄清楚如何让Fusion Table只获取状态数据。 我尝试过ST_INTERSECTS。
融合表查询是否可以实现?使用多边形创建我自己的查找表会更好/更有效吗? 任何帮助都非常感谢,非常新兴的fusiontables和谷歌地图api!
感谢
google.maps.event.addListener(map, 'click', function( event ){
var layer = new google.maps.FusionTablesLayer({
query: {
select: 'geometry',
from: '17aT9Ud-YnGiXdXEJUyycH2ocUqreOeKGbzCkUw',
where: 'ST_INTERSECTS('geometry',Circle(event.latLng,5000))'
}
});
layer.setMap(map);
我可以确认这是有效的,只选择加州。
where: 'ST_INTERSECTS(geometry,CIRCLE(LATLNG(37.3242,-121.9806),1))'
答案 0 :(得分:0)
我想出来了!您必须为event.latLng coords创建变量,如下所示:
clickLat = event.latLng.lat();
clickLng = event.latLng.lng();
(我不会将它们声明为'var',因为我希望它们不会持久,请参阅下文)
然后构造像这样的where过滤器:
where: 'ST_INTERSECTS(geometry, CIRCLE(LATLNG(' + clickLat + ',' + clickLng + '),1))'
注意那些引用!
现在,我希望每次点击都能清除任何上一层,因为我只想要一个状态,这是通过添加一个简单的检查来实现的:
if (typeof clickLat !== 'undefined') {
layer.setMap(null)
}
我也不希望这个图层是可点击的,因为如果它是,会出现一个巨大的几何块,而且我还有其他想要显示的信息,这可以通过将FusionTablesLayer的可点击性设置为'假”。
这是完整的代码,fyi:
google.maps.event.addListener(map, 'click', function( event ){
if (typeof clickLat !== 'undefined') {
layer.setMap(null)
}
clickLat = event.latLng.lat();
clickLng = event.latLng.lng();
layer = new google.maps.FusionTablesLayer({
query: {
select: 'geometry',
from: '17aT9Ud-YnGiXdXEJUyycH2ocUqreOeKGbzCkUw',
where: 'ST_INTERSECTS(geometry, CIRCLE(LATLNG(' + clickLat + ',' + clickLng + '),1))'
},
styles: [{
polygonOptions: {
strokeColor: "#5e3cff",
strokeWeight: 3,
fillColor: "#9d9d9d",
fillOpacity: 0.2,
}
}],
clickable: false
});
layer.setMap(map);
});