ArcGIS for qml - 地址地標轉換為經緯度(地理編碼)
實現輸入地址地標轉換為其經緯度
一、地理編碼
1、地理編碼含義
地址編碼(或地理編碼)是使用地址中包含的資訊來插入地圖上的相應位置的過程。使用參考資料來源(稱為定位器),ArcGIS通過將輸入地址與要素屬性進行匹配來查詢地圖位置。
通俗的說就是:地理編碼採用地址或地名,並將其轉換為實際座標。
與此相關的反向地理編碼,類似於地理編碼,它只是找到與給定地圖座標相關的最近地址或地名,而不是找到與特定地址或地名相關聯的座標。
2、定位器
地理編碼的基本邏輯內置於定位器中,而不是來自ArcGIS Runtime SDK程式碼。
定位器(使用ArcGIS Desktop建立)是地理編碼過程中的主要元件,包含執行地址匹配所需的所有資料。
定位器基於特定的地址定位器樣式建立,該樣式指示預期的地址輸入型別以及將如何執行匹配。
在使用定位器時,需要呼叫ArcGIS World地理編碼服務(https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer)
更多常用定位器樣式可以參考。
3、地址
地址是地理編碼的基礎,由一個或多個地址元素組成,地址元素有助於地理編碼搜尋,精確定位到特定位置的地址。
進行地理編碼時,可以傳入地址的各個元件,或者將所有資訊作為要解析的單個字串提供。
進行地理編碼時,輸入地址中預期的資訊型別由正在使用的定位器配置的地址樣式確定。
一些常用地址元件欄位名稱,如:
- 地址 - 門牌號碼和街道
- 鄰里 - 城市的細分(不用於美國地址)
- 城市或市政府
- 次區域 - 行政區域,如縣或省(不用於美國或墨西哥地址)
- 地區 - 與地址相關的最大行政邊界(美國的州名)
- 郵政郵政編碼
- CountryCode-國家/地區的名稱或ISO程式碼
更多可以參考地理編碼欄位輸入
4、結果
特定地址的地理編碼結果稱為候選,根據輸入地址的具體和完整程度,可以從地理編碼操作中獲得幾個候選項。地理編碼結果按照匹配的質量排序,因此第一個候選人通常是最好的
一、實現
在ArcGIS for QML API參考文件中查詢地理編碼Geocode可以得到三個型別:GeocodeParameters(地理編碼引數)、GeocodeResult(地理編碼結果)、ReverseGeocodeParameters(反向地理編碼引數),這三個都是在LocatorTask任務下進行的。
1、LocatorTaslk
LocatorTask是地理編碼和反向地理編碼的任務,支援線上和離線功能。
地理編碼採用地址或地名,並將其轉換為實際座標,但必須首先進行地理編碼以將其書面描述或地址轉換為一組可以放在地圖上的真實世界座標。
地址定位器來使用LocatorTask進行地理編碼。
LocatorTask是非同步執行。成功執行會返回GeocodeResult列表,包含有關匹配記錄的詳細資訊。還支援意見,這使開發人員能夠顯示來自定位器自動生成的建議,基於什麼使用者在搜尋框中鍵入了。
2、定位器元件
介面程式碼:
MyTextField{//搜尋框 id:searchBox; width: 280; focus: true; Keys.enabled: true; placeholderText: "Please enter landmark"; //Keys.onReturnPressed: Rectangle{ anchors{ right: parent.right; top:parent.top; bottom: parent.bottom; margins: 5; } width: 35; color: "transparent"; Image {//搜尋 anchors.centerIn: parent; width: 30; height: width; source: "../../Images/find.png"; visible: searchBox.text.length === 0; MouseArea{ anchors.fill: parent; onClicked: { searchBox.focus = true; } } } } Image {//清除 anchors{ right: parent.right; top:parent.top; bottom: parent.bottom; margins: 5; } width: 27; height: width; source: "../../Images/closeclear.png"; visible: parent.text.length !== 0; MouseArea{ anchors.fill:parent; onClicked: { searchBox.text = ""; coordinateShow.text = ""; } } } Keys.onReturnPressed: { geocodeAddress(searchBox.text); } } } Row{//label anchors.horizontalCenter: parent.horizontalCenter; MyText{text: "The latitude and longitude:";fontSize: s;fontColor: b1;} } Row{//經緯度顯示 anchors.horizontalCenter: parent.horizontalCenter; MyText{id:coordinateShow;text: "";} }