首页 > 解决方案 > 显示地球另一端的谷歌地图

问题描述

我一直在尝试任何事情,但地图显示在南极洲的某个地方,而我收到的坐标是针对美国城市的。

以下是初始化地图的代码:

$(window).on('load', function() {

// eslint-disable-next-line
function initTest() {
var fastestCitiesApi = JSON.parse(document.getElementById('fastestCitiesApi').value);
console.log(fastestCitiesApi);
var tempLatLng = fastestCitiesApi[0]['latLng'];
console.log(tempLatLng);
var latLng = tempLatLng.split(',');
console.log('latLng[0]: ' + latLng[0]);
console.log('latLng[1]: ' + latLng[1]);
const myLatLng = new google.maps.LatLng({ lat: parseFloat(latLng[0]), lng: parseFloat(latLng[1]) });
const mapOptions = {
  zoom: 4,
  center: myLatLng
};
const map = new google.maps.Map(document.getElementById('fastest_cities_map'), mapOptions);
new google.maps.Marker({
  position: myLatLng,
  map,
  title: 'somewhere',
});
}

initTest();
});

正如您在控制台的以下屏幕截图中看到的那样,坐标是 36、78 - 当我在 google 上查找 Boydton, VA 时 - 这些是返回的坐标 -链接到 google 搜索弗吉尼亚州博伊顿 在此处输入图像描述

正如您在屏幕截图中看到的那样,我的错误为零。我究竟做错了什么?

提前致谢

标签: google-mapsgoogle-maps-markers

解决方案


感谢@Gray 指出 long 应该是负数,数组的其余部分按预期加载了标记。

这是最终的代码:

    $(window).on('load', function() {
  // eslint-disable-next-line

  function initTest() {
    /* init vars */
    const map = new google.maps.Map(document.getElementById('fastest_cities_map'));
    var fastestCitiesApi = JSON.parse(document.getElementById('fastestCitiesApi').value);
    // console.log(fastestCitiesApi);
    var tempLatLng = '';
    var latLng = [];

    var markerOptionsArray = new Array();
    var latlngArray = new Array();

    var myLat = new Array();
    var myLng = new Array();
    var markers = [];
    var nameArray = [];
    var infowindow = new google.maps.InfoWindow({maxWidth: 350});
    /* create arrays for markers */
    for(var item in fastestCitiesApi) {
      tempLatLng = fastestCitiesApi[item]['latLng'];
      nameArray.push(fastestCitiesApi[item]['city']);
    // console.log(tempLatLng);
      latLng = tempLatLng.split(',');
      myLat.push(latLng[0]);
      myLng.push(latLng[1]);
    // console.log('latLng[0]: ' + latLng[0]);
    // console.log('latLng[1]: ' + latLng[1]);

      markers.push({
        lat: myLat[item],
        lng: myLng[item],
        name: nameArray[item],
      });
    }
  // console.log('markers: ' + JSON.stringify(markers));

    var bounds = new google.maps.LatLngBounds();

    for (var v=0; v<markers.length; v++)
    {
      var secheltLoc = new google.maps.LatLng(markers[v].lat, markers[v].lng);
      var myOptions = {
        content: markers[v].name
        ,boxStyle: {
          border: "none"
          ,textAlign: "center"
          ,fontSize: "12pt"
          ,width: "120px"
        }
        ,disableAutoPan: true
        ,pixelOffset: new google.maps.Size(-50, 0)
        ,position: secheltLoc
        ,closeBoxURL: ""
        ,isHidden: false
        ,pane: "mapPane"
        ,enableEventPropagation: true
      };


      var marker = new google.maps.Marker({
        position: new google.maps.LatLng(markers[v].lat, markers[v].lng),
        map: map,
        center: new google.maps.LatLng(markers[v].lat, markers[v].lng)
      });

      google.maps.event.addListener(marker, 'click', (function (marker, v) {
        return function () {
          infowindow.setContent(markers[v].name);
          infowindow.open(map, marker);
        }
      })(marker, v));

      google.maps.event.addListener(map, 'click', function () {
        infowindow.close();
        marker.open = false;
      });

      bounds.extend(new google.maps.LatLng(markers[v].lat, markers[v].lng));

      myLatLng = markers[v].lat+','+markers[v].lng;
    }

    map.fitBounds(bounds);
  }
  // alert(google.maps.Map);
    initTest();
});

以下是八城阵的结果截图: 谷歌地图的屏幕截图


推荐阅读