JavaScript Google Maps API 如何将位置经/纬度存储到全局变量

标签 javascript google-maps google-maps-api-3

我是 JavaScript 的新手,希望实现 Google 提供的代码以在您的位置放置标记。但是,我想获取位置数据并在“getCurrentPosition” block 之外使用它。

我的第一步是在 block 外实例化一个具有 lat 和 long 属性的对象,并将其作为 getCurrentPosition 内函数的参数:

function initMap() {

    var pos = {
        lat: 42.1,
        lng: -74.1
    };

    var map = new google.maps.Map(document.getElementById('map'), {
                                  center: {lat: 42, lng: -74},
                                  zoom: 6
                                  });
    var infoWindow = new google.maps.InfoWindow({map: map});

    // Try HTML5 geolocation.
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function(position, pos) {
                                                 pos.lat = position.coords.latitude;
                                                 pos.lng = position.coords.longitude;

                                                 map.setCenter(pos);
                                                 }, function() {
                                                    handleLocationError(true, infoWindow, map.getCenter());
                                                 });
    } else {
        // Browser doesn't support Geolocation
        handleLocationError(false, infoWindow, map.getCenter());
    }

    var marker = new google.maps.Marker({
                                        position: pos,
                                        map: map,
                                        title: 'Release Source'
                                        });

}

这样做的效果是,标记将位于实例化对象时指定的位置。这些是占位符值,因为我的当前位置在几个州之外。

“pos.lat = position.coords.latitude”和“pos.lng = position.coords.longitude”不会覆盖实例化全局“pos”对象时设置的属性值。

map 不是以我当前位置为中心,而是基于实例化时最初分配给“pos”的占位符纬度和经度值。

当我更改为“navigator.geolocation.getCurrentPosition(function(position) { ... }",

这会删除对“getCurrentPosition” block 内的全局“pos”变量的引用。似乎创建了一个名为“pos”的局部变量。

block 内“pos”的本地实例将根据我当前的位置分配其纬度和经度。然后,按照 block 中的说明, map 以我当前位置为中心。

但是,标记将显示在实例化全局变量“pos”时分配为占位符值的原始经纬度。

请告诉我如何获取“getCurrentPosition” block 之外的当前纬度/经度值数据并进入全局“pos”对象。

最佳答案

getCurrentPosition 方法定义为(来自 the documentation ):

navigator.geolocation.getCurrentPosition(success[, error[, options]])

Parameters

success - A callback function that takes a Position object as its sole input parameter.

error - Optional - An optional callback function that takes a PositionError object as its sole input parameter.

options - Optional - An optional PositionOptions object.

您使用它的方式会导致创建一个本地 pos 变量(值为 null)。

function(position, pos) {

只需创建带有单个参数的函数签名:

function(position) {

代码片段:

function initMap() {
  var infoWindow = new google.maps.InfoWindow();
  var pos = {
    lat: 42.1,
    lng: -74.1
  };

  var map = new google.maps.Map(document.getElementById('map'), {
    center: {
      lat: 42,
      lng: -74
    },
    zoom: 6
  });

  // Try HTML5 geolocation.
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
      pos.lat = position.coords.latitude;
      pos.lng = position.coords.longitude;

      map.setCenter(pos);
      var marker = new google.maps.Marker({
        position: pos,
        map: map,
        title: 'Release Source'
      });
    }, function() {
      handleLocationError(true, infoWindow, map.getCenter(), map);
    });
  } else {
    // Browser doesn't support Geolocation
    handleLocationError(false, infoWindow, map.getCenter(), map);
  }

  function handleLocationError(input, infoWindow, center, map) {
    infoWindow.setContent("ERROR: " + input);
    infoWindow.setPosition(center);
    infoWindow.open(map);
  }
}
google.maps.event.addDomListener(window, 'load', initMap);
html,
body,
#map {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry,places&key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
<div id="map"></div>

proof of concept fiddle

关于JavaScript Google Maps API 如何将位置经/纬度存储到全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34403239/

相关文章:

javascript - 如何从 JQuery 函数内将值推送到数组

javascript - 是否有相当于 css/sass 的 JavaScript

php - 中止 jquery ajax 时中止 php 脚本执行

javascript - 方括号语法中的 Node.js 函数 [function] 或 [function : isBuffer]

javascript - JSON Stringify 删除 Google Place 对象中的某些属性

javascript - 如何在谷歌地图的边缘创建填充

google-maps-api-3 - Google Maps API data.remove 不起作用

jquery - main.js 上的谷歌地图 "a is null"(第 1121 行)

php - 谷歌地图 : is a lat/lng within a polygon?

javascript - 从自动完成地址输入中获取纬度和经度,并使用谷歌地图 API 显示下面的 map