[英]Google Places API - find an address using the city
我打算使用Google Places API在我的網站上創建地址自動填充功能。 我的問題是我的要求是否可以使用Google商家信息。
我有一個“發布請求”頁面,用戶在該頁面上發布地址(城市,街道和門牌號碼)。 我還有一個“搜索”頁面,用戶可以根據城市搜索帖子。 在這里,用戶只插入城市名稱,沒有街道和門牌號碼。
我的問題:
我可以強制用戶插入城市,街道和門牌號碼(僅插入城市或僅插入城市和街道會提醒無效輸入,或者自動完成僅返回城市,街道和門牌號碼的結果)?
我可以強制用戶僅插入城市(沒有街道和門牌號碼)嗎?
假設用戶使用“MyCity,MyStreet 12”發布地址。 在應用程序的后台,我得到了這個特定位置的id並存儲它。 另一個用戶正在搜索帖子並插入“MyCity”。 在后台我得到了“MyCity”的具體ID,並使用此id來搜索我的數據庫。 如何找到第一個用戶的結果:“MyCity,MyStreet 12”使用“MyCity”鍵?
換句話說,假設我有一個代表城市的位置ID和代表完整地址(城市,街道,門牌號碼)的其他位置ID,如何僅使用ID檢查完整地址是否屬於城市?
至於用戶鍵入與Autocomplete
開發指南相關聯的輸入框中的內容,您無法控制他們鍵入的內容。 但是,當您設置Autocomplete
api-doc時 ,您可以定義控制將返回的結果的選項。 您的關鍵是正確設置types
選項。
特定於您的問題#1 ,您可以通過將types
設置為geocode
來限制Autocomplete
返回到地址的結果,如下例所示:
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 ,您可以通過將types
設置為cities
來將Autocomplete
返回的結果限制為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
說明符。
特定於您的問題#3 ,您可以創建兩個表,一個用於存儲City數據,另一個用於存儲Address數據,如下面的UML圖所示:
根據您問題中的描述,此設計有一些關鍵方面:
City
到Address
一對多的關系。 這將允許您將許多Address
記錄關聯到單個City
記錄。 它還可以輕松檢索為任何City
輸入的所有Address
記錄。 Address
和City
之間的關系表明,對於每個 Address
, City
必須存在。 這意味着當用戶輸入Address
,您必須執行以下操作:1 - 檢查數據庫中是否存在該Address
的City
。 2 - 如果City
確實存在,請檢索其ID
並在存儲新Address
時將其用作外鍵City-ID
值。 3 - 如果City
不存在,則必須為City
創建新的唯一ID
,並且City
必須存儲在數據庫中。 隨后, ID
為City
可以用作外鍵City-ID
存儲在值Address
。 確保每個Address
都有一個關聯的City
回答您在問題#3中提出的問題之一: 如何找到第一個用戶的結果:“MyCity,MyStreet 12”使用“MyCity”鍵? 因為當您存儲“MyCity,MyStreet 12” Adress
記錄時,您確保City
表中存在“MyCity”記錄。 檢索ID
為City
如果另一個用戶輸入相同是直截了當的City
或Address
與同一相關聯的City
是通過在將來用戶輸入。 City
和Address
之間的關系表明,對於任何City
,可能存在零個或多個關聯的Address
記錄。 這樣可確保您的描述中僅搜索City
可以存儲City
即使沒有進行后續Address
搜索也是如此。 City
存儲,它有一個ID
,它只是等待稍后可能添加的任何新Address
記錄。 最后,您問了另一個問題作為問題#3的一部分: 如何僅使用ID檢查完整地址是否屬於城市? 能夠回答這個問題的原因是每個Address
記錄中都有一個外鍵City-ID
。 它清楚地定義了與任何Address
相關聯的City
。 所以,如果你有ID
為City
和ID
為一個Address
,最簡單的方法,以確定它們是否匹配是:1 -檢索Address
使用該數據庫中Address
ID
。 2 - 將剛剛從數據庫中檢索到的Address
的City-ID
值與您開始使用的City
的ID
進行比較; 如果匹配,您知道Address
與City
相關聯,如果它們不匹配,您可以確定該Address
與該City
之間沒有任何關系。
我不完全確定你想要通過地址和城市實現什么,但我試圖給你一個可靠的解決方案,涵蓋你在問題中描述的內容。 我提供了大量細節,以便解決您的所有要點,並希望它能使我的描述清晰易懂。 我希望這可以幫助你 -
這比谷歌地方更像是一個Javascript問題。
使用Javascript例程驗證表單,並在#1的情況下檢查是否填寫了所有字段。 另一方面,對於案例#2,您可以禁用/刪除不想填寫的字段,並僅使用您要發送的內容發布請求。
對於#3,這只是一個緩存問題。 使用localStorage或數組將城市存儲為密鑰,將結果存儲為值。
Google地方信息將幫助您的用戶自動填寫他們的地址,Sean Mickey描述:
該回復中的id
將是他們的街道地址,而不是城市。 所以它不會像你想要的那樣有用。 如果你想匹配城市,你需要存儲城市的名稱 (如果你想,你可以創建自己的id表)。
考慮一下如何在數據庫中實現位置搜索:
如果您選擇按距離搜索,則還應存儲Google地方信息在用戶輸入地址時為您提供的緯度和經度。 您還需要了解如何在數據庫中進行空間搜索 (尤其是geodist)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.