至于用户在与Autocompletedev-guide关联的输入框中输入的内容,您无法控制他们输入的内容。但是,当您设置Autocompleteapi-doc时,您可以定义控制将返回的结果的选项。您的关键是正确设置types选项。
具体到您的问题#1 ,您可以通过设置为来限制将返回Autocomplete到地址的结果,如下例所示:typesgeocode
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,你可以创建两张表,一张存储City数据,一张存储Address数据,如下UML图所示:

根据您问题中的描述,此设计有一些关键方面:
City从到有一对多的关系Address。这将允许您将许多Address记录关联到单个City记录。它还将使检索Address任何已输入的所有记录变得简单City。
Address和之间的关系City表明对于每个 Address, aCity必须存在。这意味着当用户输入 时Address,您必须采取以下措施: 1 - 检查数据库中是否City已经Address存在。2 - 如果City 确实存在,则在存储新的 时检索其ID并将其用作外键值。3 - 如果不存在,则必须为该创建一个新的唯一性,并且必须将其存储在数据库中。那么在存储. _ 确保每个人都有相关的City-IDAddressCity IDCityCityIDCityCity-IDAddressAddressCity回答您在问题 #3 中提出的一个问题:如何使用“MyCity”键找到第一个用户的结果:“MyCity, MyStreet 12”?因为当您存储“MyCity, MyStreet 12”Adress记录时,您确保表中存在“MyCity”记录City。如果另一个用户输入相同的或与相同的关联的用户将来输入的,则检索IDfor很简单。CityCityAddressCity
City和之间的关系Address表示,对于任何City可能有零个或多个关联Address记录。这确保了即使没有进行后续搜索,您描述中仅搜索 a 的用户City也可以存储。被存储,它有一个,它只是在等待以后可能添加的任何新记录。CityAddressCityIDAddress
最后,作为问题 #3 的一部分,您又问了一个问题:如何仅使用 id 来检查完整地址是否属于城市?能够回答这个问题就是为什么City-ID每条Address记录都有一个外键。它清楚地定义了City与 any 相关联的Address。因此,如果您有IDfor aCity和IDfor an Address,确定它们是否匹配的最简单方法是: 1 -使用 .Address从数据库中检索Address ID. 2 - 将刚刚从数据库中检索到的值与您开始使用的City-ID值进行比较;如果它们匹配,您就知道与AddressIDCityAddressCity如果它们不匹配,您可以确定 thatAddress和 that之间没有关系City。
我不完全确定您要通过地址和城市实现什么目标,但我已尝试为您提供一个可靠的解决方案,涵盖您在问题中描述的内容。我包含了很多细节,以便您的所有观点都得到解决,并希望它能使我的描述清晰易懂。我希望这可以帮助你 -