【问题标题】:Using Client Side Script For Google Geo Location将客户端脚本用于 Google 地理位置
【发布时间】:2013-11-06 18:15:17
【问题描述】:

我正在创建一个使用 Google 地理编码进行网站注册的网站。目前我使用的代码是服务器端的,但理想情况下我希望将它作为客户端脚本。如何转换:

$id= mysqli_real_escape_string($con, $_REQUEST["id"]);
$postcode= mysqli_real_escape_string($con, $_REQUEST["postcode"]);

$mapping = file_get_contents("http://maps.google.com/maps/api/geocode/json?address=" . $postcode . "&sensor=false" );
$geocodes = json_decode($mapping);

if($geocodes->status == 'OK'){
     $town = $geocodes->results[0]->address_components[1]->long_name;
     $city = $geocodes->results[0]->address_components[4]->long_name;
     $county = $geocodes->results[0]->address_components[2]->long_name;
     $lat = $geocodes->results[0]->geometry->location->lat;
     $lon = $geocodes->results[0]->geometry->location->lng;
}
else{...

另外,我希望能够过滤掉国家,所以有人知道这个数字代表什么吗?

【问题讨论】:

标签: php geolocation geocoding google-geocoder


【解决方案1】:

以下是使用 google geo API 获取邮政编码坐标/位置信息的示例 javascript(客户端)端代码。我在代码中硬编码了一个邮政编码以进行演示。来自 google 的结果显示在 DisplayAddress() 例程中。

<html>
<head>
</head>
<script>

    // Show a locator on the map
    //
    function ShowLocation( postal )
    {
        // Get the geographic location
        var url = "http://maps.google.com/maps/api/geocode/json?address=" + postal + "&sensor=false";
        sendRequest( url, DisplayAddress  );
    }

    function DisplayAddress( url, response )
    {
        alert( response );
    }

    // Make a REST based request
    function sendRequest( url, callback ) 
    {
        var req = createXMLHTTPObject();
        if (!req) 
            return;
        req.open( "GET", url, true);
        req.setRequestHeader('User-Agent','XMLHTTP/1.0');

        req.onreadystatechange = function () 
        {
            if (req.readyState != 4) return;

            if (req.status != 200 && req.status != 206 && req.status != 304) 
            {
                alert( req.status + " " + url );
                return;
            }   
            callback( url, req.responseText );
        }

        if (req.readyState == 4) 
            return;
        req.send( null );
    }

    // Create object for making REST based request
    function createXMLHTTPObject() 
    {
        if (navigator.appName == "Microsoft Internet Explorer") 
        {
                http = new ActiveXObject("Microsoft.XMLHTTP");
        } else {
                http = new XMLHttpRequest();
        }
        return http;
    }
</script>
<body onload="ShowLocation( '98607' )">
</body>
</html>

Andrew,OpenGeoCode.Org 的联合创始人

【讨论】:

  • 感谢安德鲁,但老实说,我不想要地图信息,而是将城镇、城市等存储到成员数据库中。我正在做的是使用一个文本框,用户在其中输入完整的英国邮政编码,然后将代码发送到一个单独的 PHP 脚本(如上所示),该脚本根据邮政编码提取信息,然后将其输入数据库。如何使用上面的 Javascript 来做客户端而不是服务器端?
  • 不想告诉你,但谷歌禁止使用地理编码 API 而不在地图上显示它!您可以使用 geonames.org (geonames.org/export/web-services.html) 的免费服务替换 google 服务。您可以获取 JSON 或 XML 格式的结果。只需解析结果以提取城镇、城市等,然后将它们传递给数据库查询。
  • 我忽略了。插入数据库必须在服务器端进行。您可以使用 REST 接口为数据库插入创建 PHP 网页,然后通过 REST 接口将城镇、城市等数据传递给 PHP 脚本。您还需要考虑其他人不直接调用 PHP 脚本的安全性。
  • 感谢安德鲁提供的所有信息,实际上我刚刚看到了一些关于 Google TOS for Maps 的内容,这很烦人,因为这种方法对我的网站非常有效。显示地图究竟意味着什么?邮政编码输入框在我的注册页面上,所以那里显然没有显示地图。使用它的主要目的是用于 LON 和 LAT 坐标。是否有另一种方法可以使用 Google 来绕过 Google 的条款?
  • Google 仅出于使用 lat/lng 坐标在 google 地图上显示某些内容的目的限制使用其地理编码服务。
猜你喜欢
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多