有好的PHP地理定位服务吗?

有好的PHP地理定位服务吗?,php,web-services,geolocation,Php,Web Services,Geolocation,我正在寻找一个好的PHP地理定位服务,因此当我启动我的应用程序时,我可以有如下功能: <?php $service = new GeoLocService(); echo $service->getLat(); echo $service->getLng(); ?> 检索用户在纬度和逻辑度值中的位置。MaxMind PHP API不错 地理定位需要在浏览器中完成,因为服务器(即PHP)永远无法找到大部分相关数据。在浏览器中进行地理定位的主要API是Google的,但

我正在寻找一个好的PHP地理定位服务,因此当我启动我的应用程序时,我可以有如下功能:

<?php
$service = new GeoLocService();
echo $service->getLat();
echo $service->getLng();
?>


检索用户在纬度和逻辑度值中的位置。

MaxMind PHP API不错

地理定位需要在浏览器中完成,因为服务器(即PHP)永远无法找到大部分相关数据。在浏览器中进行地理定位的主要API是Google的,但作为开发人员,您不需要使用该API;您应该使用浏览器的API,它是标准化的(尽管目前只有少数浏览器支持)

在服务器端查找用户时,您将获得的最有用的信息是他们的IP地址,这通常足以将他们定位到最近的城镇。有IP-to-nation和IP-to-location数据库和API,您可以下载以帮助实现这一点。有些是免费的,但要获得镇一级的位置,你需要为服务付费。无论您选择哪一种,它们都需要保持最新,因为IP范围经常被重新分配

浏览器级API的工作原理是让浏览器扫描该区域以查找Wi-Fi接入点。它将访问点列表发送给谷歌,谷歌随后使用该列表计算出Lat/Long(通常结果准确得惊人)

他们是怎么做到的?你可能还记得谷歌最近因为从人们的Wi-Fis中获取数据而陷入困境吗?他们实际上想做的是为这个地理定位功能绘制全球Wi-Fi接入点地图

当然,它确实需要客户端启用Wi-Fi


请注意,您的浏览器不允许客户端(即Javascript或DOM)直接访问此访问点列表,因此您无法通过服务器将其发布到PHP以使用此方法获取位置;这必须在客户端完成。

阅读Geo Loacaion API上的以下文档:


我相信上述文件对您会非常有用

PHP获取真实的IP地址、国家、城市、州、访问者的语言

您可以检测真实的ip、访客代理、语言、州、城市。但是对于PHP代码,您必须这样做


谢谢!,我已经查看了该站点,我可以看到它检索国家和城市名称,你知道它是否也可以获取lat和lng值吗?我还打算推荐它。还有一个使用它的类,我使用它,它工作well@leanyomartinet-这是我在回答中描述的IP到位置数据库产品之一。你从这些产品中得到的最好的信息是城市名称(即使如此,也不能保证准确无误),虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能会无效。还要记住,即使您使用JavaScript代码获取用户的地理位置,用户也不一定要授予您访问其位置的权限。目前,每个浏览器都会询问用户是否希望为他们访问的网页提供位置。您对此有何看法:1。使用google API检索用户位置,2。使用请求将该信息发送到PHP,3。PHP分析信息并返回与该位置相关的数据,4。JS接收数据并显示一张地图,上面有用户的位置和与之相关的数据。@leanyo martinet-是的,那就行了。基本上就是这样。当前(2010/2011)浏览器对地理定位的支持比我想象的要好:虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,则仅链接的答案可能无效。
<?php
// Required Libraries
require_once("ip.codehelper.io.php");
require_once("php_fast_cache.php");

// New Class
$_ip = new ip_codehelper();

// Detect Real IP Address & Location
$real_client_ip_address = $_ip->getRealIP();
$visitor_location       = $_ip->getLocation($real_client_ip_address);

// Output result
echo $visitor_location['Country']."
";
echo "<pre>";
print_r($visitor_location);