Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将纬度和经度传递给谷歌地图。需要有人帮我更正代码吗_Javascript_Google Maps - Fatal编程技术网

Javascript 将纬度和经度传递给谷歌地图。需要有人帮我更正代码吗

Javascript 将纬度和经度传递给谷歌地图。需要有人帮我更正代码吗,javascript,google-maps,Javascript,Google Maps,我尝试了以下方法将lat和lon传递给谷歌地图,这样我就可以打开地图并在地图上找到我的当前位置。当我运行这段代码时,只有谷歌地图符号出现,没有地图 var lat= function latitu(){ document.addEventListener("deviceready", onDeviceReady, false); // Cordova is ready // function onDeviceReady() { navigator.geolocation.getCurr

我尝试了以下方法将lat和lon传递给谷歌地图,这样我就可以打开地图并在地图上找到我的当前位置。当我运行这段代码时,只有谷歌地图符号出现,没有地图

var lat= function latitu(){
document.addEventListener("deviceready", onDeviceReady, false);

// Cordova is ready
//
function onDeviceReady() {
    navigator.geolocation.getCurrentPosition(onSuccess, onError);
}
function onSuccess(position) {
     var element = '' +  position.coords.latitude + '' ;

}

// onError Callback receives a PositionError object
//
function onError(error) {
    alert('code: '    + error.code    + '\n' +
          'message: ' + error.message + '\n');
}
}
var lon = function longitu(){
document.addEventListener("deviceready", onDeviceReady, false);

// Cordova is ready
//
function onDeviceReady() {
    navigator.geolocation.getCurrentPosition(onSuccess, onError);
}
function onSuccess(position) {
     var element= '' +  position.coords.longitude + '' ;

}

// onError Callback receives a PositionError object
//
function onError(error) {
    alert('code: '    + error.code    + '\n' +
          'message: ' + error.message + '\n');
}
}
var map;
  function initialize() {
    var mapDiv = document.getElementById('map-canvas');
    map = new google.maps.Map(mapDiv, {
      center: new google.maps.LatLng(lat,lon ),
      zoom: 13,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });

    google.maps.event.addListenerOnce(map, 'tilesloaded', addMarkers);

  }

  function addMarkers() {
    var bounds = map.getBounds();
    var southWest = bounds.getSouthWest();
    var northEast = bounds.getNorthEast();
    var lngSpan = northEast.lng() - southWest.lng();
    var latSpan = northEast.lat() - southWest.lat();

      var latLng = new google.maps.LatLng(lat,lon);
      var marker = new google.maps.Marker({
        position: latLng,
        map: map
      });

  }



  google.maps.event.addDomListener(window, 'load', initialize);

没有地图的原因是因为没有中心坐标。
lat
lon
变量不包含纬度和经度,它们包含用于获取坐标的函数的函数引用。由于从未调用函数,因此没有坐标

这不能简单地通过调用函数来解决,因为函数不返回坐标,它们只是开始获取坐标的过程,并立即返回
undefined
。调用success回调后,坐标被放入一个变量中并被遗忘

你应该首先得到坐标,当它们到达时,你可以开始设置地图。您当前的代码正在等待
devicerady
事件获取坐标(或者如果调用了函数,它将获得坐标),并等待
load
事件设置地图。由于您不知道事件何时发生,因此可以在没有任何坐标之前设置地图。一旦坐标到达,调用设置地图的函数,在该函数中,您可以检查元素是否已加载,并根据需要使用
load
事件

有两个o函数用于获取坐标,但不需要分别获取纬度和经度

此代码用于获取坐标,然后设置地图:

document.addEventListener("deviceready", onDeviceReady, false);

// Cordova is ready
//
function onDeviceReady() {
    navigator.geolocation.getCurrentPosition(onSuccess, onError);
}

function onSuccess(position) {
    var lat = position.coords.latitude;
    var lon = position.coords.longitude;
    initialize(lat, lon);
}

// onError Callback receives a PositionError object
//
function onError(error) {
    alert('code: ' + error.code + '\n' +
        'message: ' + error.message + '\n');
}

var map;

function initialize(lat, lon) {
    var mapDiv = document.getElementById('map-canvas');

    // check if the element exists
    if (mapDiv == null) {
        // if not, wait until it does
        google.maps.event.addDomListener(window, 'load', function(){
            initialize(lat, lon);
        });
    } else {

        map = new google.maps.Map(mapDiv, {
            center: new google.maps.LatLng(lat, lon),
            zoom: 13,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        });
        google.maps.event.addListenerOnce(map, 'tilesloaded', function(){
            addMarkers(lat, lon);
        });

    }
}

function addMarkers(lat, lon) {
    var bounds = map.getBounds();
    var southWest = bounds.getSouthWest();
    var northEast = bounds.getNorthEast();
    var lngSpan = northEast.lng() - southWest.lng();
    var latSpan = northEast.lat() - southWest.lat();

    var latLng = new google.maps.LatLng(lat, lon);
    var marker = new google.maps.Marker({
        position: latLng,
        map: map
    });
}

演示(没有
DeviceReady
事件):

也许您没有返回lat和log函数中的任何内容?谢谢,先生。你的理解非常清楚easy@Guffa. 我完全被困在不知道如何向服务器提交lat/long。。。然后我看到这行:
center:new google.maps.LatLng(lat,lon),
谢谢,谢谢!