Маркеры не отображаются на карте при геокодировании адреса - PullRequest
0 голосов
/ 07 февраля 2019

Я работаю с Google Maps API для проекта, и я застрял с этой штукой геоцидов в течение нескольких дней ...

Мне нужно использовать геокодирование, чтобы перейти в обратном направлении и получить широту и долготу отзаданный адрес, поэтому мне нужны эти функции для создания точек местоположения.

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. Если я манипулирую массивом местоположений, местоположение получит значения с плавающей точкой, и маркер выиграетне отображается на карте.

  3. Если функции возвращают значения, местоположение получит неопределенные значения, а маркер не будет отображаться на карте.

Вы можете увидеть, как выглядит вывод на следующем снимке экрана (только URL, я не могу публиковать изображения):

sat.ptvtelecom.net / img / result.png

Любая помощь будет очень признательна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...