Google Places API - 使用该城市查找地址

Nao*_*aor 7 javascript google-maps google-places-api

我打算使用Google Places API在我的网站上创建地址自动填充功能.我的问题是我的要求是否可以使用Google商家信息.

我有一个"发布请求"页面,用户在该页面上发布地址(城市,街道和门牌号码).我还有一个"搜索"页面,用户可以根据城市搜索帖子.在这里,用户只插入城市名称,没有街道和门牌号码.

我的问题:

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

  2. 我可以强制用户仅插入城市(没有街道和门牌号码)吗?

  3. 假设用户使用"MyCity,MyStreet 12"发布地址.在应用程序的后台,我得到了这个特定位置的id并存储它.另一个用户正在搜索帖子并插入"MyCity".在后台我得到了"MyCity"的具体ID,并使用此id来搜索我的数据库.如何找到第一个用户的结果:"MyCity,MyStreet 12"使用"MyCity"键?
    换句话说,假设我有一个代表城市的位置ID和代表完整地址(城市,街道,门牌号码)的其他位置ID,如何仅使用ID检查完整地址是否属于城市?

Sea*_*key 10

至于用户键入与Autocomplete开发指南相关联的输入框中的内容,您无法控制他们键入的内容.但是,在设置Autocompleteapi-doc时,可以定义控制将返回的结果的选项.您的关键是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);
Run Code Online (Sandbox Code Playgroud)

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

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

autocomplete = new google.maps.places.Autocomplete(input, options);
Run Code Online (Sandbox Code Playgroud)

还要注意,因为Autocomplete已被限制(cities),我添加了一个componentRestrictions说明符来设置搜索城市的国家(在本例中为法国)并删除了bounds说明符.

特定于您的问题#3,您可以创建两个表,一个用于存储City数据,另一个用于存储Address数据,如下面的UML图所示:

在此输入图像描述

根据您问题中的描述,此设计有一些关键方面:

  • 有一个从一到多的关系CityAddress.这将允许您将许多Address记录关联到单个City记录.它还可以简单地检索Address为任何记录输入的所有记录City.
  • 之间的关系Address,并City表示,对每一个 Address,一个City必须存在.这意味着,当用户进入Address时,必须采取以下措施:1 -检查,看看是否CityAddress数据库中已经存在.2 - 如果City 确实存在,则检索它IDCity-ID在存储新内容时将其用作外键值Address.3 - 如果City 存在,则ID必须为其创建新的唯一,City并且City必须将其存储在数据库中.然后可以将IDfor City用作City-ID存储时的外键值Address.确保每个Address都有一个相关的City答案你问的一个问题是问题#3的一部分:如何找到第一个用户的结果:"MyCity,MyStreet 12"使用"MyCity"键?因为当您存储"MyCity,MyStreet 12" Adress记录时,您确保City表中存在"MyCity"记录.检索ID用于City如果另一个用户输入相同是直接的CityAddress具有相同的相关联City是通过在未来用户输入.
  • City和之间的关系Address表示,对于任何City可能存在零个或多个相关Address记录.这可以确保即使没有进行后续搜索,您的描述中仅搜索a的用户City也可以存储.该存储,它有一个,它只是在等待任何新的以后可能添加的记录.CityAddressCityIDAddress

最后,您问了另一个问题作为问题#3的一部分:如何仅使用ID检查完整地址是否属于城市?能够回答这个问题是为什么有一个外键City-ID是每个Address记录的一部分.它清楚地定义了City与任何相关的Address.因此,如果您有IDfor CityIDfor Address,则确定它们是否匹配的最简单方法是:1 - Address使用Address ID.从数据库中检索.2 -比较的City-ID是部分值Address刚被从数据库中检索与IDCity您开始使用; 如果他们匹配,你知道Address与相关联的City,如果他们不匹配,你可以肯定的是,没有任何关系AddressCity.

我不完全确定你想要通过地址和城市实现什么,但我试图给你一个可靠的解决方案,涵盖你在问题中描述的内容.我提供了大量细节,以便解决您的所有要点,并希望它能使我的描述清晰易懂.我希望这可以帮助你 -