折线已被绘制成地图,但如何在其上放置标记?
当前代码:
map = new google.maps.Map(document.getElementById("map-canvas-tour"), mapOptions);
loadShowDates();
var polyFutureOptions = {
path: pathFutureCoordinates,
strokeColor: '#0000FF',
strokeOpacity: 0.8,
strokeWeight: 2.5
};
var polyPastOptions = {
path: pathPastCoordinates,
strokeColor: '#FF0000',
strokeOpacity: 0.6,
strokeWeight: 2.5
};
pathPast = new google.maps.Polyline(polyPastOptions);
pathFuture = new google.maps.Polyline(polyFutureOptions);
pathPast.setMap(map);
pathFuture.setMap(map);
infowindow = new google.maps.InfoWindow();
map.fitBounds(bounds);
有两组积分:pathFutureCoordinates和pathPastCoordinates,它们指的是过去的演出,以及将来所有巡演路线(折线)的演出。每组标记可以是不同的颜色。
我会用什么来做这件事?
还有其他提示吗?自定义标记是理想的。
有问题的网站页面:http://goo.gl/H995E
答案 0 :(得分:2)
这是一个放置标记以扩展单个折线(在地图上单击)的页面,或者当单击折线中的点时,会在折线上添加标记。您可以通过拖动来查看新标记是否正确放置,并看到该线条调整了这些线段。
https://files.nyu.edu/hc742/public/googlemaps/distance2.html
我不确定您是否打算通过点击或不点击在线上添加新标记。我将在上面的页面中描述如何通过点击添加标记。拥有一个预先构建的LatLng列表会简单得多(您只需要下面的步骤3和4)。
点击侦听器已添加到该行。
google.maps.event.addListener(line, 'click', function(event) {
for (var i = 0 ; i < markers.length - 1; i++) {
if(isPointOnSegment(markers[i].getPosition(),
markers[i+1].getPosition(),event.latLng)) {
addMarker(event.latLng, i+1);
break;
}
}
});
}
因为我们需要知道点击了哪个段,所以调用了一个辅助函数(isPointOnSegment)
function isPointOnSegment(gpsPoint1, gpsPoint2, gpsPoint ){
//Provided by Engineer
// http://stackoverflow.com/questions/10018003/which-segment-of-a-polyline-was-clicked
// 1st version, ignores perfectly horiz and vert. lines
var p1 = map.getProjection().fromLatLngToPoint( gpsPoint1 );
var p2 = map.getProjection().fromLatLngToPoint( gpsPoint2 );
var p = map.getProjection().fromLatLngToPoint( gpsPoint );
var t_x = (p.x - p1.x)/(p2.x-p1.x);
var t_y = (p.y - p1.y)/(p2.y-p1.y);
return ( eq(t_x,t_y) && t_x >= 0 && t_x <= 1 && t_y >= 0 && t_y <= 1);
}
添加标记并更新标记位置数组:
function addMarker(pos, where) {
var marker = new google.maps.Marker({
map: map,
position: pos,
draggable: true
});
markers.splice(where,0,marker);
drawPath();
}
最后,重新划线
function drawPath() {
countMarkers();
var coords = [];
for (var i = 0; i < markers.length; i++) {
coords.push(markers[i].getPosition());
}
line.setPath(coords);
}
用于添加已存在坐标的标记
var pathFutureCoordinates = [
new google.maps.LatLng(40, -80),
new google.maps.LatLng(38, -85),
new google.maps.LatLng(39, -92),
new google.maps.LatLng(42, -98),
new google.maps.LatLng(37, -102)
];
for (var i = 0; i < pathFutureCoordinates.length; i++) {
new google.maps.Marker({
map: map,
position: pathFutureCoordinates[i],
icon: "http://maps.google.com/mapfiles/kml/pal4/icon39.png"
});
}