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

2,058 阅读7分钟

Logo

高德地图 搜索组件 Flutter插件

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

依赖

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 数据的接口,下文将逐一介绍。

关键字检索POI

根据关键字检索适用于在某个城市搜索某个名称相关的POI,例如:查找北京市的“肯德基”。

注意:
1、关键字未设置城市信息(默认为全国搜索)时,如果涉及多个城市数据返回,仅会返回建议城市,请根据APP需求,选取城市进行搜索。
2、不设置POI的类别,默认返回“餐饮服务”、“商务住宅”、“生活服务”这三种类别的POI,下方提供了POI分类码表,请按照列表内容设置希望检索的POI类型。(建议使用POI类型的代码进行检索)
实现关键字检索的步骤如下:

final poiList = await AmapSearch.instance.searchKeyword(
  '关键字',
  city: '城市',
);

此方法会返回一个Poi列表,Poi中包含了所有信息。

周边检索POI

适用于搜索某个位置附近的POI,可设置POI的类别,具体查询所在位置的餐饮类、住宅类POI,例如:查找天安门附近的厕所等等场景。
与关键字检索的唯一区别需要通过 radius 参数设置圆形查询范围。

final poiList = await AmapSearch.instance.searchAround(
  LatLng(29.08, 119.65),
  keyword: '关键字',
  type: '类型',
  city: '城市',
  radius: 1000, // 搜索半径
);

输入内容自动提示

输入提示是指根据用户输入的关键词,给出相应的提示信息,将最有可能的搜索词呈现给用户,以减少用户输入信息,提升用户体验。如:输入“方恒”,提示“方恒国际中心A座”,“方恒购物中心”等。
例如用户输入“高德”,输入框下方的列表会显示包含关键字字段的输入提示信息。显示效果如图所示:
图

实现输入提示的步骤如下:

final inputTipList = await AmapSearch.instance.fetchInputTips(
  '关键字',
  city: '城市',
);

返回类型为InputTip列表。

注意:
a 、由于提示中会出现相同的关键字,但是这些关键字所在区域不同,使用时可以通过 district字段获得区域,也可以在提示时在关键字后加上区域。
b、当 Tip 的 getPoiID() 返回空,并且 getPoint() 也返回空时,表示该提示词不是一个真实存在的 POI,这时区域、经纬度参数都是空的,此时可根据该提示词进行POI关键词搜索
c、当 Tip 的 getPoiID() 返回不为空,但 getPoint() 返回空时,表示该提示词是一个公交线路名称,此时用这个id进行公交线路查询。
d、当 Tip 的 getPoiID() 返回不为空,且 getPoint() 也不为空时,表示该提示词一个真实存在的POI,可直接显示在地图上。

获取地址描述数据

地理编码(地址转坐标)

地理编码基本介绍
地理编码,又称为地址匹配,是从已知的结构化地址描述到对应的经纬度坐标的转换过程。该功能适用于根据用户输入的地址确认用户具体位置的场景,常用于配送人员根据用户输入的具体地址找地点。

结构化地址的定义: 首先,地址肯定是一串字符,内含国家、省份、城市、城镇、乡村、街道、门牌号码、屋邨、大厦等建筑物名称。按照由大区域名称到小区域名称组合在一起的字符。一个有效的地址应该是独一无二的。注意:针对大陆、港、澳地区的地理编码转换时可以将国家信息选择性的忽略,但省、市、城镇等级别的地址构成是不能忽略的。

注意:该功能可以返回一部分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/.