0

我在为我的融合表创建一些函数时遇到了很大的困难。我这里有两张桌子:

积分

包裹

我正在尝试创建许多功能:

1)我希望能够使用下拉菜单选择点层,以通过其 ID 号进行选择。

2)我想创建一个函数,当我选择我的点时,我可以告诉融合表找到距离该点 1 公里以内的包裹。如果我可以更改距离会更可取,例如,我可以搜索 5 公里。

这是我的代码:

<!DOCTYPE html>
<html>
  <head>
  <style>
    #map-canvas { width:500px; height:400px; }
  </style>
  <script type="text/javascript"
    src="http://maps.google.com/maps/api/js?sensor=false">
  </script>
  <script type="text/javascript">
    var map;
    var layerl0;
    var layerl1;
    function initialize() {
      map = new google.maps.Map(document.getElementById('map-canvas'), {
        center: new google.maps.LatLng(43.94255650099583, -79.53326251471042),
        zoom: 13,
        mapTypeId: google.maps.MapTypeId.ROADMAP
      });
      layerl0 = new google.maps.FusionTablesLayer({
        query: {
          select: "'col2'",
          from: '1-6QDLUk0Xw7weaB0GP1nmgwvXUuaXJCxWEYbO8E'
        },
        map: map,
        styleId: -1,
        templateId: -1
      });
      layerl1 = new google.maps.FusionTablesLayer({
        query: {
          select: "'col2'",
          from: '1BdIN39m70Vo6Sq0Y5lm1s_4Crh1CZpSwRbYMfnM'
        },
        map: map,
        styleId: -1,
        templateId: -1
      });
    }
    function changeMapl0() {
      var searchString = document.getElementById('search-string-l0').value.replace(/'/g, "\\'");
      layerl0.setOptions({
        query: {
          select: "'col2'",
          from: '1-6QDLUk0Xw7weaB0GP1nmgwvXUuaXJCxWEYbO8E',
          where: "'description' CONTAINS IGNORING CASE '" + searchString + "'"
        }
      });
    }
    function changeMapl1() {
      var searchString = document.getElementById('search-string-l1').value.replace(/'/g, "\\'");
      layerl1.setOptions({
        query: {
          select: "'col2'",
          from: '1BdIN39m70Vo6Sq0Y5lm1s_4Crh1CZpSwRbYMfnM',
          where: "'description' = '" + searchString + "'"
        }
      });
    }
    google.maps.event.addDomListener(window, 'load', initialize);
  </script>
  </head>
  <body>
    <div id="map-canvas"></div>
    <div style="margin-top: 10px;">
      <label>Zone: </label><input type="text" id="search-string-l0">
      <input type="button" onclick="changeMapl0()" value="Search">
    </div>
    <div style="margin-top: 10px;">
      <label>SPP_ID: </label>
      <select id="search-string-l1" onchange="changeMapl1(this.value);">
        <option value="">--Select--</option>
        <option value="<html xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:msxsl="urn:schemas-microsoft-com:xslt">

<head>

<META http-equiv="Content-Type" content="text/html">

<meta http-equiv="content-type" content="text/html; charset=UTF-8">

</head>

<body style=

谢谢你的帮助!

4

2 回答 2

0

目前 Fusion Tables 不支持使用一个表的 location 列在另一个表上运行空间查询(至少我不知道这种可能性)。但是您仍然可以通过将点转换为几何图形然后ST_INTERSECTS在您的宗地表上运行空间查询来实现您想要的。

脚步:

  • 从用户单击的点获取 lat/lng 值。来自您的 Fusion Table 或直接来自地图的点击事件

    GEvent.addListener(map, "click", function(overlay, latLng) {
        var lat = latLng.lat(),
            lng = latLng.lng();
    });
    

这里有一个从 map 获取 lat/lng 值的完整示例

  • 使用此 lat/lng 值更新宗地图层的查询

     layer.setOptions({
         query: {
             select: location
             from: 
             where: 'ST_INTERSECTS(circle(latlng(lat,lng),radius), location) 
         }
     });
    

请参阅Fusion Tables 的圆形示例

于 2012-11-28T11:31:19.430 回答
0

尤其是Fusion Tables API 参考ST_DISTANCE。看起来您要做的是首先对融合表本身中的每个宗地进行地理编码(添加地址字段或纬度/经度列并运行内置地理编码器),然后您可以SELECT使用WHERE ST_DISTANCE(location_column, point_location) <= max_distance

在单独的说明中,您可能需要考虑将 HTML 格式排除在融合表之外——这通常是您放入应用程序/模板而不是数据源中的内容(例如,想象一下,如果您想将相同的数据源用于

于 2012-11-27T16:30:26.703 回答