【问题标题】:How Would I Calculate The Distance Between The Points Google Maps Api V3我将如何计算点之间的距离 Google Maps Api V3
【发布时间】:2012-03-25 09:24:32
【问题描述】:

我正在做一个项目,它几乎完成了。问题是我对 Javascript 很陌生,无法弄清楚如何做一些可能很简单的事情。这是我的代码的一部分:

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;

 }}

现在我只需要修复一个地图刷新问题,然后项目就完成了!

【问题讨论】:

  • 我已经看过了,但我无法从地理编码器功能中获取信息。这一切都以未定义的形式返回。

标签: javascript google-maps


【解决方案1】:

您无法从地理编码器回调中获取任何内容,地理编码会强制执行异步请求,您永远无法从回调外部知道响应何时到达。

您必须从回调到外部,而不是从外部获取某些东西(正如您已经通过设置文本框的值所做的那样)。您还可以从回调中调用另一个函数并提供距离作为参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-23
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 2017-04-09
    • 1970-01-01
    • 2017-11-03
    相关资源
    最近更新 更多