缩放时标记漂移的位置

时间:2011-04-25 11:20:06

标签: google-maps-api-3 position google-maps-markers

问候所有人,

我开发了一些绘制两点折线(直线)的javascript代码 在zoom_changed事件中,我计算中点线的位置,然后在该位置创建一个标记 我注意到,当我进一步放大这些标记时,这些标记会从实际的中点漂移出来!

这种技术有什么问题(见下面的代码)?

此致

function label() {
    for(var i in links) {
        if(links[i].label != null) {
            links[i].label.setMap(null);
            delete links[i].label;
        }

        if(links[i].view == view && map.zoom >= links[i].minZoom) {
            var lat = (links[i].coords[0].lat() + links[i].coords[1].lat()) / 2.0;
            var lng = 0.0;
            var latLen = Math.max(links[i].coords[0].lat(), links[i].coords[1].lat()) - Math.min(links[i].coords[0].lat(), links[i].coords[1].lat());
            var lngLen = Math.max(links[i].coords[0].lng(), links[i].coords[1].lng()) - Math.min(links[i].coords[0].lng(), links[i].coords[1].lng());
            var slope = latLen / lngLen;

            if(lngLen < 180.0)
                lng = (links[i].coords[0].lng() + links[i].coords[1].lng()) / 2.0;
            else
                lng = (360.0 + (links[i].coords[0].lng() + links[i].coords[1].lng())) / 2.0;

            links[i].label = new google.maps.Marker({
                map: map,
                position: new google.maps.LatLng(lat, lng),
                icon: "http://chart.apis.google.com/chart?chst=d_text_outline&chld=FFFF66|11|h|FF6600|b|" + links[i].text
            });
        }
    }
}

2 个答案:

答案 0 :(得分:0)

Geeko(喜欢那个处理),

您的代码可能没有任何问题... Google地图会显示“图表”......他们甚至不会尝试严格意义上显示“地图”。放大或缩小时,所有东西都会“移动”。大约100公里的新界海岸“失踪”了一段时间。这是一个图表。非常棒(实际上非​​常精彩,恕我直言)......只是不要指望它是准确的。

干杯。基思。

答案 1 :(得分:0)

错误是你写

的地方
(links[i].coords[0].lng() + links[i].coords[1].lng()) / 2.0;

这不会给出线的中点。要查找直线的中点,请使用几何图形库的interpolate()函数
您还必须在折线上设置'geodesic'选项并使用它:

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&libraries=geometry"></script>

Ben(来自Google Maps API论坛)