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 ); }); }

しかし、私は他に何を組み込む必要があるかについて少し確信が持てないことを認めなければなりません。

誰かがこれを見てくれないかと思ったのですが、どこが間違っているのか誰かに教えてもらえたらとてもありがたいです。

よろしくお願いします

4

1 に答える 1

0

Click-to-reverse-geocode機能を備えた別のマップページを作成しました

http://jsfiddle.net/ZDQeM/

住所の詳細は扱いにくいと思います。結果は、さまざまなレベルの精度で配列になります。1つには郡、もう1つには州、もう1つには番地が含まれる場合があります。通常、私はresults[0]のみを使用します。詳細はドキュメントにあります:https ://developers.google.com/maps/documentation/javascript/geocoding#GeocodingResponses

特定の情報が必要な場合、それを取得する確実な方法は、必要な情報(たとえば、postal_codeを含むtypes [])が見つかるまで、結果配列全体を反復処理することです。

    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> 
于 2012-06-04T15:43:07.880 に答える