谷歌Places API的 - 利用城市查找地址(Google Places API - find

2019-06-24 05:08发布

我打算使用谷歌API的地方,以创造在我的网站地址自动完成。 我的问题是关于我的要求是否可以使用谷歌的地方。

我有一个“POST请求”页面,在这里用户帖子的地址(城市,街道和门牌号码)。 我也有一个“搜索”页面,用户可以根据城市搜索帖子。 在这里,用户只需插入一个城市名称,没有街道和门牌号码。

我的问题:

  1. 我可以强制用户插入一个城市,街道和门牌号码(仅适用于例如城市或唯一的城市和街道的插入会提醒无效的输入,或自动完成将返回城市,街道和门牌号码的唯一结果)?

  2. 我可以强制用户接入城市只有(不包括街道和门牌号码)?

  3. 假设用户的职位以“MyCity,MyStreet 12”的地址。 在应用的背景下,我得到这个特定位置的标识和存储。 另一个用户正在搜索的职位和插入“MyCity”。 在此背景下,我得到“MyCity”的特殊标识,并使用这个号码,以便在我的数据库中进行搜索。 我怎样才能找到的第一个用户的结果是:“MyCity,MyStreet 12”使用“MyCity”键?
    换句话说,假设我有一个代表着一个城市和其他地点标识,表示完全解决(城市,街道,门牌号),地点ID,我怎么能检查是否完全属于地址只能使用IDS的城市?

Answer 1:

至于什么类型的用户到与相关的输入框Autocomplete 开发导向 ,没有很多可以做,以控制他们键入的内容。 但是,当您设置Autocomplete API的文档 ,你可以定义控制将回来的结果选项。 为你的密钥将设立types正确选项。

具体到你的问题#1,你可以限制会回来的结果Autocomplete设置的地址types ,以geocode如本例所示:

var defaultBounds = new google.maps.LatLngBounds(
  new google.maps.LatLng(-33.8902, 151.1759),
  new google.maps.LatLng(-33.8474, 151.2631));

var input = document.getElementById('searchTextField');
var options = {
  bounds: defaultBounds,
  types: ['geocode']
};

autocomplete = new google.maps.places.Autocomplete(input, options);

具体到你的问题#2,你可以限制回来的结果Autocomplete设置于城市typescities ,如下所示:

var input = document.getElementById('searchTextField');
var options = {
  types: ['(cities)'],
  componentRestrictions: {country: 'fr'}
};

autocomplete = new google.maps.places.Autocomplete(input, options);

还要注意的是,因为Autocomplete已被限制(cities) ,我添加了一个componentRestrictions符设置在其中寻找城市(在这种情况下,法国)国家和去除的bounds符。

具体到你的问题#3,你可以创建两个表,一个用于存储数据的城市 ,其他的存储地址数据,显示在下面的UML图:

根据你的问题的说明中,有这样的设计的一些关键方面:

  • 有一个从一到多的关系CityAddress 。 这将允许你多关联Address记录到一个City的记录。 它也将使其简单检索所有的Address已经输入的任何记录City
  • 之间的关系, AddressCity说,对于每一个 Address ,一个City必须存在。 这意味着,当用户输入一个Address ,你必须采取以下措施:1 -检查,看是否CityAddress在数据库中已存在。 2 -如果City 确实存在,检索其ID ,并用其作为外键City-ID值存储新时Address 。 3 -如果City 存在,一个新的唯一ID必须为创建CityCity必须存储在数据库中。 随后, IDCity可以用作外键City-ID存储在值Address 。 确保每个Address都有相关的City回答了你问你的问题#3的一部分,其中一个问题: 我如何才能找到的第一个用户的结果是:使用“MyCity”钥匙“MyCity,MyStreet 12”? 因为当你保存的“MyCity,MyStreet 12” Adress记录,你确信一个“MyCity”记录中存在的City表。 检索IDCity如果另一个用户输入相同是直截了当的CityAddress与同一相关联的City是通过在将来用户输入。
  • 之间的关系, CityAddress说,对任何City有可能是零个或多个相关联的Address记录。 这保证了在你的描述,搜索只是一个用户City可以存储City ,即使没有后续的Address搜索发生。 该City被保存,它有一个ID ,它只是在等待任何新的Address以后可能添加的记录。

最后,你问的问题的第3部分一个问题: 我怎么能检查是否完全属于只使用IDS城市解决? 能回答这个问题就是为什么有一个外键City-ID是每个部分Address记录。 它明确规定了City是与任何相关的Address 。 所以,如果你有IDCityID为一个Address ,最简单的方法,以确定它们是否匹配是:1 -检索Address使用该数据库中Address ID 。 2 -比较的City-ID值,是部分Address刚从与数据库中检索IDCity您开始使用; 如果他们匹配,你知道Address与相关的City ,如果他们不匹配,你可以肯定的是,没有关系AddressCity

我不完全知道你正在努力实现与地址和城市是什么,但我想给你覆盖你在你的问题来描述的东西了坚实的解决方案。 我详细包括了大量的使你的所有点都解决,并希望它会让我的描述明确,容易理解。 我希望这可以帮助你 -



Answer 2:

这比谷歌的地方一个JavaScript的问题。

使用JavaScript程序来验证表单,并且,说万一#1,检查所有字段填写。 在另一方面,情形#2,您可以禁用/删除您不想填写的领域,你想送什么只发布请求。

对于#3,它只是一个缓存的问题。 使用本地存储,或阵列,存储城为重点,并把结果作为值。



Answer 3:

谷歌的地方将帮助你的用户自动完成他们的地址肖恩米奇描述:

  1. 他们开始在一个字段中键入自己的街道地址。
  2. 谷歌让他们的可能匹配的地址的列表
  3. 他们选一个,你会得到一个回应这样的

id在响应将是对他们的街道地址,而不是城市。 所以,这不会是有用的,你想要的方式。 如果你想匹配的城市,你需要存储的城市名称 (如果你愿意,你可以创建自己的ID表)。

想想你要如何实现您的数据库位置搜索:

  • 按城市搜索(想念谁只是生活在城市范围以外的人)
  • 按距离搜索(发现一定范围内每个人)

如果选择按距离搜索,你也应存储的纬度和经度,当用户输入自己的地址,谷歌的地方给你。 您还需要如何做阅读了空间搜索数据库中(尤其是geodist)。



文章来源: Google Places API - find an address using the city