Вопрос по google-maps-api-3, php – Обратный геокод в Google Maps api v3

1

Интересно, сможет ли кто-нибудь помочь мне, пожалуйста.

Я использовал код, показанный ниже, для правильного построения маркеров, извлеченных из базы данных MySQL на карте Google.

<script type="text/javascript">
             //Sample code written by August Li
             var icon = new google.maps.MarkerImage("images/location-marker-2.png")
             new google.maps.Point(16, 32);
             var center = null;
             var map = null;
             var bounds = new google.maps.LatLngBounds();
             function addMarker(lat, lng, info) {
             var pt = new google.maps.LatLng(lat, lng);
             bounds.extend(pt);
             var marker = new google.maps.Marker({
             position: pt,
             icon: icon,
             map: map
             });
             }
             function initMap() {
             map = new google.maps.Map(document.getElementById("gmaps-canvas"), {
             center: new google.maps.LatLng(0, 0),
             zoom: 6,
             scrollwheel: true,     
             draggable: true, 
             mapTypeId: google.maps.MapTypeId.SATELLITE
             });
                <?php

                        include("admin/link.php");
                        include("admin/opendb.php");

                        $query = mysql_query("SELECT * FROM `detectinglocations` WHERE `locationid` = '$lid'");
                        while ($row = mysql_fetch_array($query)){
                            $locationname=$row['locationname'];
                            $osgb36lat=$row['osgb36lat'];
                            $osgb36lon=$row['osgb36lon'];
                            echo ("addMarker($osgb36lat, $osgb36lon,'<b>$locationname</b><br/>');\n");
                        }
                             mysql_close($connect);
                 ?>

                         center = bounds.getCenter();
                         map.fitBounds(bounds);
                        }
</script> 

То, что я сейчас пытаюсь сделать, это добавить дополнительные функциональные возможности, которые позволяют пользователям также нажимать на карту, чтобы наносить новые маркеры, по сути, используя ранее существующий маркер из базы данных в качестве точки для работы, выполняяreverse geocode.

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

Я знаю, что для включенияon-click Событие мне нужно включить что-то вроде:

google.maps.event.addListener(map, 'click', function(event) { marker.setPosition(event.latLng) geocode_lookup( 'latLng', event.latLng ); }); }

но я должен признать, что немного не уверен в том, что еще мне нужно включить.

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

Большое спасибо и всего наилучшего

Привет @ HeitorChang, спасибо, что нашли время ответить на мой пост, и мои извинения за то, что не разъяснили это. Когда карта загрузится, на карте уже будет заполнен маркер. Это загружается из lat и lng, хранящихся в базе данных MySQL. Теперь мне нужно попробовать добавить функциональность, с помощью которой пользователь также может щелкнуть карту и выполнитьreverse geocode без влияния на предварительно заполненный маркер. Я надеюсь, что это делает это немного яснее. С уважением IRHM
Я не понимаю ясно. Вы хотите получить адрес для каждого маркера, который добавляется из базы данных? Или когда карта нажата? Когда щелкает маркер базы данных? Все вышеперечисленное? После обратного геокодирования куда должны идти адреса? Heitor Chang

Ваш Ответ

1   ответ
0

Я написал отдельную страницу с картами с функциональностью просто-обратного геокода

http://jsfiddle.net/ZDQeM/

Я думаю, что с деталями адреса сложно работать. Результатом является массив с разными уровнями точности, один может включать округ, другой штат, другой адрес улицы. Обычно я использую только результаты [0]. Подробности в документах:https://developers.google.com/maps/documentation/javascript/geocoding#GeocodingResponses

Если вам нужна конкретная информация, то верным способом ее получения является итерация по всему массиву результатов, пока вы не найдете то, что вам нужно (например, types [], содержащие postal_code).

    google.maps.event.addListener(map, 'click', function(event) {
      userMarker = new google.maps.Marker({
        map: map,
        position: event.latLng
      });

      geocoder.geocode({'latLng': event.latLng}, function(results, status) {
        if(status == google.maps.GeocoderStatus.OK) {
          if (results[0]) {
            alert(results[0].formatted_address);
          }
          else {
            alert("No results");
          }
        }
        else {
          alert("Geocoding unsuccessful: Status " + status);
        }
      });
    });

Где в вашем коде?

<script type="text/javascript">
         //Sample code written by August Li
         var icon = new google.maps.MarkerImage("images/location-marker-2.png")
         new google.maps.Point(16, 32);
         var center = null;
         var map = null;
         var bounds = new google.maps.LatLngBounds();
         function addMarker(lat, lng, info) {
         var pt = new google.maps.LatLng(lat, lng);
         bounds.extend(pt);
         var marker = new google.maps.Marker({
         position: pt,
         icon: icon,
         map: map
         });
         }
         function initMap() {
         map = new google.maps.Map(document.getElementById("gmaps-canvas"), {
         center: new google.maps.LatLng(0, 0),
         zoom: 6,
         scrollwheel: true,     
         draggable: true, 
         mapTypeId: google.maps.MapTypeId.SATELLITE
         });
            <?php

                    include("admin/link.php");
                    include("admin/opendb.php");

                    $query = mysql_query("SELECT * FROM `detectinglocations` WHERE `locationid` = '$lid'");
                    while ($row = mysql_fetch_array($query)){
                        $locationname=$row['locationname'];
                        $osgb36lat=$row['osgb36lat'];
                        $osgb36lon=$row['osgb36lon'];
                        echo ("addMarker($osgb36lat, $osgb36lon,'<b>$locationname</b><br/>');\n");
                    }
                         mysql_close($connect);
             ?>

                     center = bounds.getCenter();
                     map.fitBounds(bounds);

                     var geocoder = new google.maps.Geocoder();

                     google.maps.event.addListener(map, 'click', function(event) {
                       var userMarker = new google.maps.Marker({
                         map: map,
                         position: event.latLng
                       });

                     geocoder.geocode({'latLng': event.latLng}, function(results, status) {
                       if(status == google.maps.GeocoderStatus.OK) {
                         if (results[0]) {
                           alert(results[0].formatted_address);
                         }
                         else {
                           alert("No results");
                         }
                       }
                       else {
                         alert("Geocoding unsuccessful: Status " + status);
                       }
                     });
                   });
                 }
</script> 
Error: User Rate Limit Exceeded IRHM
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded IRHM

Похожие вопросы