【问题标题】:How can I parse my geometry field in Google Fusion Tables to zoom to polygon coordinates in Google Maps API V3?如何解析 Google Fusion Tables 中的几何字段以缩放到 Google Maps API V3 中的多边形坐标?
【发布时间】:2012-12-17 11:26:30
【问题描述】:

我有一张使用 Google 的 Fusion Tables and Maps API V3 here 的功能地图。除了我的 3 个多边形外,一切都正常工作,当我想出下一步时,我将修复这些多边形。有人问我是否可以让每个复选框选择缩放到有问题的多边形。我已经尝试使用 geoXml.parseKmlString() 方法和 Google 的 Visualization API 来完成此请求,正如许多其他帖子中所建议的那样,但没有成功。我对 JavaScript 还是比较陌生,对 Google 的 geoxml3 KML 处理器和可视化 API 还是完全陌生。

我查看了各种示例来尝试解决这个问题,我能找到的最接近的是:

Assembly Map

我无法让它与我的代码一起使用。

对于如何将 Assembly Map 中的代码合并到我的代码中以使用我已有的功能代码,是否有人有任何建议?

感谢您的宝贵时间。

我目前的代码如下:

var map;
var catchSD8 = new google.maps.LatLng(50.0267110, -116.907234);
var tableId = '1yc4wo1kBGNJwpDm6e-eJY_KL1YhQWfftjhA38w8';
var varID = [
    "Adam Robertson Elementary",
    "Blewett Elementary",
    "Brent Kennedy",
    "Canyon-Lister Elementary",
    "Crawford Bay Elementary/Secondary",
    "Erickson Elementary",
    "Hume Elementary",
    "JV Humphries Elementary",
    "JV Humphries Secondary",
    "Jewett Elementary",
    "Kootenay Lake",
    "Lower Kootenay Band",
    "LV Rogers Secondary",
    "Mount Sentinel Middle",
    "Mount Sentinel Secondary",
    "Prince Charles Secondary",
    "Redfish Elementary",
    "Rosemont Elementary",
    "Salmo Elementary",
    "Salmo Secondary",
    "Trafalgar Middle School",
    "W.E. Graham Community Elementary",
    "W.E. Graham Community Secondary",
    "Winlaw Elementary",
    "Yahk Elementary"       
];

function initialize() {
    var myOptions = new google.maps.Map(document.getElementById('map_canvas'), {
      center: catchSD8,
      zoom: 8,
      zoomControl: true,
      zoomControlOptions: {
        style: google.maps.ZoomControlStyle.SMALL
      },
      scaleControl: true,
      scaleControlOptions: {
        position: google.maps.ControlPosition.BOTTOM_LEFT
      },
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });
    map = new google.maps.Map(document.getElementById("map_canvas"),
        myOptions);
    var layer = new google.maps.FusionTablesLayer();
    filterMap(layer, tableId, map);

    var mySchool; 
    var limit = varID.length;
    for(var i=0; i < limit; i++){
        mySchool = document.getElementById(varID[i]);
        (function(schl,lyr,tbl,mp){
            google.maps.event.addDomListener(schl,'click', function() {
                filterMap(lyr,tbl,mp);                 
            });

        }(mySchool,layer,tableId,map));
    }
}

// Filter the map based on checkbox selection.
function filterMap(layer, tableId, map) {
    var where = generateWhere();

    if (where) {
      if (!layer.getMap()) {
        layer.setMap(map);
      }
      layer.setOptions({
        query: {
          select: 'Location',
          from: tableId,
          where: where
        }
      });
    } else {
      layer.setMap(null);
    }
}

// Generate a where clause from the checkboxes. If no boxes
// are checked, return an empty string.
function generateWhere() {
    var filter = [];
    var schools = document.getElementsByName('school');
    for (var i = 0, school; school = schools[i]; i++) {
      if (school.checked) {
        var schoolName = school.value.replace(/'/g, '\\\'');
        filter.push("'" + schoolName + "'");
      }
    }
    var where = '';
    if (filter.length) {
      where = "School IN (" + filter.join(',') + ')';
    }
    return where;
}

google.maps.event.addDomListener(window, 'load', initialize);

【问题讨论】:

    标签: javascript google-maps-api-3 google-fusion-tables google-visualization


    【解决方案1】:

    您首先需要加载使用的库:

    <script type="text/javascript" src="http://www.google.com/jsapi"></script>         
        <script type="text/javascript" src="http://geoxml3.googlecode.com/svn/branches/polys/geoxml3.js"></script>
        <script type="text/javascript">
        google.load('visualization', '1', {'packages':['corechart', 'table', 'geomap']});
        </script>
    

    还将函数zoom2query()zoomTo() 复制到您的文档中。

    在你的函数 filterMap() 中调用 zoomToQuery() 并将查询作为参数:

    function filterMap(layer, tableId, map) {
        var where = generateWhere();
    
        if (where) {
            zoom2query('SELECT Location from '+tableId+ ' where '+where);
            //continue with your code
    

    【讨论】:

    • @Molle 博士感谢您的经验。像魅力一样工作。我有一种感觉,它进入了那个功能。我只是把它放在了错误的地方。性能很慢,但在 Fusion Tables 文档中有记录。再次感谢。你个笨蛋!
    • @Molle 博士。知道为什么缩放功能只适用于某些点击事件而不适用于其他点击事件吗?我得到了大约 70% 的多边形缩放,但剩下的 30% 只是在没有缩放的情况下绘制。
    猜你喜欢
    • 2015-04-14
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 2013-06-24
    • 2016-07-20
    • 2012-04-25
    • 2017-02-04
    • 2014-05-09
    相关资源
    最近更新 更多