Java/Android:如何将Polygon WKT转换为List<LatLng>?
把WKT Polygon转换为List的两种方案
好问题!针对你提出的需求,两种方案都可行,我给你详细拆解一下:
一、用Google Maps Utils库的预定义方法(推荐)
Google Maps Utils库确实提供了现成的WKT解析工具,不用自己造轮子,而且处理各种边界情况更可靠。
步骤:
- 首先确保你的项目中引入了Android Maps Utils依赖(以Gradle为例):
implementation 'com.google.maps.android:android-maps-utils:2.2.0'
(可以替换成最新的稳定版本)
- 使用
Wkt类的read方法解析WKT字符串,再转换为List<LatLng>:
import com.google.maps.android.data.geometry.Polygon; import com.google.maps.android.data.wkt.Wkt; import com.google.android.gms.maps.model.LatLng; import java.util.List; import com.google.maps.android.data.wkt.ParseException; // 你的WKT多边形字符串 String wktPolygon = "POLYGON ((-79.9767 40.4887, -79.9718 40.4885, -79.9717 40.4888, -79.9722 40.4889, -79.9727 40.4883))"; try { // 解析WKT,返回的是Geometry类型,需要强转为Polygon Polygon polygon = (Polygon) Wkt.read(wktPolygon); // 直接获取坐标集合,已经是List<LatLng>类型 List<LatLng> latLngList = polygon.getCoordinates(); // 这里就可以使用latLngList了 } catch (ParseException e) { // 处理解析异常,比如WKT格式不符合规范 e.printStackTrace(); }
注意事项:
- 要处理
ParseException,避免因WKT格式错误导致崩溃 - 确保解析的WKT确实是Polygon类型,强转前可以先做类型判断(比如
instanceof Polygon)
二、手动处理字符串(无依赖方案)
如果你的项目不想引入第三方库,手动解析也很简单,只要注意**WKT的坐标顺序是「经度在前,纬度在后」,而LatLng是「纬度在前,经度在后」**这一点就行。
代码示例:
import com.google.android.gms.maps.model.LatLng; import java.util.ArrayList; import java.util.List; String wktPolygon = "POLYGON ((-79.9767 40.4887, -79.9718 40.4885, -79.9717 40.4888, -79.9722 40.4889, -79.9727 40.4883))"; List<LatLng> latLngList = new ArrayList<>(); try { // 清理字符串:移除WKT前缀和外层括号 String pointsContent = wktPolygon.replace("POLYGON ((", "").replace("))", ""); // 分割成单个点的字符串数组 String[] pointArray = pointsContent.split(", "); for (String pointStr : pointArray) { // 分割经度和纬度字符串 String[] lonLatPair = pointStr.split(" "); double longitude = Double.parseDouble(lonLatPair[0]); double latitude = Double.parseDouble(lonLatPair[1]); // 注意LatLng的参数顺序是(latitude, longitude) latLngList.add(new LatLng(latitude, longitude)); } } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) { // 处理数字解析错误或字符串分割异常 e.printStackTrace(); }
注意事项:
- 要处理可能的异常,比如WKT格式不标准、坐标不是有效数字等情况
- 如果WKT中有多余的空格或特殊字符,可能需要先做额外的字符串清理(比如用正则表达式匹配坐标)
总结
- 如果项目已经使用了Google Maps Utils,优先用预定义方法,更简洁且容错性更高
- 若不想增加依赖,手动解析代码量也不大,核心是注意坐标顺序的转换
内容的提问来源于stack exchange,提问作者GeekWithGlasses
相关产品推荐
相关产品推荐

