【问题标题】:Retrieve latitude and longitude of a draggable pin via Google Maps API V3通过 Google Maps API V3 检索可拖动图钉的纬度和经度
【发布时间】:2011-08-23 12:54:19
【问题描述】:

我会解释的。我设法在地图上有一个可拖动的图钉。我想检索该点的坐标并将它们放入两个字段:纬度和经度。这些坐标稍后将通过 PHP 发送到 SQL 表。 这是我打算做的an example,但不是几个引脚,它只是一个并且是可拖动的。问题是:我什至无法显示初始点的坐标。当然,当用户移动图钉时,我希望字段中的坐标也发生变化。 我希望我说清楚了。我做错了什么?我应该使用Geocoding 服务吗?

这里是 JS:

<script type="text/javascript">
  var map;
  function initialize() {
  var myLatlng = new google.maps.LatLng(40.713956,-74.006653);

  var myOptions = {
     zoom: 8,
     center: myLatlng,
     mapTypeId: google.maps.MapTypeId.ROADMAP
     }
  map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

  var marker = new google.maps.Marker({
  draggable: true,
  position: myLatlng, 
  map: map,
  title: "Your location"
  });

  google.maps.event.addListener(marker,'click',function(overlay,point){
     document.getElementById("latbox").value = lat();
     document.getElementById("lngbox").value = lng();
     });

}
</script> 

还有 HTML:

<html>
<body onload="initialize()">

  <div id="map_canvas" style="width:50%; height:50%"></div>

  <div id="latlong">
    <p>Latitude: <input size="20" type="text" id="latbox" name="lat" ></p>
    <p>Longitude: <input size="20" type="text" id="lngbox" name="lng" ></p>
  </div>

</body>
</html>

【问题讨论】:

    标签: google-maps-api-3 draggable latitude-longitude


    【解决方案1】:

    这些工作中的任何一个

    google.maps.event.addListener(marker, 'click', function (event) {
        document.getElementById("latbox").value = event.latLng.lat();
        document.getElementById("lngbox").value = event.latLng.lng();
    });
    
    google.maps.event.addListener(marker, 'click', function (event) {
        document.getElementById("latbox").value = this.getPosition().lat();
        document.getElementById("lngbox").value = this.getPosition().lng();
    });
    

    你也可以考虑使用 dragend 事件

    google.maps.event.addListener(marker, 'dragend', function (event) {
        document.getElementById("latbox").value = this.getPosition().lat();
        document.getElementById("lngbox").value = this.getPosition().lng();
    });
    

    【讨论】:

    • 嘿,谢谢,实际上我昨天用你提供的完全相同的代码自己解决了这个问题。所以我很高兴我能得到同样的结果。昨天我打算回答我自己的问题,但 StackOverFlow 不让我回答。显然我不能在 8 小时之前回答我自己的问题(新用户)。这就是我被告知的。无论如何,谢谢你的回答。
    【解决方案2】:

    【讨论】:

    • 此链接不再有效。
    【解决方案3】:

    实际运行的代码如下:

    google.maps.event.addListener(marker, 'drag', function(event){
           document.getElementById("latbox").value = event.latLng.lat();
           document.getElementById("lngbox").value = event.latLng.lng();
    });
    

    如果大头针掉落后地图可以重新居中会更好。我想这可以用map.setCenter() 完成,但我不确定我应该把它放在哪里。我试图把它放在这段代码之前和之后,但它不起作用。

    【讨论】:

      【解决方案4】:

      谷歌地图 V3 示例。这是一个用户删除单个 pin、用新 pin、自定义 pin 图像、在 DIV 内的 FORM FIELD 中填充 lat/long 值的 pin 替换丢失的 pin 的工作示例。

      <html>
      <body onLoad="initialize()">
      
        <div id="map_canvas" style="width:50%; height:50%"></div>
      
        <div id="latlong">
          <p>Latitude: <input size="20" type="text" id="latbox" name="lat" ></p>
          <p>Longitude: <input size="20" type="text" id="lngbox" name="lng" ></p>
        </div>
      
      </body>
      </html>
      
      <cfoutput>
          <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=#YOUR-GOOGLE-API-KEY#&sensor=false"></script>
      </cfoutput>
      
      <script type="text/javascript">
      //<![CDATA[
      
          // global "map" variable
          var map = null;
          var marker = null;
      
          // popup window for pin, if in use
          var infowindow = new google.maps.InfoWindow({ 
              size: new google.maps.Size(150,50)
              });
      
          // A function to create the marker and set up the event window function 
          function createMarker(latlng, name, html) {
      
          var contentString = html;
      
          var marker = new google.maps.Marker({
              position: latlng,
              map: map,
              zIndex: Math.round(latlng.lat()*-100000)<<5
              });
      
          google.maps.event.addListener(marker, 'click', function() {
              infowindow.setContent(contentString); 
              infowindow.open(map,marker);
              });
      
          google.maps.event.trigger(marker, 'click');    
          return marker;
      
      }
      
      function initialize() {
      
          // the location of the initial pin
          var myLatlng = new google.maps.LatLng(33.926315,-118.312805);
      
          // create the map
          var myOptions = {
              zoom: 19,
              center: myLatlng,
              mapTypeControl: true,
              mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
              navigationControl: true,
              mapTypeId: google.maps.MapTypeId.ROADMAP
          }
      
          map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
      
          // establish the initial marker/pin
          var image = '/images/googlepins/pin2.png';  
          marker = new google.maps.Marker({
            position: myLatlng,
            map: map,
            icon: image,
            title:"Property Location"
          });
      
          // establish the initial div form fields
          formlat = document.getElementById("latbox").value = myLatlng.lat();
          formlng = document.getElementById("lngbox").value = myLatlng.lng();
      
          // close popup window
          google.maps.event.addListener(map, 'click', function() {
              infowindow.close();
              });
      
          // removing old markers/pins
          google.maps.event.addListener(map, 'click', function(event) {
              //call function to create marker
               if (marker) {
                  marker.setMap(null);
                  marker = null;
               }
      
              // Information for popup window if you so chose to have one
              /*
               marker = createMarker(event.latLng, "name", "<b>Location</b><br>"+event.latLng);
              */
      
              var image = '/images/googlepins/pin2.png';
              var myLatLng = event.latLng ;
              /*  
              var marker = new google.maps.Marker({
                  by removing the 'var' subsquent pin placement removes the old pin icon
              */
              marker = new google.maps.Marker({   
                  position: myLatLng,
                  map: map,
                  icon: image,
                  title:"Property Location"
              });
      
              // populate the form fields with lat & lng 
              formlat = document.getElementById("latbox").value = event.latLng.lat();
              formlng = document.getElementById("lngbox").value = event.latLng.lng();
      
          });
      
      }
      //]]>
      
      </script> 
      

      【讨论】:

      • 如何在一个表单中显示两个坐标?喜欢 (-10.00000, 10.00000)?
      【解决方案5】:

      检查这个fiddle

      在以下代码中,将 dragend 替换为您想要的 event。在你的情况下'点击'

      google.maps.event.addListener(marker, 'dragend', function (event) {
          document.getElementById("defaultLatitude").value = event.latLng.lat();
          document.getElementById("defaultLongitude").value = event.latLng.lng();
      });
      

      【讨论】:

      • 干净的小提琴,能够完全重现我想要的。
      【解决方案6】:
      google.maps.event.addListener(marker, 'dragend', function (event) {
          document.getElementById("latbox").value = this.getPosition().lat();
          document.getElementById("lngbox").value = this.getPosition().lng();
      }); 
      

      对我来说效果很好..谢谢..

      【讨论】:

        【解决方案7】:
            var zoomLevel = map.getZoom();
            var pos = (event.latLng).toString();
        
            $('#position').val(zoomLevel+','+pos); //set value to some input
        

        Example Run JsFiddle

        【讨论】:

          【解决方案8】:

          试试这个:)

          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
          <!--
          develop by manoj sarnaik
           -->
          <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
            <head>
              <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
              <title>Manoj Sarnaik</title>
              <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAjU0EJWnWPMv7oQ-jjS7dYxSPW5CJgpdgO_s4yyMovOaVh_KvvhSfpvagV18eOyDWu7VytS6Bi1CWxw"
                type="text/javascript"></script>
              <script type="text/javascript">
          
              var map = null;
              var geocoder = null;
          
              function initialize() {
                if (GBrowserIsCompatible()) {
                  map = new GMap2(document.getElementById("map_canvas"));
                  map.setCenter(new GLatLng(20.236046, 76.988255), 1);
                  map.setUIToDefault();
                  geocoder = new GClientGeocoder();
                }
              }
          
              function showAddress(address) {
                if (geocoder) {
                  geocoder.getLatLng(
                    address,
                    function(point) {
                      if (!point) {
                        alert(address + " not found");
                      } else {
                        map.setCenter(point, 15);
                        var marker = new GMarker(point, {draggable: true});
                        map.addOverlay(marker);
                        GEvent.addListener(marker, "dragend", function() {
                          marker.openInfoWindowHtml(marker.getLatLng().toUrlValue(6));
                        });
                        GEvent.addListener(marker, "click", function() {
                          marker.openInfoWindowHtml(marker.getLatLng().toUrlValue(6));
                        });
                    GEvent.trigger(marker, "click");
                      }
                    }
                  );
                }
              }
              </script>
            </head>
          
            <body onload="initialize()" onunload="GUnload()">
              <form action="#" onsubmit="showAddress(this.address.value); return false">
          
                <p>
                  <input type="text" style="width:350px" name="address" value="Malegaon,washim" />
                  <input type="submit" value="Go!" />
                </p>
                <div id="map_canvas" style="width: 600px; height: 400px"></div>
              </form>
          
            </body>
          </html>
          

          【讨论】:

            猜你喜欢
            • 2013-03-01
            • 1970-01-01
            • 2018-10-06
            • 1970-01-01
            • 1970-01-01
            • 2012-01-22
            • 2014-04-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多