Fluttify一週一插件 之 高德搜索 Flutter插件

Logo

高德地圖 搜索組件 Flutter插件

GitHub地址:github.com/fluttify-pr…html

依賴

dependencies:
  flutter:
    sdk: flutter
  amap_search_fluttify: ^x.x.x
複製代碼

配置

Android

  1. 注意在app/build.gradle的android塊中配置簽名信息, 並在buildTypes塊中指定簽名信息, 不然將沒法匹配到你在高德後臺配置的appkey, 例如:
android {
    signingConfigs {
        release {
            keyAlias 'amap_map_test'
            keyPassword 'amap_map_test'
            storeFile file('../amap_map_test.jks')
            storePassword 'amap_map_test'
        }
    }

    buildTypes {
        debug {
            signingConfig signingConfigs.release
        }
        profile {
            signingConfig signingConfigs.release
        }
        release {
            signingConfig signingConfigs.release
        }
    }
}
複製代碼

導入

import 'package:amap_search_fluttify/amap_search_fluttify.dart';
複製代碼

使用

獲取POI數據

高德提供了千萬級別的 POI(Point of Interest,興趣點)。在地圖表達中,一個 POI 可表明一棟大廈、一家商鋪、一處景點等等。經過POI搜索,完成找餐館、找景點、找廁所等等的功能。地圖 SDK 的搜索功能提供多種獲取 POI 數據的接口,下文將逐一介紹。android

關鍵字檢索POI

根據關鍵字檢索適用於在某個城市搜索某個名稱相關的POI,例如:查找北京市的「肯德基」。ios

注意:
一、關鍵字未設置城市信息(默認爲全國搜索)時,若是涉及多個城市數據返回,僅會返回建議城市,請根據APP需求,選取城市進行搜索。
二、不設置POI的類別,默認返回「餐飲服務」、「商務住宅」、「生活服務」這三種類別的POI,下方提供了POI分類碼錶,請按照列表內容設置但願檢索的POI類型。(建議使用POI類型的代碼進行檢索)
實現關鍵字檢索的步驟以下:git

final poiList = await AmapSearch.instance.searchKeyword(
  '關鍵字',
  city: '城市',
);
複製代碼

此方法會返回一個Poi列表,Poi中包含了全部信息。github

周邊檢索POI

適用於搜索某個位置附近的POI,可設置POI的類別,具體查詢所在位置的餐飲類、住宅類POI,例如:查找天安門附近的廁所等等場景。
與關鍵字檢索的惟一區別須要經過 radius 參數設置圓形查詢範圍。
redis

final poiList = await AmapSearch.instance.searchAround(
  LatLng(29.08, 119.65),
  keyword: '關鍵字',
  type: '類型',
  city: '城市',
  radius: 1000, // 搜索半徑
);
複製代碼

輸入內容自動提示

輸入提示是指根據用戶輸入的關鍵詞,給出相應的提示信息,將最有可能的搜索詞呈現給用戶,以減小用戶輸入信息,提高用戶體驗。如:輸入「方恆」,提示「方恆國際中心A座」,「方恆購物中心」等。
例如用戶輸入「高德」,輸入框下方的列表會顯示包含關鍵字字段的輸入提示信息。顯示效果如圖所示:
圖markdown

實現輸入提示的步驟以下:app

final inputTipList = await AmapSearch.instance.fetchInputTips(
  '關鍵字',
  city: '城市',
);
複製代碼

返回類型爲InputTip列表。ide

注意:
a 、因爲提示中會出現相同的關鍵字,可是這些關鍵字所在區域不一樣,使用時能夠經過 district字段得到區域,也能夠在提示時在關鍵字後加上區域。
b、當 Tip 的 getPoiID() 返回空,而且 getPoint() 也返回空時,表示該提示詞不是一個真實存在的 POI,這時區域、經緯度參數都是空的,此時可根據該提示詞進行POI關鍵詞搜索
c、當 Tip 的 getPoiID() 返回不爲空,但 getPoint() 返回空時,表示該提示詞是一個公交線路名稱,此時用這個id進行公交線路查詢。
d、當 Tip 的 getPoiID() 返回不爲空,且 getPoint() 也不爲空時,表示該提示詞一個真實存在的POI,可直接顯示在地圖上。
oop

獲取地址描述數據

地理編碼(地址轉座標)

地理編碼基本介紹
地理編碼,又稱爲地址匹配,是從已知的結構化地址描述到對應的經緯度座標的轉換過程。該功能適用於根據用戶輸入的地址確認用戶具體位置的場景,經常使用於配送人員根據用戶輸入的具體地址找地點。

結構化地址的定義: 首先,地址確定是一串字符,內含國家、省份、城市、城鎮、鄉村、街道、門牌號碼、屋邨、大廈等建築物名稱。按照由大區域名稱到小區域名稱組合在一塊兒的字符。一個有效的地址應該是獨一無二的。注意:針對大陸、港、澳地區的地理編碼轉換時能夠將國家信息選擇性的忽略,但省、市、城鎮等級別的地址構成是不能忽略的。

注意:該功能能夠返回一部分POI數據內容,但核心能力是完成結構化地址到經緯度的轉換。

  • POI關鍵字搜索,是根據關鍵詞找到現實中存在的地物點(POI)。
  • 地理編碼是依據當前輸入,根據標準化的地址結構(省/市/區或縣/鄉/村或社區/商圈/街道/門牌號/POI)進行各個地址級別的匹配,以確認輸入地址對應的地理座標,只有返回的地理座標匹配的級別爲POI,纔會對應一個具體的地物(POI)。

根據給定的地理名稱和查詢城市,返回地理編碼的結果列表。顯示效果如圖:
satellite android satellite ios

實現步驟以下:

final geocodeList = await AmapSearch.instance.searchGeocode(
  '關鍵字',
  city: '城市',
);
複製代碼

逆地理編碼(座標轉地址)

逆地理編碼,又稱地址解析服務,是指從已知的經緯度座標到對應的地址描述(如行政區劃、街區、樓層、房間等)的轉換。經常使用於根據定位的座標來獲取該地點的位置詳細信息,與定位功能是黃金搭檔。
satellite android satellite ios

示例代碼以下:

final reGeocodeList = await AmapSearch.instance.searchReGeocode(
  LatLng(29, 119),
  radius: 200.0,
);
複製代碼

獲取公交數據

公交路線查詢

公交出行路線規劃 指定起點[from]和終點[to]進行計算, 還能夠指定計算路徑的模式[mode], 默認爲最快捷. [city]指定所在城市,[nightflag]是否計算夜班車,默認爲不計算,0:不計算,1:計算

final routeResult = await AmapSearch.instance.searchBusRoute(
  from: LatLng(
    double.parse(_fromLatController.text),
    double.parse(_fromLngController.text),
  ),
  to: LatLng(
    double.parse(_toLatController.text),
    double.parse(_toLngController.text),
  ),
  city: '杭州',
);
複製代碼

獲取行政區劃數據

根據縣(區)級行政區劃名稱查詢其下級區劃的詳細信息,如:中心點座標、編碼等等。

目前能查詢到街道級別的信息,例如:中國>山東省>濟南市>歷下區>舜華路街道(國>省>市>區>街道)。

示例代碼以下:

final district = await AmapSearch.instance.searchDistrict(
  _keywordController.text,
  showBoundary: true,
);
複製代碼

步行出行路線規劃

步行路徑規劃能夠根據起終點和步行路線的數據,使用 addPolyline 畫出步行路線圖層,包括起終點和轉彎點。另外也能夠自定義起終點和步行轉彎點的圖標。

使用方法

final routeResult = await AmapSearch.instance.searchWalkRoute(
  from: LatLng(
    double.parse(_fromLatController.text),
    double.parse(_fromLngController.text),
  ),
  to: LatLng(
    double.parse(_toLatController.text),
    double.parse(_toLngController.text),
  ),
);
複製代碼

返回routeResult後,可使用其字段拿到關心的數據。

駕車出行路線規劃

駕車路徑規劃能夠根據起終點和駕車路線的數據,使用 addPolyline 畫出駕車路線圖層,包括起終點和轉彎點。另外也能夠自定義起終點和駕車轉彎點的圖標。

使用方法

final routeResult = await AmapSearch.instance.searchDriveRoute(
  from: LatLng(
    double.parse(_fromLatController.text),
    double.parse(_fromLngController.text),
  ),
  to: LatLng(
    double.parse(_toLatController.text),
    double.parse(_toLngController.text),
  ),
  passedByPoints: [], // 途徑點
  avoidRoad: '避開道路',
);
複製代碼

返回routeResult後,可使用其字段拿到關心的數據。

公交出行路線規劃

公交路徑規劃能夠根據起終點和公交換乘的數據,使用 BusRouteOverlay 畫出公交路線圖層,包括起終點和換乘點。另外也能夠自定義起終點和換乘點的圖標。

目前支持跨城公交路線規劃,提供不一樣城市之間的火車換成方案。

使用方法

指定起點[from]和終點[to]進行計算, 還能夠指定計算路徑的模式[mode], 默認爲最快捷. [city]指定所在城市,[nightflag]是否計算夜班車,默認爲不計算,0:不計算,1:計算

final routeResult = await AmapSearch.instance.searchBusRoute(
  from: LatLng(
    double.parse(_fromLatController.text),
    double.parse(_fromLngController.text),
  ),
  to: LatLng(
    double.parse(_toLatController.text),
    double.parse(_toLngController.text),
  ),
  city: '城市',
  mode: 0, 
  nightflag: 0,
);
複製代碼

返回routeResult後,可使用其字段拿到關心的數據。

騎行出行路線規劃

騎行路徑規劃能夠根據起終點和騎行路線的數據,使用 addPolyline 畫出騎行路線圖層,包括起終點和轉彎點。另外也能夠自定義起終點和騎行轉彎點的圖標。

使用方法

final routeResult = await AmapSearch.instance.searchRideRoute(
  from: LatLng(
    double.parse(_fromLatController.text),
    double.parse(_fromLngController.text),
  ),
  to: LatLng(
    double.parse(_toLatController.text),
    double.parse(_toLngController.text),
  ),
);
複製代碼

返回routeResult後,可使用其字段拿到關心的數據。

LICENSE

Copyright (C) 2020 yohom

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see www.gnu.org/licenses/.

相關文章
相關標籤/搜索