无需手动输入即可自动完成反向地理编码的数据

Posted

技术标签:

【中文标题】无需手动输入即可自动完成反向地理编码的数据【英文标题】:autocomplete the data for Reverse Geocoding without manual input 【发布时间】:2014-08-07 12:30:33 【问题描述】:

这是来自谷歌 api 地图的反向地理编码。我的问题是.. 可以删除或隐藏<div id="panel"> 并从当前用户位置获取数据,而无需用户按下按钮来反向地理编码? 我只想显示用户的地址而不显示高度和经度.. 谢谢

 <!DOCTYPE html>
        <html>
          <head>
            <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
            <meta charset="utf-8">
            <title>Reverse Geocoding</title>
            <style>
              html, body, #map-canvas 
                height: 100%;
                margin: 0px;
                padding: 0px
              
              #panel 
                position: absolute;
                top: 5px;
                left: 50%;
                margin-left: -180px;
                z-index: 5;
                background-color: #fff;
                padding: 5px;
                border: 1px solid #999;
              
            </style>
            <script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>
            <script>
        var geocoder;
        var map;
        var infowindow = new google.maps.InfoWindow();
        var marker;
        function initialize() 
          geocoder = new google.maps.Geocoder();
          var latlng = new google.maps.LatLng(40.730885,-73.997383);
          var mapOptions = 
            zoom: 8,
            center: latlng,
            mapTypeId: 'roadmap'
          
          map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
        

        function codeLatLng() 
          var input = document.getElementById('latlng').value;
          var latlngStr = input.split(',', 2);
          var lat = parseFloat(latlngStr[0]);
          var lng = parseFloat(latlngStr[1]);
          var latlng = new google.maps.LatLng(lat, lng);
          geocoder.geocode('latLng': latlng, function(results, status) 
            if (status == google.maps.GeocoderStatus.OK) 
              if (results[1]) 
                map.setZoom(11);
                marker = new google.maps.Marker(
                    position: latlng,
                    map: map
                );
                infowindow.setContent(results[1].formatted_address);
                infowindow.open(map, marker);
               else 
                alert('No results found');
              
             else 
              alert('Geocoder failed due to: ' + status);
            
          );
        

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

            </script>
            <style>
              #panel 
                position: absolute;
                top: 5px;
                left: 50%;
                margin-left: -180px;
                width: 350px;
                z-index: 5;
                background-color: #fff;
                padding: 5px;
                border: 1px solid #999;
              
              #latlng 
                width: 225px;
              
            </style>
          </head>
          <body>


     <div id="panel">
              <input id="latlng" type="text" value="40.714224,-73.961452">
              <input type="button" value="Reverse Geocode" onclick="codeLatLng()">
            </div>
            <div id="map-canvas"></div>


          </body>
        </html>

【问题讨论】:

【参考方案1】:

是的你可以。

希望您知道HTML5 Geolocation,这将有助于您获取用户的当前位置。

if (navigator.geolocation) 
     navigator.geolocation.getCurrentPosition(function (position) 
         revereGeoCode(position.coords.latitude, position.coords.longitude);
     );
  else 
  // make sure to handle the failure
 

使用这个应用你的概念,摆脱手动获取 lat 和 lng。

完整的代码如下所示

 var geocoder;
 var map;
 var marker;
 var infowindow = new google.maps.InfoWindow();

 function initializeMap() 

     if (navigator.geolocation) 
         navigator.geolocation.getCurrentPosition(function (position) 
             revereGeoCode(position.coords.latitude, position.coords.longitude);
         );
      else 
         console.log("er")
         // make sure to handle the failure
     

     var mapOptions = 
         zoom: 8,
         center: new google.maps.LatLng(40.730885, -73.997383),
         mapTypeId: 'roadmap'
     
     map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
 

 function revereGeoCode(lat, lng) 
     geocoder = new google.maps.Geocoder();
     var latlng = new google.maps.LatLng(lat, lng);
     geocoder.geocode(
         'latLng': latlng
     , function (results, status) 
         if (status == google.maps.GeocoderStatus.OK) 
             if (results[1]) 
                 // place your marker coding
                 map.setZoom(11);
                 marker = new google.maps.Marker(
                     position: latlng,
                     map: map
                 );
                 infowindow.setContent(results[1].formatted_address);
                 infowindow.open(map, marker);
              else 
                 alert('No results found');
             
          else 
             alert('Geocoder failed due to: ' + status);
         
     );
 

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

JSFiddle

【讨论】:

谢谢你,我已经复制了上面的代码,并在第一行的 function initializeMap(); 上给了我错误 @user2602047 我已经修好了。立即尝试

以上是关于无需手动输入即可自动完成反向地理编码的数据的主要内容,如果未能解决你的问题,请参考以下文章

对区域和提供商进行地理编码

MariaDB - 地理编码查询非常慢

无需额外过滤即可返回所有带有预输入的远程匹配项

如何从谷歌地图自动完成 api 获取邮政编码

手动触发 jQuery 自动完成

Javascript地理位置自动地址文本框完成