如何从函数中获取纬度经度并将其发送到新的google.maps.LatLng(纬度,经度)javascript

时间:2017-08-30 00:06:32

标签: javascript angular google-maps ionic-framework

我正在使用此脚本从地址获取纬度经度

var latitude="";
var longitude ="";


function codeAddress(address) {

  var geocoder = new google.maps.Geocoder();
  geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == 'OK') {


    latitude = results[0].geometry.location.lat();
    longitude = results[0].geometry.location.lng();
    //  myAfterFunction();
    //  console.log(this.latitude);

    } else {
      alert('Geocode was not successful for the following reason: ' + status);
    }
  });

}

var center = new google.maps.LatLng(latitude,longitude );

我的问题是我无法从此函数中获取纬度和经度值,我尝试使用其他函数

function myAfterFunction(){
  console.log(latitude);
}

所以我的问题是如何从我的功能获得经度和经度?谢谢

1 个答案:

答案 0 :(得分:0)

根据你的标题(我可能是错的,你应该清楚地表明你的代码在问题中做了什么),听起来你成功获得了经纬度,但却没有把它发送到地图上。

问题可能在于:

  

自谷歌地图以来,访问地理编码服务是异步的   API需要调用外部服务器。出于这个原因,你   需要传递一个回调方法来完成后执行   请求。此回调方法处理结果。请注意   地理编码器可能会返回多个结果。 (API docs

这种异步性质意味着当你的回调函数(function(results, status) {...}))正在等待响应时,你也在执行这一行:

var center = new google.maps.LatLng(latitude,longitude );

但是,当然还没有定义纬度和经度,因为我们还没有回应。

要明确地看到这一点,请将定义center的代码替换为alert()console.log(),并将另一个代码置于回调函数中并查看首先触发的内容:

function codeAddress(address) {
  var geocoder = new google.maps.Geocoder();
  geocoder.geocode( { 'address': address}, function(results, status) {
    console.log("Response recieved");
    }
  });

}
console.log("Tried to use response");

最简单的解决方案可能是将需要此特定经度和纬度的代码放在回调函数中,这样它才能在响应和扩展经纬度之前执行。