【问题标题】:Given GPS coordinates, how do I find nearby landmarks or points-of-interest?给定 GPS 坐标,我如何找到附近的地标或兴趣点?
【发布时间】:2011-02-07 13:44:52
【问题描述】:

我刚买了一部 Google Nexus One 智能手机,我想写一个小的 Android 应用程序来娱乐一下。假设我可以获取当前的 GPS 坐标,那么如何以编程方式在某个半径范围内找到附近的地标或兴趣点?是否有 API 可以获取 GPS 地理标记的地标,例如在 Google 地球的数据库中?

例如,如果我在芝加哥市中心,我的程序会将我指向该城市的所有“旅游”景点。

理想情况下,它都可以在我的智能手机上运行,​​但如有必要,我可以让智能手机查询网络服务器,然后它会运行更多查询。

【问题讨论】:

  • 你看谷歌地图 api 了吗?
  • 你已经被打败了;有一个由 Google 编写的名为“Places Directory”的应用程序完全符合您的描述。
  • @Daniel Lew 我不打算编写自己的分发应用程序。我只是想尝试不同的 API。

标签: android google-maps gps


【解决方案1】:

取决于您从哪里获取地标数据。如果您想进行网络查询,您可以使用上述方法之一运行。

或者 - 如果您有自己的数据,您可以将其与 lat 和 lon 值一起存储在数据库中,然后为查询形成边界矩形。这个问题告诉你如何计算一个覆盖当前点周围给定半径的边界框(它将是一个框,所以它会比一个圆更大......

How to calculate the bounding box for a given lat/lng location?

使用边界框,您现在可以从您的数据库where lat < maxlat and lat > minlat and lon > minlon and lon < maxlon 进行查询,这将在框内为您提供所有感兴趣的点。

然后,使用 Android api 中的 Location 类,您可以使用它来计算每个点击的方位角和距离,然后您可以例如按您所在位置的半径排序。

【讨论】:

  • 这是一个很大的帮助。假设我想存储自己的地标并实现自己的查找服务;如果我有 N 个地标,我将不得不对所有地标进行 O(N) 搜索以找到最近的地标。是否有可以改进此搜索的数据结构或方法?我正在考虑实现两级树(一层纬度,另一层经度)或 kd-tree 或四叉树。有什么想法吗?
  • 这个想法是你索引纬度和经度,这意味着在矩形内找到所有东西会相当快。完成之后,你就只有一组有限的事情需要做 O(n) 的工作。您也可以从一个非常小的矩形开始,然后向外查询(不包括您的内部矩形)以添加更多您认为必要的结果。
  • 顺便说一句 - 我认为真正的地理数据库对这些东西更聪明。不过,我使用这个 approacdh 在 Android 上实现了地理搜索,它的运行速度相当快。我的应用会查找半径 50 海里范围内的所有机场和直升机场。
【解决方案2】:

最快的方法是:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=business+near+city");
startActivity(intent);

在 geo 之后输入坐标,在 q= 之后输入搜索词,例如tourism+city。这将启动带有兴趣点的 Google 地图应用。

如果您想在应用程序中使用地图视图,则需要从某些服务(例如您自己的服务)中获取数据。但是,您可以像这样从 Google 的 ajax 搜索中提取数据: http://ajax.googleapis.com/ajax/services/search/local?v=1.0&rsz=large&gl=pl&q=tourism+chicago 更多信息在这里:http://code.google.com/apis/ajaxsearch/documentation/reference.html#_fonje_local 这将为您提供具有地理坐标的结果,您需要设法解析结果并将它们放入数据库中。

【讨论】:

  • 谢谢。我不想以地图的形式获得附近的兴趣点。我宁愿让它以 XML 形式返回。
  • 那么 ajax api 应该适合你,但我认为它只适用于 json。
【解决方案3】:

您可能会查看的另一个 Web 服务是: http://developer.yahoo.com/geo/geoplanet/

【讨论】:

    【解决方案4】:

    您可以使用一个对开发人员友好的数据源http://compass.webservius.com - 这是一个包含美国数百万个企业列表的数据库,可以使用 REST API 通过坐标边界框轻松搜索。

    【讨论】:

      【解决方案5】:

      Foursquare 有一个很棒的 AP​​I,可以根据 GPS 坐标为您提供企业和其他感兴趣的地方。不需要用户登录即可访问。后备数据库由foursquare用户持续维护。

      https://developer.foursquare.com/overview/venues

      【讨论】:

      • 拉德。感谢分享。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      • 1970-01-01
      • 2013-06-28
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      相关资源
      最近更新 更多