JTS空间坐标Geometry使用

这篇具有很好参考价值的文章主要介绍了JTS空间坐标Geometry使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Geomtery子类图

JTS空间坐标Geometry使用

创建Geometry


GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();

// 点
Coordinate coord = new Coordinate(1, 1);
Point point = geometryFactory.createPoint(coord);

// 线
Coordinate[] coordinates =  new Coordinate[] {new Coordinate(0, 2), new Coordinate(2, 0), new Coordinate(8, 6) };
LineString line = geometryFactory.createLineString(coordinates);

// 面
Coordinate[] coords  =  new Coordinate[] {new Coordinate(4, 0), new Coordinate(2, 2), new Coordinate(4, 4), new Coordinate(6, 2), new Coordinate(4, 0) };
LinearRing ring = geometryFactory.createLinearRing(coords);
LinearRing holes[] = null; // use LinearRing[] to represent holes
Polygon polygon = geometryFactory.createPolygon(ring, holes);

// 圆
CurvedGeometryFactory curvedFactory = new CurvedGeometryFactory(geometryFactory, Double.MAX_VALUE);
CoordinateSequence coords =  PackedCoordinateSequenceFactory.DOUBLE_FACTORY.create(new double[] {10, 14, 6, 10, 14, 10}, 2);
CircularString arc = (CircularString) curvedFactory.createCurvedGeometry(coords);

Geometry转换坐标系


CoordinateReferenceSystem sourceCRS = CRS.decode("EPSG:4326");
CoordinateReferenceSystem targetCrs = CRS.decode("EPSG:4490");

boolean lenient = true; // allow for some error due to different datums
MathTransform transform = CRS.findMathTransform(sourceCRS, targetCrs, lenient);

Geometry geometry2 = JTS.transform(geometry, transform);

Geometry方法


// 空间判断
// 不相交
boolean disjoint = geometry.disjoint(geometry2);
// 相交
boolean intersects = geometry.intersects(geometry2);
// 相切,内部不相交
boolean touches = geometry.touches(geometry2);


// 被包含
boolean within = geometry.within(geometry2);
//包含,只针对几何内部而言,不计算边界
boolean contains = geometry.contains(geometry2);
//覆盖,不区分集合边界与内部
boolean covers = geometry.covers(geometry);

//相交,不能是相切或者包含
boolean crosses = geometry.crosses(geometry);
//相交
boolean overlaps = geometry.overlaps(geometry2);
// 两个几何的空间关系
IntersectionMatrix relate1 = geometry.relate(geometry2);

//空间计算
//求交集
Geometry intersection = geometry.intersection(geometry2);
//求并集
Geometry union = geometry.union(geometry);
//geometry-交集
Geometry difference = geometry.difference(geometry2);
// 并集-交集
Geometry symDifference = geometry.symDifference(geometry);
// 几何缓冲生成新几何,单位与geometry坐标系一致
Geometry buffer1 = geometry.buffer(2);
// 生成包含几何的最小凸多边形
Geometry convexHull = geometry.convexHull();
// 两个几何的最小距离
double distance = geometry.distance(geometry);

// 面积
double area = geometry.getArea();
//几何类型
String geometryType = geometry.getGeometryType();
// 边界
Geometry boundary = geometry.getBoundary();
// 获取中心点
Point centroid = geometry.getCentroid();

Geometry 与 WKT 转换


// geometry转wkt
//方法一
WKTWriter2 wktWriter2 = new WKTWriter2()
String wkt = wktWriter2.write(geometry)
//方法二
String text = geometry.toText();


// wkt转geometry
WKTReader2 wktReader2 = WKTReader2()
Point point = (Point) wktReader2.read("POINT (1 1)");

LineString line = (LineString) wktReader2.read("LINESTRING(0 2, 2 0, 8 6)");

Polygon polygon = (Polygon) wktReader2.read("POLYGON((20 10, 30 0, 40 10, 30 20, 20 10))");

pom.xml文章来源地址https://www.toymoban.com/news/detail-421867.html

<dependencies>
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-shapefile</artifactId>
            <version>${geotools.version}</version>
        </dependency>
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-epsg-hsql</artifactId>
            <version>${geotools.version}</version>
        </dependency>
    </dependencies>
  <repositories>
    <repository>
      <id>osgeo</id>
      <name>OSGeo Release Repository</name>
      <url>https://repo.osgeo.org/repository/release/</url>
      <snapshots><enabled>false</enabled></snapshots>
      <releases><enabled>true</enabled></releases>
    </repository>
    <repository>
      <id>osgeo-snapshot</id>
      <name>OSGeo Snapshot Repository</name>
      <url>https://repo.osgeo.org/repository/snapshot/</url>
      <snapshots><enabled>true</enabled></snapshots>
      <releases><enabled>false</enabled></releases>
    </repository>
  </repositories>

到了这里,关于JTS空间坐标Geometry使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MFC】10.MFC六大机制:RTTI(运行时类型识别),动态创建机制,窗口切分,子类化-笔记

    C++: ##是拼接 #是替换成字符串 这是MFC提供的运行时类信息的使用,如果我们自己创建一个类,如果想用这些方法,必须要满足三个条件: 这个类必须继承于CObject类 类内必须声明DECLARE_DYNAMIC 类外必须实现IMPLENENT_DYNAMIC 我们来看看是如何实现的: 这里给出RTTI的图,每一个类中

    2024年02月13日
    浏览(40)
  • 空间坐标(系)如何进行变换?

      要描述某一物体在现实场景的位置,通常以三维空间坐标系下的坐标进行说明,当物体位置或自身进行变化时,可以用放射变换说明物体的变化情况。仿射变换中的基本变换包括平移、旋转、缩放、剪切。本文研究的物体为刚体,涉及的变换为平移和旋转,下文将以平移

    2024年02月06日
    浏览(33)
  • 双目立体视觉空间坐标精度分析

    参考链接:https://zhuanlan.zhihu.com/p/362718946 本文主要参考链接博主的理论推导,并按照自己的理解作分析和修正 双目立体视觉系统的精度由那些因素决定? X/Y/Z三个方向的精度都是一样的吗?如果不是一样,哪个方向精度更好呢? 最常见的情况下,双目立体视觉的最终输出是

    2024年02月10日
    浏览(38)
  • 空间坐标变换(Python&C++实现)

    空间坐标变换可看作坐标点乘以一个齐次矩阵,其中,齐次矩阵可表示为: 其中: ①区域的3×3矩阵产生三维图形的比例、对称、旋转、错切等基本变换; ②区域产生图形的透视变换; ③区域产生沿X、Y、Z三个轴的平移变换; ④区域产生图形的总比例变换。 平移变换可表示

    2024年02月13日
    浏览(31)
  • 【必备知识】 三维空间/坐标转换/相机知识

    以下内容包含了2D坐标与3D坐标系之间的转换以及关于相机场的基础知识,理解这部分内容可以更快入门SLAM相关、多视角合成、三维空间变换等内容。 照相机制造过程中的一些涉及到透镜精密以及组装工艺等原因需要对图像进行相应的矫正。如下所示: 需要建立世界坐标系到

    2024年02月03日
    浏览(46)
  • Unity Shader 开发入门3 —— 坐标空间变换

    ​ 在 Shader 开发中存在不同的坐标空间,包括: 模型空间。 世界空间。 观察空间。 裁剪空间。 屏幕空间。 ​ 在渲染管线中,需要将坐标数据在这些空间中进行变换计算。 ​ 在设计模型时,使用模型空间。模型导入 Unity 后,最终显示在屏幕上,依次经历了如下空间的坐标

    2024年01月16日
    浏览(41)
  • 对极几何与三角化求3D空间坐标

    第一步:特征匹配。提取出有效的匹配点 第二步:根据匹配点对,依据对极几何约束原理,求相机运动的R,t 第三步:根据针孔相机模型的公式,由 R,t估计特征点的空间坐标 其中 triangulatePoints()的具体用法为 所以通过函数pixel2cam可将像素坐标转换到归一化相机坐标系下 归一

    2024年02月09日
    浏览(48)
  • 【学习笔记】空间坐标系旋转与四元数

      最近在学惯性器件,想着先把理论知识脉络打通,于是便开始学习空间坐标系旋转和四元数,正好结合刚刚结课的课程《机器人控制技术》,记录一下学习心得。 旋转矩阵和齐次变换矩阵部分主要参考自教材 《机器人学导论》 中的第2章 【有需要的可以去z-library上免费

    2024年02月01日
    浏览(42)
  • C# 子类强制转换为父类异常,引出的C#Dll加载机制,以及同类名同命名空间同dll程序集在C#中是否为同一个类的研究。

    已知,子类B继承自父类A,但是在代码运行时,B类强制转换为A类,却报代码转换异常。 很奇怪的问题吧,不过这个也是难得机会,去研究C#运行的底层原理。 下面是报错的代码片段。 下面是报错结果(其中的敏感字符串被替换成了xxx): 通过上面的代码可以看出,从子类中

    2024年02月13日
    浏览(43)
  • 双目视觉离线测量空间三维坐标带详细注释

    直接上代码: 代码中的示例图片和参数详见链接。

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包