Google maps 在哪里可以找到用于基于位置搜索的城市/城镇位置数据?

Google maps 在哪里可以找到用于基于位置搜索的城市/城镇位置数据?,google-maps,geolocation,geocoding,Google Maps,Geolocation,Geocoding,我需要实现带有x英里城镇功能的查找条目,因此我有一个附加了autosuggest的城镇方框。目前,我正在使用谷歌的地理编码API来获取autosuggest结果的数据,但我们显然无法调整或更改这些数据,而且它也不会总是给出合理的建议(即使有国家提示)。是否有其他城镇/城市位置数据来源?我试着看看是否可以从OpenStreetMap或其他东西中导出,但我只能找到地图分幅或矢量地图数据,而不能找到城镇/城市名称和位置的POI数据 如有任何建议,我们将不胜感激。 谢谢。Geonames.org有一个可

我需要实现带有x英里城镇功能的查找条目,因此我有一个附加了autosuggest的城镇方框。目前,我正在使用谷歌的地理编码API来获取autosuggest结果的数据,但我们显然无法调整或更改这些数据,而且它也不会总是给出合理的建议(即使有国家提示)。是否有其他城镇/城市位置数据来源?我试着看看是否可以从OpenStreetMap或其他东西中导出,但我只能找到地图分幅或矢量地图数据,而不能找到城镇/城市名称和位置的POI数据

如有任何建议,我们将不胜感激。
谢谢。

Geonames.org有一个可下载的城市列表,甚至世界上许多国家的邮政编码以及相应的纬度/纬度点。它在知识共享署名3.0许可下,这意味着您可以在商业上使用它,但您必须提供署名,以及其他内容

虽然拥有一个可下载的列表可能意味着在实现搜索算法的所有方面,您需要做更多的工作,但幸运的是,您不会与第三方web服务的正常运行时间/可用性相耦合

唯一缺少的另一部分是距离计算公式。您可以使用来计算距离

我自己也做过很多次。第一次编写代码时,你需要花一点时间来理解所有事情,但一旦你完成了,以后就很容易了


我应该提到我是公司的创始人。我们进行基于街道的地址验证,不仅可以告诉您地址是否正确(这在很多方面都有帮助),但是,我们也可以为您提供给定街道地址的lat/lon坐标,然后将其插入上述解决方案,以确定附近的位置。

我想说,您还有两个其他选项来获得所需的功能

首先,您可以使用一个乱七八糟的方法将结果集中到更有意义的结果上(尽管我不强烈推荐这种方法,但它可能满足您的需要)

在您最初查询Google的地理编码API以获取autosuggest结果的数据之前,首先确定该城镇所在的国家。然后,您可以使用国家字符串作为地理编码查询的后缀

比如:

  var country = 'UK'; // from initial query, reverse geocode, etc.
  geocoder.geocode({
          'address': address + ', ' + country
       }, 
有关示例,请参见此问题的答案。

第二,你“显然不能调整或改变这些数据”的前提是有缺陷的。您当然可以根据国家筛选结果。类似下面的代码片段显示了如何深入搜索结果

   geocoder.geocode({
      'address': address
   }, 
   function(results, status) {
      if(status == google.maps.GeocoderStatus.OK) {
         for(var i = 0, l = results.length; i < l; i++)  {
          for (var j = 0, l2 = results[i].address_components.length; j < l2; j++) {
              for (var k = 0, l3 = results[i].address_components[j].types.length; k < l3; k++) {
                 if(results[i].address_components[j].types[k]=="country") {
                    var country = results[i].address_components[j].long_name;
                    // do stuff based on the country
                    // add the result to your auto-suggest, etc...
                 }
              }
         }
      }
    });
   }
geocoder.geocode({
“地址”:地址
}, 
功能(结果、状态){
if(status==google.maps.GeocoderStatus.OK){
对于(变量i=0,l=results.length;i
最后,如果实现了CGI包装器来进行地理编码,则可以缓存结果。这样,应用程序将自动为您构建数据库。这将节省实际执行地理编码的所有已知结果。我认为这几乎就是您在问题中暗示的,如果您确实找到了可靠的数据源,您没有理由不使用已知结果预先填充缓存

看看这个文档,它概述了使用Maps Api的各种地理编码策略——它讨论了缓存等问题。

编辑

你可以用geoPlugin之类的东西

看看附近的地方的特色,这正是你想要的


请查看,此网站使用了许多您可能想要使用的api。另请参阅关于此站点历史的介绍

谢谢-我将研究地理名称。在mo,它似乎有太多的结果,但也许我可以用一些东西来过滤它。不幸的是,我不确定数据中是否有任何内容可以过滤掉英国或海外的所有村庄/小村庄等。您是否尝试过根据邮政编码缩小范围?()@JonathanOliver,我正在查找用户当前位置附近的餐厅列表。特别是印度。你能告诉我你的服务会提供给我这些数据吗?如果是,那么它是免费的还是付费的???@Scorpion,对不起,我们不在印度。我们的服务是免费和付费的。你搜索过Google Place API吗?我认为这是基于位置的搜索的一个好选择。另一个是Foursquare API。其余的东西你可以从文件中找到。。希望这能对你有所帮助……谢谢,但我不知道他们正在搜索的城市在哪个国家,因为他们只是在输入免费文本:(如果你不知道这个国家,那么任何建议都是非常明智的……此外,你还说“即使有国家提示”在问题中-如果您不知道国家,您使用了什么国家提示?我看不到任何geoplugin服务满足我在问题中的要求。该服务似乎用于反向地理编码,但我没有必要这么做。@NickG-您询问的是如何实现“查找具有x英里城镇功能的条目”geoplugin具有此功能——“www.geoplugin.net/extras/nearest.gp?lat=XXX&long=YYY&limit=10&radius=50”。此外,如果您声称不知道该镇的lat lng,则任何结果都是合理的。此外,您是否了解该国?您的问题和随后的评论相互矛盾