根据事件侦听器选择State

时间:2017-03-21 14:14:55

标签: google-fusion-tables google-maps-api-2

我正在尝试创建美国的交互式地图,当点击某个位置时,该点所在的状态将变为阴影。 我创建了一个事件监听器,它将在点击时绘制图层,但我无法弄清楚如何让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))'

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

});