谷歌地图api v2经度和纬度地址问题

时间:2012-01-24 08:41:58

标签: javascript latitude-longitude google-maps-api-2

到目前为止,我还有一个隐蔽的脚本来从地址中获取经度和纬度。 问题是我无法提交,而提交按钮用于获取经度和纬度。

所以我想要以下内容: 地址将被放置在隐藏字段中。 (由我的CMS,ExpressionEngine填充) 与页面加载相比,经度和纬度将收集在两个输入字段中 而不是按提交和完成。

但是如何做到这一点,我到目前为止使用以下代码。 请帮忙。

     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
        <title>Longitude and Latitude from address</title>

        <script src="http://maps.google.com/maps?file=api&v=2&key=YOUR KEY" type="text/javascript" charset="utf-8">

         </script>
            <script type="text/javascript">
        //<![CDATA[

        function load() {
          if (GBrowserIsCompatible()) {
            geocoder = new GClientGeocoder();
           }
        }

        function showAddress(geolocation) {
          if (geocoder) {
            geocoder.getLatLng(
              geolocation,
              function(point) {
                if (!point) {
                  alert(geolocation + " not found");
                } else {
                  document.geoform.longitude.value = point.x;
                  document.geoform.latitude.value = point.y;
                }
              }
            );
          }
        } 

        //]]>
        </script>
        </head>
      <body onload="load()">

     <form action="#" name="geoform" id="geoform" onsubmit="showAddress(this.geolocation.value); return false">
     <input  type="hidden" name="geolocation" value="Address goes here, populated by cms" size="50"  />

     Decimal Longitude:
     <input  name="longitude" type="text" id="longitude" value="" />

     Decimal Latitude:
     <input  name="latitude" type="text"  id="latitude"  value="" />

     <input type="submit" value="Longitude/latitude codes" />
     </form>
     </body>
     </html>

1 个答案:

答案 0 :(得分:1)

当您提交表单时,提出对地址进行地理编码的请求为时已晚。 最好在页面加载上对地址进行地理编码,然后只需提交表单。

    function load() {
      if (GBrowserIsCompatible()) {
        geocoder = new GClientGeocoder();
        geocoder.getLatLng(
          document.geoform.geolocation.value,
          function(point) {
            if (!point) {
              alert(geolocation + " not found");
            } else {
              document.geoform.longitude.value = point.x;
              document.geoform.latitude.value = point.y;
            }
          }
        );
      }
    } 

顺便提一下,有三个要点:

  1. 如果没有在Google地图上显示结果,则会针对Google的Terms of Service进行地理编码。见10.1.1(g)
  2. 你不应该继续使用v2开发,它已被弃用并很快就会消失。 Use v3 instead
  3. 您可以使用web service geocoding API在服务器中执行此操作,并完全避免这种复杂性。