问候所有人,
我开发了一些绘制两点折线(直线)的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
});
}
}
}
答案 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论坛)