0

要求:我目前正在开发一个拥有超过 30000 条记录的应用程序。要求是基于位置/感知搜索。例如。距离我现在的位置 5 英里以内。

如何访问此服务:将从 Web 和 iOS 应用程序访问此服务。

开发平台

  • 网页:Cakephp、php 和 python
  • 数据库:MySql
  • iOS:目标-c
  • 当前使用的外部库:Google Maps Javascript Api v3

基于位置的搜索

我一直在对这个主题进行一些研究,我将为此使用Haversine Formula。但是要使 Haversine 公式有效,我需要为我的数据库中的所有记录提供反向地理代码。我曾经使用过的唯一反向地理编码服务来自谷歌,我知道他们不允许这样做,除非在他们的地图上显示结果。

注意:Geocoding API 只能与谷歌地图一起使用;禁止在未在地图上显示的情况下对结果进行地理编码。

  1. 我可以使用其他 API 或服务来对所有这些记录进行反向地理编码吗?
  2. 30000 是一个很大的数字。我显然会在一段时间内为此使用 cron 工作,但是由于这个请求将来自同一个 IP,这可能是一个问题吗?

对此的任何帮助将不胜感激。

更新 1 #

我发现这个推荐OpenStreetMap Nominatim的问题

4

2 回答 2

1

您可以使用各种地理编码服务,但您很可能需要付费。查看Cloudmate。他们可能会解决你的情况。如果这是一项商业冒险,最好花一点钱并确保您获得良好的数据。

30,000 条记录根本不会花那么长时间。如果没有速率限制,它应该能够在 10 - 20 分钟内完成。我一次对 2000 条记录进行地理编码(每页 100 条),耗时 5 分钟。

不久前,我构建了一个位置管理界面。它还没有完成,代码也不是最好的,但它可能会给你一个起点。它使用谷歌进行地理编码,但可以很容易地换成任何其他服务。

http://galengrover.com/projects/Store-Locator-Admin/

https://github.com/galen/Store-Locator-Admin

于 2013-03-10T14:47:58.877 回答
1
    $result = mysql_query("SELECT * FROM abc  ORDER BY id DESC ") or die(mysql_error());  

    while($row = mysql_fetch_array( $result )){


      $lat=$row['latitude'];
      $long=$row['longitude'];

    $url  = "http://maps.googleapis.com/maps/api/geocode/json?latlng=".$lat.",".$long."&sensor=false";
      $json = @file_get_contents($url);
      $data = json_decode($json);
      $status = $data->status;
      $address = '';
      if($status == "OK")
      {
         $address = $data->results[0]->formatted_address;
      }
      else
      {
        echo "No Data Found Try Again";
      }

    mysql_query("UPDATE abc SET location='$address' WHERE id=".$row['id']."") or die(mysql_error());



    printf( $address."%d\n", mysql_affected_rows());
    echo "<br/><br/>";
    }
于 2018-01-22T10:06:10.913 回答