You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java/Android:如何将Polygon WKT转换为List<LatLng>?

把WKT Polygon转换为List的两种方案

好问题!针对你提出的需求,两种方案都可行,我给你详细拆解一下:

一、用Google Maps Utils库的预定义方法(推荐)

Google Maps Utils库确实提供了现成的WKT解析工具,不用自己造轮子,而且处理各种边界情况更可靠。

步骤:

  1. 首先确保你的项目中引入了Android Maps Utils依赖(以Gradle为例):
implementation 'com.google.maps.android:android-maps-utils:2.2.0'

(可以替换成最新的稳定版本)

  1. 使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:07:31