如何使用 Java 库(JTS 或其他?)将 PostGIS 几何图形转换为地理图形

问题描述 投票:0回答:1

我需要这些 Postgis 函数的 Java 等效项: 基本上,它使用缓冲区变换将给定半径的点转换为半径形状的多边形。

NEW.geom = cast(st_buffer(cast(ST_SetSRID(ST_GeomFromText(NEW.geometry), 4326) AS GEOGRAPHY), 1000 * NEW.geometry_radius) AS GEOMETRY(Polygon, 4326));

我正在做这个操作,但结果不一样。结果中的半径是错误的,地图上投影的距离可能会根据地球上的位置而有所不同。 我的目标是,当我要求 3 公里半径时,得到相当于 Google 地图、OSM 或其他网络地图软件中投影的 3 公里半径的圆。

但是上面提到的数据库代码(PostGIS 函数),按照我想要的那样正确执行。

这是我在 Kotlin 中使用 JTS 转换的代码:

// create geometry explicitly in 4326
val reader = WKTReader(GeometryFactory(PrecisionModel(PrecisionModel.FLOATING), 4326))
val geom = reader.read(wkt)

// convert to projection in meters
val transformToMeters = CRS.findMathTransform(EPSG_4326, EPSG_3857, false)
val projectionMeters = JTS.transform(sourceGeometry, transformToMeters)

val poly = projectionMeters.buffer(radius*1000)

val transformToDeg = CRS.findMathTransform(EPSG_3857, EPSG_4326, false)
val resultGeometry = JTS.transform(poly, transform)

gis postgis jts
1个回答
0
投票
// Try converting the meters into angles
distance = distance / (2 * Math.PI * 6371004) * 360;
jtsGeometry.buffer(distance);
© www.soinside.com 2019 - 2024. All rights reserved.