寻找最近的城镇/城市

时间:2016-03-29 11:26:20

标签: php location

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

$town = "London, England";

或类似的东西:

$town = "Bacup, Lancashire GB";

Google已成功做到这一点。当您搜索某些内容时,在页面底部会显示“您的村庄 - 来自您的网址”。

由于

2 个答案:

答案 0 :(得分:1)

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

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获取位置名称。 Google Maps Geolocation API - https://developers.google.com/maps/documentation/geolocation/intro

答案 1 :(得分:1)

获取地理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;
   }

?>