【问题标题】:Geolocation and getting a city from an input address (Rails)地理位置和从输入地址获取城市(Rails)
【发布时间】:2012-11-05 19:28:45
【问题描述】:

我正在构建的应用程序需要能够根据用户所在的城市/城镇将用户与事件相匹配。我对 Rails 还是比较陌生,对地理定位和在应用程序中使用位置是完全陌生的。我想到了一种设计,其中用户有一个或多个城市,而事件将有一个城市,我希望通过从输入的事件地址获取它来提取它而无需专门询问用户。

主要是为了提供一些外部检查以帮助正确和一致地输入地址,同时为了显示地图,我安装了这个 jquery 地址选择器 (https://github.com/sgruhier/jquery-addresspicker)。不幸的是,谷歌返回的数据不包括一个城市,而是一个与城市名称不可靠相关的“地区”或“行政区域”。回归的地方更像是我们家乡的“郊区”。我需要获取一个城市,这样我就可以让用户搜索他们所在城市的所有活动,而不仅仅是他们郊区的活动。

任何人都可以就我如何做到这一点提供建议吗?非常感谢。

编辑:也许应该补充一点,我想在客户端进行地理编码,这样我就不会遇到谷歌地图限制的问题,也不必为地理编码等付费。

【问题讨论】:

  • 我建议您添加一些您遇到问题的地址示例以及预期的城市名称,以便人们可以更好地理解并根据需要进行测试。
  • 好主意;抱歉,我只是假设其他人会遇到同样的问题并且知道我在说什么。假设我搜索“58 Mollison Street, West End”。西区是澳大利亚(国家:P)昆士兰(州)布里斯班(市)的一个郊区。返回的地点是“南布里斯班”。那可能是一个政治区的名称或类似的名称,但没有人住在这里并外出旅行会使用“南布里斯班”一词来指代布里斯班的西区;您将使用郊区名称“West End”和城市名称“Brisbane”。所以我想让人们在“布里斯班”下搜索。

标签: ruby-on-rails ruby database-design geolocation


【解决方案1】:

有一些 gem 可以为您提供这些功能,还有一些与地理相关的功能,例如计算距离。

这里有两个最著名的:https://github.com/alexreisner/geocoderhttps://github.com/imajes/geokit

以后我强烈建议您前往https://www.ruby-toolbox.com/,看看已经有什么可以作为宝石使用,看看什么是目前最流行的。

【讨论】:

  • 嘿伊斯梅尔,谢谢,我已经看过这两个,并且已经为它们添加了书签,以便在计算距离时使用,就像你说的那样。从我所见,虽然使用这些来生成城市名称是不可能的,因为它们依赖于我已经在使用的地址选择器使用的相同数据。它们仅提供地区/社区/郊区或州,没有城市。在我看来,我必须需要某种将地方与城市联系起来的数据库。这就是这种情况有经验的程序员做的吗?
  • 我不知道人们使用什么,但您是否测试过他们是否有同样的问题?您也可以尝试不同的地理服务提供商。
  • 看看其他人如何解决同样的问题是我在这里尝试做的。 :)
  • 好的。然后你应该等待其他有这方面经验的人给你答案。我希望你能解决它:)
【解决方案2】:

对于原始地址信息,请使用Google Maps API Reverse Geocoding,它接受纬度/经度输入并返回街道地址组件。现代浏览器在用户许可的情况下支持位置感知(地理定位),并会为您提供“趋于接近”浏览器所在位置的纬度/经度。在大多数情况下,这可能会为您提供正确的城市/城镇。

地图 API 是 Google 广泛的 API 工具套件的一部分——有一些宝石可以处理任何 Google API(嗯,其中大部分),或者查看Google Maps for Rails,它至少会给你一个很好的开始学习如何使用 API。

但是,如果您要验证邮政编码,则此方法将不够用,因为位置感知的准确性会因浏览器、设备(对于移动设备更准确)、连接、人口密度、网络覆盖范围而异,等等。另外,调用

如果您可以获得 GPS 准确的纬度/经度,那么它会更加准确......除了在某些情况下,例如在大城市中,单个建筑物将有自己的邮政编码,因此单程几英尺或其他可能很重要。

【讨论】:

  • 邮政编码对我来说真的不重要。我只希望用户输入一个地址,以便我能够在某处查询城市名称。也许谷歌地图的数据完全不适合我居住的地方。它确实承诺“地方表示一个合并的城市或城镇政治实体”。那不是我得到的。 “南布里斯班”不是一座城市。由于我首先希望我的应用程序能够在我所在的地区使用,因此单独使用谷歌地图似乎不会成为一个解决方案。不过还是谢谢。
  • 嗯——也许你说 Maps API 不完整是对的,但我提供的链接的反向地理编码部分是用于“将地图上的位置转换为人类可读的地址” ,以及它们提供各种类型的示例输出,包括街道地址和格式化地址。如果它在你所在的地方不能正常工作,那么我会让它休息,但我确实想确保你正在查看与我相同的 API。
  • 感谢您的仔细检查,也许我遗漏了您所暗示的内容,但我注意到这也返回了一个地方......在我的例子中,它又将是南布里斯班,这不是一个城市。不过再次感谢..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多