我打算使用Google Places API在我的网站上创建地址自动填充功能。我的问题是关于我的要求是否可以使用Google商家信息。
我有一个“发布请求”页面,用户在该页面上发布地址(城市,街道和门牌号码)。我还有一个“搜索”页面,用户可以根据城市搜索帖子。在这里,用户只插入城市名称,没有街道和门牌号。
我的问题:
我可以强制用户插入城市,街道和门牌号码(仅插入城市或仅插入城市和街道会提醒无效输入,或者自动完成仅返回城市,街道和房屋的结果数)
我可以强制用户仅插入城市(没有街道和门牌号码)吗?
假设用户使用“MyCity,MyStreet 12”发布了一个地址。在应用程序的后台,我得到了这个特定位置的id并存储它。另一个用户正在搜索帖子并插入“MyCity”。在后台我得到了“MyCity”的具体ID,并使用此id来搜索我的数据库。如何找到第一个用户的结果:“MyCity,MyStreet 12”使用“MyCity”键?
换句话说,假设我有一个代表城市的位置ID和代表完全地址(城市,街道,门牌号码)的其他位置ID,如何仅使用ID检查完整地址是否属于城市?
答案 0 :(得分:10)
就用户在与Autocomplete
dev-guide关联的输入框中键入的内容而言,您无法控制他们键入的内容。但是,当您设置Autocomplete
api-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);
,如图所示在这个例子中:
Autocomplete
根据您的问题#2 ,您可以将types
设置为cities
,将var input = document.getElementById('searchTextField');
var options = {
types: ['(cities)'],
componentRestrictions: {country: 'fr'}
};
autocomplete = new google.maps.places.Autocomplete(input, options);
中返回的结果限制为城市,如下所示:
Autocomplete
另请注意,由于(cities)
仅限于componentRestrictions
,因此我添加了bounds
说明符来设置搜索城市的国家/地区(在本例中为法国)并删除了City
说明符。
根据您的问题#3 ,您可以创建两个表,一个用于存储城市数据,另一个用于存储地址数据,如下面的UML图所示:
根据您问题中的描述,此设计有一些关键方面:
Address
到Address
之间存在一对多的关系。这样,您就可以将多个City
记录与单个Address
记录相关联。它还可以轻松检索为City
输入的所有Address
条记录。City
和Address
之间的关系表明,对于每个 City
,必须存在Address
。这意味着当用户输入City
时,您必须执行以下操作:1 - 检查数据库中是否已存在Address
的{{1}}。 2 - 如果存在City
,则检索其ID
并在存储新City-ID
时将其用作外键Address
值。 3 - 如果City
不存在,则必须为ID
创建新的唯一City
,并且City
必须存储在ID
中数据库。然后,City
的{{1}}可以在存储City-ID
时用作外键Address
值。确保每个Address
都有关联的City
回答您在问题#3中提出的问题之一:如何找到第一个用户的结果:“MyCity,MyStreet 12“使用”MyCity“密钥?因为当您存储”MyCity,MyStreet 12“Adress
记录时,您确保City
表中存在”MyCity“记录。如果其他用户输入相同的ID
或与用户输入的City
相同的City
,则检索Address
的{{1}}非常简单未来。City
和City
之间的关系表明,对于任何Address
,可能存在零个或多个关联的City
个记录。这样,即使没有进行后续Address
次搜索,您的描述中仅搜索City
的用户也可以存储City
。存储了Address
,它有一个City
,它只是等待稍后可能添加的任何新ID
记录。最后,你问了另一个问题作为问题#3的一部分:如何才能使用ID检查完整地址是否属于城市?能够回答这个问题的原因是是一个外键Address
,它是每个City-ID
记录的一部分。它明确定义了与Address
相关联的City
。因此,如果Address
为ID
而City
为ID
,则确定它们是否匹配的最简单方法是:1 - 检索{{ 1}}使用Address
Address
从数据库中获取。 2 - 将刚从数据库中检索到的Address
的{{1}}值与您开始使用的ID
的{{1}}进行比较;如果匹配,则表示City-ID
与Address
相关联,如果不匹配,您可以确定ID
与City
之间没有任何关系}。
我不完全确定您要通过地址和城市实现目标,但我试图为您提供一个可靠的解决方案,涵盖您在问题中描述的内容。我提供了大量细节,以便解决您的所有要点,并希望它能使我的描述清晰易懂。我希望这可以帮助你 -
答案 1 :(得分:0)
这比谷歌地方更像是一个Javascript问题。
使用Javascript例程验证表单,并在#1的情况下检查是否填写了所有字段。另一方面,对于案例#2,您可以禁用/删除不想填写的字段,并仅使用您要发送的内容发布请求。
对于#3,这只是一个缓存问题。使用localStorage或数组将城市存储为密钥,将结果存储为值。
答案 2 :(得分:0)
Google地方信息将帮助您的用户自动填写他们的地址,Sean Mickey描述:
该回复中的id
将用于他们的街道地址,而不是城市。所以它不会像你想要的那样有用。如果你想匹配城市,你需要存储城市的名称(如果你想要你可以创建自己的id表)。
考虑一下如何在数据库中实现位置搜索:
如果您选择按距离搜索,则还应存储Google地方信息在用户输入地址时为您提供的纬度和经度。您还需要了解如何在数据库中执行spatial search(尤其是geodist)。