2010-08-18 192 views
1

我目前正在创建一个房地产经纪人网站与搜索返回一组属性存储在数据库中。谷歌地图Geocoder请求

现在我知道谷歌每天有多少请求的限制,所以我试图想到最好的方式来做这个过程。

基本上目前,第一步的搜索是输入一个城镇或邮政编码,我将发送一个请求到谷歌地图API获取这些经纬度,并将它们存储在数据库中未来如果他们还没有在那里使用。

你认为这样可以吗?或者有更好的解决方案呢?

谢谢。

+0

这是我的代码: <?php $ code ='NE1 1RJ'; $ mapsApiKey ='your-google-maps-api-key'; $ query =“http://maps.google.co.uk/maps/geo?q=".urlencode($code)."&output=json&key=".$mapsApiKey; $ data = file_get_contents($ query); if($ data){data = json_decode($ data); $ long = $ data-> Placemark [0] - > Point-> coordinates [0]; $ lat = $ data->地标[0] - >点 - >坐标[1]; echo $ long; $ lat; } else {return false; } ?> 我打算在数据库中存储经纬度和纬度以备将来使用... – Ashley 2010-08-18 09:12:55

回答

0

只需从用户浏览器运行代码 - API使用次数将计入用户的IP地址。

+0

您确定这是否违反IP地址?我似乎记得我们碰到了API密钥的这个限制* - 我们最初的实现是非常天真的,每个用户的浏览器从他们自己的IP发出了大约10个请求。我们在几个小时内开始击中“OVER_QUERY_LIMIT”(我们通过短时间缓存结果解决了这个问题,大多数人都在请求相同的对象)。这是前段时间在v2和文档模糊在这里,请参阅http://code.google.com/apis/maps/documentation/geocoding/#Limits – Piskvor 2010-08-18 09:00:02

+0

嗨, 那么我目前有这样的: <? php $ code ='NE1 1RJ'; $ mapsApiKey ='your-google-maps-api-key'; $ query =“http://maps.google.co.uk/maps/geo?q=".urlencode($code)."&output=json&key=”。$ mapsApiKey; $ data = file_get_contents($ query); if($ data){//将其转换为可读格式 $ data = json_decode($ data); $ long = $ data-> Placemark [0] - > Point-> coordinates [0]; $ lat = $ data->地标[0] - >点 - >坐标[1]; echo $ long; echo $ lat; } else { return false; } ?> 这样会好吗?谢谢。 – Ashley 2010-08-18 09:01:01

+0

@Piskvor:常见问题解答如此:http://code.google.com/intl/zh-CN/apis/maps/faq.html – 2010-08-18 14:14:36

3

看看这个网站。它的工作非常适合我: http://www.geonames.org/export/ws-overview.html

我只用函数 “findNearbyStreets”(http://www.geonames.org/maps/us-reverse-geocoder.html#findNearbyStreets),这是我的代码:

<?php 
$sFile = "list.csv"; 
$sContent = file_get_contents($sFile); 

$aRows = explode("\n", $sContent); 
$sEcho = ""; 
$i  = 1; 

echo "Total rows: " . count($aRows) . "\n===============\n\n"; 

foreach ($aRows as $sRow) 
{ 
    $aCols = explode(",", $sRow); 

    $sLongitude = $aCols[0]; 
    $sLatitude = $aCols[1]; 
    $sInfo = ucfirst($aCols[2]); 
    $sInfo = str_replace('"', '', $sInfo); 

    $url = "http://ws.geonames.org/findNearbyStreetsOSMJSON?lat=$sLatitude&lng=$sLongitude"; 
    $json = file_get_contents($url); 
    $data = json_decode($json, true); 

    $street = $data['streetSegment'][0]['name']; 

    $sEcho .= "Some text"; 

    echo "Done with row: $i/".count($aRows)." \n"; 
    $i++; 
} 

$rFile = fopen("newFile.txt", "w+"); 
fwrite($rFile, $sEcho); 
fclose($rFile); 
?> 

的问候,保罗

+0

只是为了澄清:我写的脚本是为shell使用而编写的,但也可以用于webusage(只是删除echo的;)) – 2010-08-18 09:22:19

1

你的方法看起来不错 - 在我认为;)

你甚至可以存储每个属性的坐标,例如“Barb Foo街123 Foo街是35.7,-111.0”,只有在数据库中没有他们时才可以在地理编码器中查找它们。

+0

是的,这就是我要做的事情,所以加班时间会少一些,减少了对谷歌的要求,但我仍然关注最初的发布...... – Ashley 2010-08-18 09:10:13

+0

好吧,如果你在正式发布前拥有数据,你可以与他们建立数据库 - 查找最可能的城市,以防万一以后超过极限,只提供城市位置。 – Piskvor 2010-08-18 09:25:25