1

実際、私はユーザーが自分のビジネスを追加できる Web サイトに取り組んでいます。そして、地図上に任意の場所を追加できる機能を彼に提供したいと考えています。ビジネスの詳細をその地図の詳細とともに保存すると、データベースに移動して、ビジネスをウェブサイトに投稿した後、その場所が地図上に表示されるようになります。要するに、ユーザーが自分の場所を地図上に追加できるようにしたいと考えています。その特定のユーザー マップでは、自分の場所を地図上に表示する必要があります。私はこれらすべてに慣れていないので、これを行う方法が混乱しています。だから私を助けてください。Googleで検索しましたが、問題の解決に何の助けも得られません。前もって感謝します....

これが私の試したコードです:

        <script type="text/javascript">
    function initialize() {
      var mapOptions = {
        center: new google.maps.LatLng(-33.8688, 151.2195),
        zoom: 13,
        mapTypeId: google.maps.MapTypeId.ROADMAP
      };
      var map = new google.maps.Map(document.getElementById('map-canvas'),
        mapOptions);

      var input = /** @type {HTMLInputElement} */(document.getElementById('searchTextField'));
      var autocomplete = new google.maps.places.Autocomplete(input);

      autocomplete.bindTo('bounds', map);

      var infowindow = new google.maps.InfoWindow();
      var marker = new google.maps.Marker({
        map: map
      });

      google.maps.event.addListener(autocomplete, 'place_changed', function() {
        infowindow.close();
        marker.setVisible(false);
        input.className = '';
        var place = autocomplete.getPlace();
        if (!place.geometry) {
          // Inform the user that the place was not found and return.
          input.className = 'notfound';
          return;
        }

        // If the place has a geometry, then present it on a map.
        if (place.geometry.viewport) {
          map.fitBounds(place.geometry.viewport);
        } else {
          map.setCenter(place.geometry.location);
          map.setZoom(17);  // Why 17? Because it looks good.
        }
        marker.setIcon(/** @type {google.maps.Icon} */({
          url: place.icon,
          size: new google.maps.Size(71, 71),
          origin: new google.maps.Point(0, 0),
          anchor: new google.maps.Point(17, 34),
          scaledSize: new google.maps.Size(35, 35)
        }));
        marker.setPosition(place.geometry.location);
        marker.setVisible(true);

        var address = '';
        if (place.address_components) {
          address = [
            (place.address_components[0] && place.address_components[0].short_name || ''),
            (place.address_components[1] && place.address_components[1].short_name || ''),
            (place.address_components[2] && place.address_components[2].short_name || '')
          ].join(' ');
        }
        var place = autocomplete.getPlace();
                document.getElementById('city2').value = place.name;
                document.getElementById('cityLat').value = place.geometry.location.lat();
                document.getElementById('cityLng').value = place.geometry.location.lng();
    var latitude = place.geometry.location.lat();
    var longitude = place.geometry.location.lng(); 
        infowindow.setContent('<div><strong>' + place.name + '</strong><br>' + address);
        infowindow.open(map, marker);
      });

      // Sets a listener on a radio button to change the filter type on Places
      // Autocomplete.
      function setupClickListener(id, types) {
        var radioButton = document.getElementById(id);
        google.maps.event.addDomListener(radioButton, 'click', function() {
          autocomplete.setTypes(types);
        });
      }

      setupClickListener('changetype-all', []);
      setupClickListener('changetype-establishment', ['establishment']);
      setupClickListener('changetype-geocode', ['geocode']);
    }

    google.maps.event.addDomListener(window, 'load', initialize);

        </script>
    <style>
    #map-canvas, #map_canvas {
      height: 400px;
      width: 900px;
    }

    @media print {
      #map-canvas, #map_canvas {
        height: 400px;
        width: 900px;
      }
    }

    </style>
    </head>
    <body>
    <?php
    /*
     * Smarty plugin
     * -------------------------------------------------------------
     * File:     function.map.php
     * Type:     map
     * Name:     Map
     * Purpose:  Accept the keyword & find it on a map.
     * -------------------------------------------------------------
     */

     function smarty_function_map($params, &$smarty)
    {
        ?>

        <div id="panel">
        <label>Location/Area*</label><input id="searchTextField" type="text" size="50" placeholder="Enter Location/Area">
        <input type="text" id="city2" name="city2" />
        <input type="text" id="cityLat" name="cityLat" />
        <input type="text" id="cityLng" name="cityLng" />
        </div>
        <div id="map-canvas"></div>

        <?php

    }
    ?>
    </body>
    </html>
4

1 に答える 1

2

ユーザーがマーカーをクリックしてマップに追加できるようにするには、マップ上のクリックをリッスンするイベント リスナーをセットアップする必要があります。例:

var marker;

google.maps.event.addListener(map, 'click', function(event) {
  if ( marker ) {
    marker.setPosition(event.latLng);
  } else {
    marker = new google.maps.Marker({
      position: event.latLng,
      map: map,
      draggable:true
    });
  }
});

また、ユーザーがマーカーをプロットした後にドラッグできるようにする必要もあります。これを行うには、マーカーをドラッグ可能に設定します (上記の例ではこれを行いました)。問題のマーカーにイベント リスナーをアタッチして、変更をリッスンする必要もあります。

google.maps.event.addListener(marker, 'dragend', function(){
    //Do something because marker has been dragged somewhere...
});

最後に、マップをクリックするかマーカーをドラッグするたびに、結果の緯度と経度の値を隠しフィールドに保存して、データベースに位置を保存できるようにする必要があります。

于 2013-08-01T11:48:46.287 に答える