Google maps 如何使用google map api在多段线中指定信息窗口
我的设想。我有五个标记并连接到多段线。当我单击标记a以在多段线之间标记b时,它将显示一个信息窗口。在信息中,窗口有标记a地址和标记b地址。我使用google Maps API中的islocationedge概念实现了这个场景。但是这个概念我面临一个问题。当我单击标记a以标记b多段线时,它将显示标记b和标记c地址,因为我使用了段多段线。我需要如何在单个多段线中指定信息窗口 我的代码Google maps 如何使用google map api在多段线中指定信息窗口,google-maps,google-maps-api-3,google-maps-api-2,Google Maps,Google Maps Api 3,Google Maps Api 2,我的设想。我有五个标记并连接到多段线。当我单击标记a以在多段线之间标记b时,它将显示一个信息窗口。在信息中,窗口有标记a地址和标记b地址。我使用google Maps API中的islocationedge概念实现了这个场景。但是这个概念我面临一个问题。当我单击标记a以标记b多段线时,它将显示标记b和标记c地址,因为我使用了段多段线。我需要如何在单个多段线中指定信息窗口 我的代码 <!DOCTYPE html> <html> <body> <h1>
<!DOCTYPE html>
<html>
<body>
<h1>My First Google Map</h1>
<div id="googleMap" style="width:100%;height:400px;"></div>
<script>
function myMap() {
var mapProp= {
center:new google.maps.LatLng(51.508742,-0.120850),
zoom:5,
};
var map = new google.maps.Map(document.getElementById("googleMap"),mapProp);
var goldenGatePosition = [{lat: 30.2179130,lng: -81.5628150, address: 'Tamil Nadu'},{lat: 30.2179140,lng: -81.5627480, address: 'India'},{lat:30.2177650,lng:-81.5629100,address: 'America'},{lat: 30.2844080,lng: -81.5633900, address: 'Tamil Nadu'},{lat: 30.2843840,lng: -81.5633890, address: 'Tamil Nadu'}];
for(let i=0;i<goldenGatePosition.length;i++){
var marker = new google.maps.Marker({
position: goldenGatePosition[i],
map: map,
title: 'Golden Gate Bridge'
});
}
var flightPath = new google.maps.Polyline({
path:goldenGatePosition,
strokeColor:"#0000FF",
strokeOpacity:0.8,
strokeWeight:2
});
flightPath.setMap(map);
let poly, geodesicPoly;
var infowindow = new google.maps.InfoWindow();
var codeStr=''
google.maps.event.addListener(flightPath, 'click', function(event) {
// make polyline for each segment of the input line
for (var i = 0; i < this.getPath().getLength() - 1; i++) {
var segmentPolyline = new google.maps.Polyline({
path: [this.getPath().getAt(i), this.getPath().getAt(i + 1)]
});
console.log(segmentPolyline)
// check to see if the clicked point is along that segment
if (google.maps.geometry.poly.isLocationOnEdge(event.latLng, segmentPolyline, 10e-3)) {
console.log(' I ', i)
// output the segment number and endpoints in the InfoWindow
var origin = new Array()
var destination = new Array()
console.log('****************')
for(let i=0;i<goldenGatePosition.length; i++){
console.log(goldenGatePosition[i])
}
console.log('****************')
console.log(segmentPolyline.getPath().getAt(0).address)
origin.push(segmentPolyline.getPath().getAt(0).toUrlValue(6))
destination.push(segmentPolyline.getPath().getAt(1).toUrlValue(6))
const service = new google.maps.DistanceMatrixService(); // instantiate Distance Matrix service
const matrixOptions = {
origins: origin, // technician locations
destinations: destination, // customer address
travelMode: 'DRIVING',
unitSystem: google.maps.UnitSystem.IMPERIAL
};
// Call Distance Matrix service
service.getDistanceMatrix(matrixOptions, callback);
// Callback function used to process Distance Matrix response
function callback(response, status) {
console.log(response)
console.log(status)
if (status !== "OK") {
alert("Error with distance matrix");
return;
}
console.log(response);
}
var content = "segment " + i + "<br>";
content += "start of segment=" + segmentPolyline.getPath().getAt(0).toUrlValue(6) + "<br>";
content += "end of segment=" + segmentPolyline.getPath().getAt(1).toUrlValue(6) + "<br>";
infowindow.setContent(content);
infowindow.setPosition(event.latLng);
infowindow.open(map);
}
}
});
}
</script>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAiybKuHI544-t5XPZzBGjQOBCO4MZFCwM&callback=myMap&libraries=geometry"></script>
</body>
</html>
我的第一张谷歌地图
函数myMap(){
var mapProp={
中心:新google.maps.LatLng(51.508742,-0.120850),
缩放:5,
};
var map=new google.maps.map(document.getElementById(“googleMap”),mapProp);
var goldenGatePosition=[{lat:30.2179130,液化天然气:-81.5628150,地址:“泰米尔纳德邦”},{lat:30.2179140,液化天然气:-81.5627480,地址:“印度”},{lat lat:30.21776650,液化天然气:-81.5629100,地址:“美国”},{lat lat 30.2844080,液化天然气:-81.5633900,地址:“泰米尔纳德邦”},{lat 30.2843840,液化天然气:-81.5633890,地址:“泰米尔纳德邦”};
对于(设i=0;i调用isLocationOnEdge
时的容差太小
isLocationOnEdge(点、多边形[、公差])
参数:
点:LatLng
多边形:多边形|多段线
公差:数字可选
返回值:*布尔值
计算给定点是否位于指定公差范围内的多段线或多边形边上或附近。当提供点的纬度和经度与边上最近点之间的差值小于公差时,返回true。默认公差为10-9度
您的代码:
if (google.maps.geometry.poly.isLocationOnEdge(event.latLng, segmentPolyline, 10e-3)) {
工作价值:
if (google.maps.geometry.poly.isLocationOnEdge(event.latLng, segmentPolyline, 10e-7)) {
(当它太大时,它会为段0上的所有位置拾取段1,据我所知,所有其他段都能正确使用您的值)
代码片段:
函数myMap(){
var mapProp={
中心:新google.maps.LatLng(51.508742,-0.120850),
缩放:5,
};
var map=new google.maps.map(document.getElementById(“googleMap”),mapProp);
var bounds=new google.maps.LatLngBounds();
for(设i=0;i”;
content+=“段的开始=“+segmentPolyline.getPath().getAt(0).toUrlValue(6)+”
”;
content+=“段尾=“+segmentPolyline.getPath().getAt(1).toUrlValue(6)+”
”;
infowindow.setContent(content);
infowindow.setPosition(event.latLng);
打开(地图);
}
}
});
}
变量goldenGatePosition=[{
纬度:30.2179130,
液化天然气:-81.5628150,
地址:泰米尔纳德邦
}, {
纬度:30.2179140,
液化天然气:-81.5627480,
地址:印度
}, {
纬度:30.2177650,
液化天然气:-81.5629100,
地址:美国
}, {
拉脱维亚:30.2844080,
液化天然气:-81.5633900,
地址:泰米尔纳德邦
}, {
纬度:30.2843840,
液化天然气:-81.5633890,
地址:泰米尔纳德邦
}];
html,
身体,
#谷歌地图{
身高:100%;
宽度:100%;
填充:0;
保证金:0;
}
当我使用发布的代码时,当我单击每个多段线线段时,我会得到它的起点和终点坐标。()有什么问题?@geocodezip。你能检查一下我的代码吗?我会更新坐标。这就是问题所在。我仍然不明白问题所在。你现在在两组位置中有5个标记,每个标记之间有一条多段线。Wh