寻找最近的城镇


Finding the nearest town/city

我正在寻找一种方法来查找浏览我网站的人所在的最近的城镇和县。然后我希望它是这样的:

$town = "London, England";

或者类似于:

$town = "Bacup, Lancashire GB";

谷歌成功地做到了这一点。当你搜索某个东西时,页面底部会显示"你的村庄——来自你的互联网地址"。

感谢

由于您想知道查看您网站的人的位置,因此数据将从客户端机器中获取。使用

navigator.geolocation.getCurrentPosition(showPosition);

用于获取客户的位置。showPosition是要传递的函数名称,因此使用此名称定义函数。如果您只想在客户端机器上显示位置,请执行以下操作:

function showPosition(position) {
    var x = document.getElementById("demo");
    x.innerHTML = "Latitude: " + position.coords.latitude + 
    "<br>Longitude: " + position.coords.longitude;  
}

或者,您也可以将数据发送到服务器。

您可以在https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/getCurrentPosition

现在你有了坐标(看看,有多准确?),使用谷歌地图定位服务api来获取位置名称。谷歌地图地理定位API-https://developers.google.com/maps/documentation/geolocation/intro

获取地理IP信息

请求地理IP服务器(netip.de)进行检查,返回IP所在的位置(主机、州、国家、城镇)。

<?php
   $ip='94.219.40.96';
   print_r(geoCheckIP($ip));
   //Array ( [domain] => dslb-094-219-040-096.pools.arcor-ip.net [country] => DE - Germany [state] => Hessen [town] => Erzhausen )
   //Get an array with geoip-infodata
   function geoCheckIP($ip)
   {
           //check, if the provided ip is valid
           if(!filter_var($ip, FILTER_VALIDATE_IP))
           {
                   throw new InvalidArgumentException("IP is not valid");
           }
           //contact ip-server
           $response=@file_get_contents('http://www.netip.de/search?query='.$ip);
           if (empty($response))
           {
                   throw new InvalidArgumentException("Error contacting Geo-IP-Server");
           }
           //Array containing all regex-patterns necessary to extract ip-geoinfo from page
           $patterns=array();
           $patterns["domain"] = '#Domain: (.*?)&nbsp;#i';
           $patterns["country"] = '#Country: (.*?)&nbsp;#i';
           $patterns["state"] = '#State/Region: (.*?)<br#i';
           $patterns["town"] = '#City: (.*?)<br#i';
           //Array where results will be stored
           $ipInfo=array();
           //check response from ipserver for above patterns
           foreach ($patterns as $key => $pattern)
           {
                   //store the result in array
                   $ipInfo[$key] = preg_match($pattern,$response,$value) && !empty($value[1]) ? $value[1] : 'not found';
           }
           return $ipInfo;
   }
?>