Обратное геокодирование в Oracle Apex (из перетаскиваемого маркера)

В настоящее время я разрешаю пользователю помещать адрес в текстовые поля и отображать адрес на карте Google, но теперь я хочу сделать обратное и получить ближайший соответствующий адрес к текстовым полям (которые находятся в отдельном регионе, на той же странице) из перетаскиваемый маркер. Я слышал, что мне следует использовать JSON с PHP или PL/JSON для передачи данных с карты в текстовые поля. Однако у меня нет никаких знаний о JSON, и я думаю, что API карт Google предоставляет такие методы геокодирования внутри JavaScript. Я не уверен, как его полностью применить, и возможно ли получить оба метода на одной странице (или, может быть, мне следует использовать какую-то процедуру с JavaScript и вызывать ее на странице, не уверен). Вот мой код в заголовке HTML страницы:

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>

<script type="text/javascript">
var uniLatLng = new google.maps.LatLng (51.887496, -2.088788);
var geocoder = new google.maps.Geocoder();
var map;

function geocodePosition(pos) {
        geocoder.geocode({
                latLng: pos
        },
        function(responses) {
                if (responses && responses.length > 0) {
                        updateMarkerAddress(responses[0].formatted_address);
                }
                else {
                    updateMarkerAddress('Cannot determine address at this location.');
                }
        });
}

function updateMarkerStatus(str) {
        document.getElementById('P15_ADDRESS').value;
}

function initialize() {
        geocoder = new google.maps.Geocoder();
        var mapOptions = {
                zoom: 16,
                center: uniLatLng,
                mapTypeId: google.maps.MapTypeId.ROADMAP
        }
        map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
};

var marker = new google.maps.Marker({
            map: map,
            animation: google.maps.Animation.DROP,
            flat: false,
            position: new google.maps.LatLng(59.327383, 18.06747)
})

function map_canvas() {
        var address = "&P15_ADDRESS.";
        geocoder.geocode( { 'address': address, 'region': "GB"}, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                        map.setCenter(results[0].geometry.location);
                        var marker = new google.maps.Marker({
                                map: map,
                                draggable: true,
                                animation: google.maps.Animation.DROP,
                                flat: false,
                                position: results[0].geometry.location
                        });
                }
                else {
                        alert("Geocode was not successful for the following reason: " + status);
                }
        });
}
</script>

HTML-атрибут тела страницы — onload="initialize(), map_canvas()"

Любые предложения, как я могу достичь этого?


person UZIERSKI    schedule 16.04.2015    source источник


Ответы (1)


Я думаю, что этот пример делает то, что вам нужно в части обратного геокодирования.
https://developers.google.com/maps/documentation/javascript/examples/geocoding-reverse

единственное, что вам нужно добавить к этому, — это перетаскиваемый маркер с прослушивателем для on dragged, который будет обновлять позицию и вызывать те же методы, что и в кнопке Reverse Geocode.

person kaho    schedule 17.04.2015
comment
Да, я согласен, однако в апексе это не так просто. Я примерно могу сделать это с помощью html и JavaScript, но для передачи значений из карты Google в определенные текстовые поля (P20_ADDRESS, P20_POST_CODE и т. д.) в апекс-регионе требуется нечто большее. В настоящее время я выполняю процедуру (SQL + JavaScript), которая будет вызываться (PL/SQL и немного JavaScript), чтобы отображать маркер и передавать значения в переменные, а переменные будут преобразованы в определенные текстовые поля (PL /SQL). Это мой план, посмотрим, как он сработает ;) - person UZIERSKI; 24.04.2015