Обратное геокодирование здесь / Nokia Map

Я пытаюсь реализовать новую структуру здесь map(веб-приложение asp.net) , однако я не вижу функций передачи информации о местоположении и получения определенного адреса через javascript и прикрепляю эту информацию к пузырю на маркере.

Признателен за любые советы. ваше здоровье


person memz    schedule 21.10.2013    source источник
comment
Извините, совершенно непонятно, о чем вы спрашиваете. Что вы пробовали и какая у вас проблема?   -  person Christian Ternus    schedule 21.10.2013
comment
Речь шла об атрибуте локации - Готово. Однако моя текущая проблема заключается в том, как вызвать метод reverseGeoCode более одного раза, чтобы на карте было больше маркеров с адресом в пузырьках? Я не могу выполнить цикл, который: map.addListener(displayready, function () { searchManager.reverseGeoCode({ latitude: reverseGeoCodeTerm.latitude, longitude: reverseGeoCodeTerm.longitude, onComplete: processResults}); }); так как у меня больше широты и долготы   -  person memz    schedule 21.10.2013


Ответы (1)


Я думаю, вы хотите сделать несколько одновременных запросов обратного геокодирования. В этом нет проблем, поскольку вызовы асинхронны, вам просто нужно вести подсчет завершенных запросов и один раз в конце вызывать ваши действия «сделать-после-всего-завершенного»:

e.g:

function concurrentSearch(map){
    // we will put our address markers into this container
    addressContainer = new nokia.maps.map.Container();
    managersFinished = 0;

    //Locations to be displayed
    latLngs= [[10,30], [-117.5, 15.3] ... etc];
    var  i = latLngs.length;

    while(i--) {
        nokia.places.search.manager.reverseGeocode({
            latitude: latLngs[i][0],
            longitude: latLngs[i][1],
            onComplete: processResults
        });
    }
}

С функцией обратного вызова, как показано:

   function processResults(data, requestStatus) {
        if (requestStatus == "OK") {
            // if we are finished, we add a marker for the mapped position
            var marker = new nokia.maps.map.StandardMarker(data.location[0].position);
            marker.content = data.location[0].address.text; // add your content here
            addressContainer.objects.add(
                marker);
            //increment the counter to notify another manager has finished
            managersFinished++;
        } else if(requestStatus === "ERROR") {
            // we'll also increment in case of an error
            managersFinished++;
        }

        // if all managers are finished, we call the final function
        if(managersFinished === latLngs.length) {
            onAllManagersFinished();
        }
    }

И финальная уборка:

 function onAllManagersFinished() {
        //we get the bounding box of the container
        var bbox = addressContainer.getBoundingBox();

        // if the bounding box is null then there are no objects inside
        // meaning no markers have been added to it

        if (bbox != null) {
                // we have at least one address mapped
                // so we add the container and zoomTo it
                map.objects.add(addressContainer);
                map.zoomTo(bbox);
        } else {
                // otherwise we'll pop up an error message
                alert("There are no addresses to show :(");
        }
    }

Кроме того, вы можете добавить один обработчик событий в контейнер, который мог бы открывать всплывающие окна для всех ваших местоположений:

addressContainer.addListener(
    "click", 
    function (evt) { 
        infoBubbles.openBubble(evt.target.content, // content is your own stuff...
        evt.target.coordinate);
    }
);

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

Решение аналогичной проблемы (множественные запросы геокодирования) можно найти здесь.

person Jason Fox    schedule 21.10.2013