【问题标题】:How to use specific CRS when creating geotools objects?创建 geotools 对象时如何使用特定的 CRS?
【发布时间】:2021-07-09 16:56:20
【问题描述】:

我在围绕对象(线)创建 geotools 缓冲区时遇到问题,所有对象似乎都是弯曲的,我认为这是因为 CRS 的差异在缓冲区上非常明显。我发现我可能需要设置我的应用正在使用的 CRS,我希望它是 EPSG:4326,但我不知道该怎么做。


阅读 geotools 指南我已经看到了如何通过转换知道之前使用的 CRS 的示例,但我只能获得 SRID 代码而不是 CRS。感谢任何帮助


在下面显示的代码中,我试图在一条线上构造缓冲区并获取缓冲区在不同半径上的坐标。它工作得很好,但在地图上似乎真的不均匀。我还尝试创建指定 SRID 的几何工厂,假设 int 代码与 CRS 中的相同,在不同工厂中显示坐标没有任何区别

GeometryFactory geometryFactory = new GeometryFactory(new PrecisionModel(), 4326);
GeometryFactory factory = JTSFactoryFinder.getGeometryFactory();
LineString lineString = geometryFactory.createLineString(mapCoords(pipeline));
for (double radius : radiuses){
            Coordinate[] coordinates = lineString.buffer(radius).getCoordinates();
            List<Point> points = mapPoints(coordinates);
            radiusesPoints.add(points);
    }

【问题讨论】:

  • 我们需要查看您使用的代码吗?你是如何创建你的功能的?它们在什么投影中 - 缓冲区不适用于像 4326 这样的地理 CRS。
  • @IanTurton 我将我正在使用的代码添加到问题中,告诉我您是否需要更多信息,还将代码中的方法映射到将 geotools 坐标转换为本地创建的类点(它们是几乎相同,但仅针对 2D 具有最小化的功能)
  • 我们需要查看 mapCoords(pipeline) 的输出以了解实际发生的情况 - 但这不起作用,因为 JTS 不会使用您添加到工厂的 SRID。跨度>
  • 你可以只使用你的几何体

标签: java geometry geotools


【解决方案1】:

因此,正如 cmets 中所说,由于无法在同一个对象上获取 getCoordinates 和 getCoordinateReferenceSystem,因此我使用了一种解决方法,它基本上是使用 postgresql 函数来做同样的事情,但在数据库请求级别。任务已在不久前解决,但如果您想在 cmets 中查看解决方案标记我,我会为您找到 db 请求

【讨论】:

    猜你喜欢
    • 2011-08-24
    • 2014-06-21
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 2021-06-11
    相关资源
    最近更新 更多