0

我有一个 kml 点加载到融合表层中。我想使用geoxml3将数据解析为图层范围上的une map.fitBounds,但这不起作用。下面的确切代码适用于 KML 多边形,但不适用于 KML 点图层。

代码:

    var queryText = encodeURIComponent("SELECT * FROM 1CNJWjLDYgBkJGZVslJ67Fak4DyqadEFuIabzQ60 ");
    var query = new google.visualization.Query('http://www.google.com/fusiontables/gvizdata?tq='  + queryText);

    query.send(zoomTo);
    }

    function zoomTo(response) {
    if (!response) {
      alert('no response');
      return;
    }
    if (response.isError()) {
      alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
      return;
    } 

      FTresponse = response;
      //for more information on the response object, see the documentation
      //http://code.google.com/apis/visualization/documentation/reference.html#QueryResponse
      numRows = response.getDataTable().getNumberOfRows();
      numCols = response.getDataTable().getNumberOfColumns();
      var geoXml = new geoXML3.parser();
      var bounds = new google.maps.LatLngBounds();
      for (var i = 0; i < numCols; i++){
        if (FTresponse.getDataTable().getColumnLabel(i) == 'geometry') {
          var ColIndex = i;
        }
      }
      if (!ColIndex){
        alert('Geometry column "geometry" not found.')
      }
      for (var i = 0; i < numRows; i++){
          var kml = FTresponse.getDataTable().getValue(i,ColIndex);
          geoXml.parseKmlString("<Placemark>"+kml+"</Placemark>");
          bounds.union(geoXml.docs[i].bounds);
      }    

          map.fitBounds(bounds);
    }
4

1 回答 1

1

parse 方法不应该用于解析来自 FusionTables 的 KML 字符串(parseKmlString 方法就是为了做到这一点)。

      var kml = FTresponse.getDataTable().getValue(i,ColIndex);
      geoXml.parseKmlString("<Placemark>"+kml+"</Placemark>");

注意:存储在 FusionTables 中的 KML 片段不包含<Placemark>geoxml3 查找的标签,这就是为什么它们被添加到传递给 geoxml3 的字符串中的原因。

GViz 查询响应有 500 行的限制(在我能找到的任何地方似乎都没有记录,我能找到的最好的就是对它的引用,但从那时起文档已经移动)。

看起来您将在您的表格中遇到该限制,以克服使用FusionTables API v1.0的限制,该 API 返回 GeoJSON,而不是 KML(因此您将不再需要 geoxml3)。

使用 GViz 和 geoxml3 从 FusionTables 解码 KML“点”的示例(表包含少于 500 个点)

使用 Fusion Tables API v1.0 从 Fusion Tables 解析标记的示例

于 2013-03-07T21:49:15.170 回答