Flutter geocoding中Placemark是什么?求对应示例代码解析
什么是Flutter geocoding中的Placemark
Placemark是geocoding库封装的结构化地址实体类,专门用来承载经纬度反向解析得到的地址信息。你不需要自己解析原生地理编码接口返回的原始数据,直接从Placemark对象里就能读取到拆分好的地址字段,常用属性包括:
- name:地点名称,比如建筑名、门牌号
- locality:城市/区县名称
- postalCode:邮编
- country:国家名称
- administrativeArea:省级行政区名称
- subLocality:街道/镇区名称
提供的代码逻辑说明
你贴的代码是典型的「将当前定位经纬度转换为可读地址文本」的实现,完整格式化后的代码如下:
_getAddress() async { try { List<Placemark> p = await placemarkFromCoordinates( _currentPosition.latitude, _currentPosition.longitude); Placemark place = p[0]; setState(() { _currentAddress = "${place.name}, ${place.locality}, ${place.postalCode}, ${place.country}"; startAddressController.text = _currentAddress; _startAddress = _currentAddress; }); } catch (e) { print(e); } }
逻辑拆解如下:
- 方法用
async修饰,因为内部要调用异步的地理编码接口,需要等待接口返回结果后再执行后续操作 - 外层用
try-catch包裹逻辑,捕获地理编码过程中可能出现的异常(比如网络异常、坐标非法、接口调用超限等),出现异常时直接打印错误信息 - 调用geocoding库提供的
placemarkFromCoordinates方法,传入当前定位得到的经纬度参数,异步返回匹配的Placemark列表,列表内的结果按照和输入坐标的匹配度从高到低排序 - 取列表第一个元素(匹配度最高的地址结果)赋值给
place变量 - 调用
setState更新页面状态:- 从place中取出需要的地址字段拼接成完整地址,存入
_currentAddress变量 - 把完整地址赋值给起点地址输入框的控制器
startAddressController,让用户在输入框中直接看到当前定位的地址 - 把完整地址同步赋值给
_startAddress变量,供后续业务逻辑(比如路径规划、地址提交)使用
- 从place中取出需要的地址字段拼接成完整地址,存入
内容的提问来源于stack exchange,提问作者Jack Y
相关产品推荐
相关产品推荐

