【问题标题】:Google Maps / Fusion Table application misbehaving / losing data谷歌地图/融合表应用程序行为不端/丢失数据
【发布时间】:2011-11-18 15:41:56
【问题描述】:

我有两个使用几乎相同的代码但行为不同的 Google 地图。两者都查询 Fusion Table 以创建图层(标记组),并且都使用 jQuery 滑块来触发将图层设置到地图或从地图取消设置的功能。两者之间的唯一区别是他们查询的融合表。 The one querying a small dataset 按预期工作(所有 Fusion Table 层及其相应的数据点按预期设置和取消设置)。 The one querying about 3500 data points 在设置/取消设置前几层(不是数据点最多的层)时按预期工作;然后在设置 2003-2006 层时显示错误的数据点集(我验证了一些 2005 年的数据点不在 2003-2006 层中);然后似乎继续按预期工作以设置/取消设置剩余层。

我知道这似乎表明某处的数据存在故障,但我们已经非常彻底地查看了它,但找不到任何问题。我没有违反 5 层限制(一次只设置一个层)并且找不到可以添加到地图的标记数量的任何限制。

有人知道是什么原因造成的吗?完整代码如下。除了 Fusion Table ID 之外,这两个版本都是相同的。

var map;
var infowindow;


function Initialize() {

    var mapCenter = new google.maps.LatLng(42,-71.5314);
    var mapOptions = {
        zoom: 8,
        center: mapCenter,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        zoomControl: true,
        zoomControlOptions: {
            style: google.maps.ZoomControlStyle.SMALL
        }
    };

    map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);

    infowindow = new google.maps.InfoWindow();

    layer2003 = new google.maps.FusionTablesLayer({
        query: {
            select: 'Geocode_Source',
            from: '2203337',
            where: 'Year <= 2003'
        }
    });

    layer2004 = new google.maps.FusionTablesLayer({
        query: {
            select: 'Geocode_Source',
            from: '2203337',
            where: 'Year <= 2004'
        }
    });

    layer2005 = new google.maps.FusionTablesLayer({
        query: {
            select: 'Geocode_Source',
            from: '2203337',
            where: 'Year <= 2005'
        }
    });

    layer2006 = new google.maps.FusionTablesLayer({
        query: {
            select: 'Geocode_Source',
            from: '2203337',
            where: 'Year <= 2006'
        }
    });

    layer2007 = new google.maps.FusionTablesLayer({
        query: {
            select: 'Geocode_Source',
            from: '2203337',
            where: 'Year <= 2007'
        }
    });

    layer2008 = new google.maps.FusionTablesLayer({
        query: {
            select: 'Geocode_Source',
            from: '2203337',
            where: 'Year <= 2008'
        }
    });

    layer2009 = new google.maps.FusionTablesLayer({
        query: {
            select: 'Geocode_Source',
            from: '2203337',
            where: 'Year <= 2009'
        }
    });

    layer2010 = new google.maps.FusionTablesLayer({
        query: {
            select: 'Geocode_Source',
            from: '2203337',
            where: 'Year <= 2010'
        }
    });

    layer2011 = new google.maps.FusionTablesLayer({
        query: {
            select: 'Geocode_Source',
            from: '2203337',
            where: 'Year <= 2011'
        }
    });


    layer2003.setMap(map);


    google.maps.event.addListener(map, 'zoom_changed', function() {
        if (map.getZoom() > 12) {
            map.setZoom(12);
        }
    });

    google.maps.event.addListener(map, 'zoom_changed', function() {
        if (map.getZoom() < 8) {
            map.setZoom(8);
        }
    });

} //end function Initialize

//Set Fusion Table layers onto the map or to null, as appropriate
function set2003() {
    layer2003.setMap(map);
    layer2004.setMap(null);
    layer2005.setMap(null);
    layer2006.setMap(null);
    layer2007.setMap(null);
    layer2008.setMap(null);
    layer2009.setMap(null);
    layer2010.setMap(null);
    layer2011.setMap(null);
}

function set2004() {
    layer2003.setMap(null);
    layer2004.setMap(map);
    layer2005.setMap(null);
    layer2006.setMap(null);
    layer2007.setMap(null);
    layer2008.setMap(null);
    layer2009.setMap(null);
    layer2010.setMap(null);
    layer2011.setMap(null);
}

function set2005() {
    layer2003.setMap(null);
    layer2004.setMap(null);
    layer2005.setMap(map);
    layer2006.setMap(null);
    layer2007.setMap(null);
    layer2008.setMap(null);
    layer2009.setMap(null);
    layer2010.setMap(null);
    layer2011.setMap(null);
}

function set2006() {
    layer2003.setMap(null);
    layer2004.setMap(null);
    layer2005.setMap(null);
    layer2006.setMap(map);
    layer2007.setMap(null);
    layer2008.setMap(null);
    layer2009.setMap(null);
    layer2010.setMap(null);
    layer2011.setMap(null);
}

function set2007() {
    layer2003.setMap(null);
    layer2004.setMap(null);
    layer2005.setMap(null);
    layer2006.setMap(null);
    layer2007.setMap(map);
    layer2008.setMap(null);
    layer2009.setMap(null);
    layer2010.setMap(null);
    layer2011.setMap(null);
}

function set2008() {
    layer2003.setMap(null);
    layer2004.setMap(null);
    layer2005.setMap(null);
    layer2006.setMap(null);
    layer2007.setMap(null);
    layer2008.setMap(map);
    layer2009.setMap(null);
    layer2010.setMap(null);
    layer2011.setMap(null);
}

function set2009() {
    layer2003.setMap(null);
    layer2004.setMap(null);
    layer2005.setMap(null);
    layer2006.setMap(null);
    layer2007.setMap(null);
    layer2008.setMap(null);
    layer2009.setMap(map);
    layer2010.setMap(null);
    layer2011.setMap(null);
}

function set2010() {
    layer2003.setMap(null);
    layer2004.setMap(null);
    layer2005.setMap(null);
    layer2006.setMap(null);
    layer2007.setMap(null);
    layer2008.setMap(null);
    layer2009.setMap(null);
    layer2010.setMap(map);
    layer2011.setMap(null);
}

function set2011() {
    layer2003.setMap(null);
    layer2004.setMap(null);
    layer2005.setMap(null);
    layer2006.setMap(null);
    layer2007.setMap(null);
    layer2008.setMap(null);
    layer2009.setMap(null);
    layer2010.setMap(null);
    layer2011.setMap(map);
}

function UpdateMap(){
    var value = $('#slider').slider('option', 'value');

    if (value==2003){set2003();}
    if (value==2004){set2004();}
    if (value==2005){set2005();}
    if (value==2006){set2006();}
    if (value==2007){set2007();}
    if (value==2008){set2008();}
    if (value==2009){set2009();}
    if (value==2010){set2010();}
    if (value==2011){set2011();}
}

$(function(){

    $('#slider').slider({
        orientation: 'horizontal',
        animate: true,
        step: 1,
        min: 2003,
        max: 2011,
        change: function(event, ui){
            UpdateMap();
        }
    }); 
});
-->
</script>

【问题讨论】:

    标签: google-maps google-fusion-tables


    【解决方案1】:

    这与每个图块的特征限制有关:每个图块限制为 500 个标记。超过 500 时,标记变细。在您的示例中,当从 2005 年到 2006 年时,每个图块的标记数量最有可能超过 500 个,因此一些标记被稀疏化,其中一些是 2005 年以下的标记。

    我希望这是有道理的;如果您有任何问题,请告诉我!

    【讨论】:

    • 非常感谢,凯瑟琳!您知道每个图块的此标记限制是否是最近对 API 的介绍? (这是 3 月份运行良好的应用程序的一个新问题。)这是否记录在任何地方? (我搜索了标记限制,但结果为空;我想我会重新阅读所有相关文档,但没有找到任何东西。)
    • 嗯.. 看起来不像记录在案。我们会努力的。 :) 你也可以尝试另一件事吗?将 Location 列从 Location 转换为 Text,然后再次转换回 Location。这有时有助于解决缺少标记的问题,但在这种情况下可能无济于事。
    猜你喜欢
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多