[英]How Would I Calculate The Distance Between The Points Google Maps Api V3
我正在做一個項目,它幾乎完成了。 問題是我對Java語言還很陌生,無法弄清楚如何做可能很簡單的事情。 這是我的代碼的一部分:
var dista;
var p;
var addrbounds;
var addrlat;
var addrlng;
var addr;
var icon = new google.maps.MarkerImage("http://maps.google.com/mapfiles/ms/micons/red.png",
new google.maps.Size(32, 32), new google.maps.Point(0, 0),
new google.maps.Point(16, 32));
var center = null;
var map = null;
var currentPopup;
var bounds = new google.maps.LatLngBounds();
function addMarker(lat, lng, info) {
var address = document.myform.customer.value;
var geocoder = new google.maps.Geocoder();
geocoder.geocode({address: address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var addrbounds = results[0].geometry.location; //get geocoded results into variable
var addrlat = results[0].geometry.location.lat();
var addrlng = results[0].geometry.location.lng();
var p = new google.maps.LatLng(addrlat, addrlng);
var pt1 = new google.maps.LatLng(lat, lng);
dista = pt1.distanceFrom(p); //calculate distance between the points
var di = (dista/1000);
document.myform1.memory.value = di; //add dist to memory text box
return;
} else {
alert(address + ' not found');
}
});
// desired spot for if statement regarding distance
var pt = new google.maps.LatLng(lat, lng);
bounds.extend(pt);
var marker = new google.maps.Marker({
position: pt,
icon: icon,
map: map
});
var popup = new google.maps.InfoWindow({
content: info,
maxWidth: 300
});
google.maps.event.addListener(marker, "click", function() {
if (currentPopup != null) {
currentPopup.close();
currentPopup = null;
}
popup.open(map, marker);
currentPopup = popup;
});
google.maps.event.addListener(popup, "closeclick", function() {
map.panTo(center);
currentPopup = null;
});
}
基本上,這樣做是在addMarker()函數中發生的第一件事是對地址進行地址解析,然后計算到該地址的距離。 那很好。 當想要獲取地理編碼器的距離以創建if語句時,如果它在一定半徑內,則僅從數據庫添加標記,就會出現問題。 如您所見,我嘗試將其移至文本框。 這似乎可行,但它是循環的一部分,不會隨着循環的每次運行而更新。
我被困了幾天,所以任何幫助將不勝感激。 我討厭這么接近完成但卡住了!
編輯:
我知道了。 這是我的方法:
var dista;
var p;
var addrbounds;
var addrlat;
var addrlng;
var icon = new google.maps.MarkerImage("http://maps.google.com/mapfiles/ms/micons/red.png",
new google.maps.Size(32, 32), new google.maps.Point(0, 0),
new google.maps.Point(16, 32));
var center = null;
var map = null;
var currentPopup;
var bounds = new google.maps.LatLngBounds();
function addMarker(lat, lng, info) {
var address = document.myform.customer.value;
var geocoder = new google.maps.Geocoder();
geocoder.geocode({address: address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var addrbounds = results[0].geometry.location;
var addrlat = results[0].geometry.location.lat();
var addrlng = results[0].geometry.location.lng();
var p = new google.maps.LatLng(addrlat, addrlng);
var pt1 = new google.maps.LatLng(lat, lng);
dista = pt1.distanceFrom(p);
var di = (dista/1000);
document.myform1.memory.value = di;
document.myform1.memory1.value = addrlat;
document.myform1.memory2.value = addrlng;
return;
} else {
alert(address + ' not found');
}
});
var tstlat = document.myform1.memory1.value;
var tstlng = document.myform1.memory2.value;
var tstpt = new google.maps.LatLng(tstlat, tstlng);
var pt = new google.maps.LatLng(lat, lng);
var distan = pt.distanceFrom(tstpt);
var tstdistance = (distan/1000);
if (tstdistance < 20){
// alert (tstdistance);
bounds.extend(pt);
var marker = new google.maps.Marker({
position: pt,
icon: icon,
map: map
});
var popup = new google.maps.InfoWindow({
content: info,
maxWidth: 300
});
google.maps.event.addListener(marker, "click", function() {
if (currentPopup != null) {
currentPopup.close();
currentPopup = null;
}
popup.open(map, marker);
currentPopup = popup;
});
google.maps.event.addListener(popup, "closeclick", function() {
map.panTo(center);
currentPopup = null;
});
}
else
{
return;
}}
現在,我只需要解決地圖刷新問題,然后該項目就完成了!
您無法從地址解析器回調中獲取任何信息,地址解析會強制執行異步請求,而響應何時到達,您將永遠不會從回調外部得知。
您必須從回調中將某些內容推送到外部,而不是從外部獲取內容 (因為已經通過設置文本框的值來完成此操作)。 您還可以從回調中調用另一個函數,並提供距離作為參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.