对地址进行地理编码时,标记未显示在地图上

时间:2019-02-07 08:10:51

标签: javascript google-maps

我正在使用Google Maps API进行项目开发,但是我坚持使用这种Geociding东西已经有好几天了...

我需要使用地理编码反向进行运算,并从给定地址获取经纬度,因此我需要这些函数来创建位置点。

var glocations = [];
var locations = [];
var infoWindow = new google.maps.InfoWindow({content: ''});
var geocoder;
var map;

function initMap() {
    var center = new google.maps.LatLng(40.6976637,-74.1197637);
    var mapOptions = {
        zoom: 8,
        center: center,
        mapTypeControl: false,
        fullscreenControl: false,
        mapTypeId: google.maps.MapTypeId.TRAFFIC,
        styles: []

    };
    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
    geocoder = new google.maps.Geocoder();
    locations = [
    ['0', '','Title', codeAddressLat('brooklyn', '0'), codeAddressLng('brooklyn', '0'), 'category-1', 'https://sat.ptvtelecom.net/img/red.png'],//this doesn't work
    ['1', '', 'Title', 40.6976637,-74.1197637, 'category-2', 'https://sat.ptvtelecom.net/img/green.png']//this works
    ];

    for (i = 0; i < locations.length; i++) {
        var url = locations[i][6];
        addMarker(locations[i], url);
    }
}


function addMarker(marker, url) {
    var category = marker[5];
    var title = marker[1];
    var pos = new google.maps.LatLng(marker[3], marker[4]);
    var content = marker[2];
    var icon = {
        url: url,
        scaledSize: new google.maps.Size(32, 32)
    };
    marker1 = new google.maps.Marker({
        title: title,
        icon: icon,
        position: pos,
        category: category,
        map: map
    });
    glocations.push(marker1);
    google.maps.event.addListener(marker1, 'click', (function (marker1, content) {
        return function () {
            infoWindow.setContent(content);
            infoWindow.open(map, marker1);
            map.panTo(this.getPosition());
            map.setZoom(20);
        }
    })(marker1, content));
}


function codeAddressLat(address, index) {
    geocoder.geocode({ 'address': address }, function (results, status) {
        var latLng = {lat: results[0].geometry.location.lat (), lng: results[0].geometry.location.lng ()};
        var lat = latLng.lat;
        if (status == 'OK') {
            locations[index][3] = lat;//this will change the lat value, but it won't show on map
            //return lat;//this will return undefined lat
        }
    });
}


function codeAddressLng(address, index) {
    geocoder.geocode({ 'address': address }, function (results, status) {
        var latLng = {lat: results[0].geometry.location.lat (), lng: results[0].geometry.location.lng ()};
        var lng = latLng.lng;
        if (status == 'OK') {
            locations[index][4] = lng;//this will change the lng value, but it won't show on map
            //return lng;//this will return undefined lng
        }
    });
}


initMap(); 

好的,所以我在这里有三个输出:

  1. 如果我直接写下lat和long值,该位置将获得浮点值和标记显示在地图上。

  2. 如果我操作locations数组,则该位置将获得浮点值,并且标记将不会显示在地图上。

  3. 如果函数返回值,则该位置将获得未定义的值,并且标记不会显示在地图中。

您可以在以下屏幕截图中看到输出结果(只是网址,我无法发布图片):

sat.ptvtelecom.net/img/result.png

任何帮助将不胜感激。

0 个答案:

没有答案