簡體   English   中英

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

[英]Google Places API - find an address using the city

我打算使用Google Places API在我的網站上創建地址自動填充功能。 我的問題是我的要求是否可以使用Google商家信息。

我有一個“發布請求”頁面,用戶在該頁面上發布地址(城市,街道和門牌號碼)。 我還有一個“搜索”頁面,用戶可以根據城市搜索帖子。 在這里,用戶只插入城市名稱,沒有街道和門牌號碼。

我的問題:

  1. 我可以強制用戶插入城市,街道和門牌號碼(僅插入城市或僅插入城市和街道會提醒無效輸入,或者自動完成僅返回城市,街道和門牌號碼的結果)?

  2. 我可以強制用戶僅插入城市(沒有街道和門牌號碼)嗎?

  3. 假設用戶使用“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圖所示:

在此輸入圖像描述

根據您問題中的描述,此設計有一些關鍵方面:

  • CityAddress一對多的關系。 這將允許您將許多Address記錄關聯到單個City記錄。 它還可以輕松檢索為任何City輸入的所有Address記錄。
  • AddressCity之間的關系表明,對於每個 AddressCity必須存在。 這意味着當用戶輸入Address ,您必須執行以下操作:1 - 檢查數據庫中是否存在該AddressCity 2 - 如果City 確實存在,請檢索其ID並在存儲新Address時將其用作外鍵City-ID值。 3 - 如果City 存在,則必須為City創建新的唯一ID ,並且City必須存儲在數據庫中。 隨后, IDCity可以用作外鍵City-ID存儲在值Address 確保每個Address都有一個關聯的City回答您在問題#3中提出的問題之一: 如何找到第一個用戶的結果:“MyCity,MyStreet 12”使用“MyCity”鍵? 因為當您存儲“MyCity,MyStreet 12” Adress記錄時,您確保City表中存在“MyCity”記錄。 檢索IDCity如果另一個用戶輸入相同是直截了當的CityAddress與同一相關聯的City是通過在將來用戶輸入。
  • CityAddress之間的關系表明,對於任何City ,可能存在零個或多個關聯的Address記錄。 這樣可確保您的描述中僅搜索City可以存儲City即使沒有進行后續Address搜索也是如此。 City存儲,它有一個ID ,它只是等待稍后可能添加的任何新Address記錄。

最后,您問了另一個問題作為問題#3的一部分: 如何僅使用ID檢查完整地址是否屬於城市? 能夠回答這個問題的原因是每個Address記錄中都有一個外鍵City-ID 它清楚地定義了與任何Address相關聯的City 所以,如果你有IDCityID為一個Address ,最簡單的方法,以確定它們是否匹配是:1 -檢索Address使用該數據庫中Address ID 2 - 將剛剛從數據庫中檢索到的AddressCity-ID值與您開始使用的CityID進行比較; 如果匹配,您知道AddressCity相關聯,如果它們不匹配,您可以確定該Address與該City之間沒有任何關系。

我不完全確定你想要通過地址和城市實現什么,但我試圖給你一個可靠的解決方案,涵蓋你在問題中描述的內容。 我提供了大量細節,以便解決您的所有要點,並希望它能使我的描述清晰易懂。 我希望這可以幫助你 -

這比谷歌地方更像是一個Javascript問題。

使用Javascript例程驗證表單,並在#1的情況下檢查是否填寫了所有字段。 另一方面,對於案例#2,您可以禁用/刪除不想填寫的字段,並僅使用您要發送的內容發布請求。

對於#3,這只是一個緩存問題。 使用localStorage或數組將城市存儲為密鑰,將結果存儲為值。

Google地方信息將幫助您的用戶自動填寫他們的地址,Sean Mickey描述:

  1. 他們開始在一個字段中輸入他們的街道地址
  2. Google向他們提供了可能匹配地址的列表
  3. 他們選一個,你會得到一個回應這樣的

該回復中的id將是他們的街道地址,而不是城市。 所以它不會像你想要的那樣有用。 如果你想匹配城市,你需要存儲城市的名稱 (如果你想,你可以創建自己的id表)。

考慮一下如何在數據庫中實現位置搜索:

  • 按城市搜索(錯過居住在城市范圍之外的人)
  • 按距離搜索(查找某個半徑范圍內的所有人)

如果您選擇按距離搜索,則還應存儲Google地方信息在用戶輸入地址時為您提供的緯度和經度。 您還需要了解如何在數據庫中進行空間搜索 (尤其是geodist)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM