简介

  1. JTS是加拿大的 Vivid Solutions公司做的一套开放源码的 Java API。它提供了一套空间数据操作的核心算法。为在兼容OGC标准的空间对象模型中进行基础的几何操作提供2D空间谓词API。

操作

  1. 表示Geometry对象

    1. Geometry类型介绍见另一篇文章:WKT WKB和GeoJSON
    2. package com.alibaba.autonavi;import com.vividsolutions.jts.geom.Coordinate;
      import com.vividsolutions.jts.geom.Geometry;
      import com.vividsolutions.jts.geom.GeometryCollection;
      import com.vividsolutions.jts.geom.GeometryFactory;
      import com.vividsolutions.jts.geom.LineString;
      import com.vividsolutions.jts.geom.LinearRing;
      import com.vividsolutions.jts.geom.Point;
      import com.vividsolutions.jts.geom.Polygon;
      import com.vividsolutions.jts.geom.MultiPolygon;
      import com.vividsolutions.jts.geom.MultiLineString;
      import com.vividsolutions.jts.geom.MultiPoint;
      import com.vividsolutions.jts.io.ParseException;
      import com.vividsolutions.jts.io.WKTReader;public class GeometryDemo {private GeometryFactory geometryFactory = new GeometryFactory();/*** create a point* @return*/public Point createPoint(){Coordinate coord = new Coordinate(109.013388, 32.715519);Point point = geometryFactory.createPoint( coord );return point;}/*** create a point by WKT* @return* @throws ParseException */public Point createPointByWKT() throws ParseException{WKTReader reader = new WKTReader( geometryFactory );Point point = (Point) reader.read("POINT (109.013388 32.715519)");return point;}/*** create multiPoint by wkt* @return*/public MultiPoint createMulPointByWKT()throws ParseException{WKTReader reader = new WKTReader( geometryFactory );MultiPoint mpoint = (MultiPoint) reader.read("MULTIPOINT(109.013388 32.715519,119.32488 31.435678)");return mpoint;}/*** * create a line* @return*/public LineString createLine(){Coordinate[] coords  = new Coordinate[] {new Coordinate(2, 2), new Coordinate(2, 2)};LineString line = geometryFactory.createLineString(coords);return line;}/*** create a line by WKT* @return* @throws ParseException*/public LineString createLineByWKT() throws ParseException{WKTReader reader = new WKTReader( geometryFactory );LineString line = (LineString) reader.read("LINESTRING(0 0, 2 0)");return line;}/*** create multiLine * @return*/public MultiLineString createMLine(){Coordinate[] coords1  = new Coordinate[] {new Coordinate(2, 2), new Coordinate(2, 2)};LineString line1 = geometryFactory.createLineString(coords1);Coordinate[] coords2  = new Coordinate[] {new Coordinate(2, 2), new Coordinate(2, 2)};LineString line2 = geometryFactory.createLineString(coords2);LineString[] lineStrings = new LineString[2];lineStrings[0]= line1;lineStrings[1] = line2;MultiLineString ms = geometryFactory.createMultiLineString(lineStrings);return ms;}/*** create multiLine by WKT* @return* @throws ParseException*/public MultiLineString createMLineByWKT()throws ParseException{WKTReader reader = new WKTReader( geometryFactory );MultiLineString line = (MultiLineString) reader.read("MULTILINESTRING((0 0, 2 0),(1 1,2 2))");return line;}/*** create a polygon(多边形) by WKT* @return* @throws ParseException*/public Polygon createPolygonByWKT() throws ParseException{WKTReader reader = new WKTReader( geometryFactory );Polygon polygon = (Polygon) reader.read("POLYGON((20 10, 30 0, 40 10, 30 20, 20 10))");return polygon;}/*** create multi polygon by wkt* @return* @throws ParseException*/public MultiPolygon createMulPolygonByWKT() throws ParseException{WKTReader reader = new WKTReader( geometryFactory );MultiPolygon mpolygon = (MultiPolygon) reader.read("MULTIPOLYGON(((40 10, 30 0, 40 10, 30 20, 40 10),(30 10, 30 0, 40 10, 30 20, 30 10)))");return mpolygon;}/*** create GeometryCollection  contain point or multiPoint or line or multiLine or polygon or multiPolygon* @return* @throws ParseException*/public GeometryCollection createGeoCollect() throws ParseException{LineString line = createLine();Polygon poly =  createPolygonByWKT();Geometry g1 = geometryFactory.createGeometry(line);Geometry g2 = geometryFactory.createGeometry(poly);Geometry[] garray = new Geometry[]{g1,g2};GeometryCollection gc = geometryFactory.createGeometryCollection(garray);return gc;}/*** create a Circle  创建一个圆,圆心(x,y) 半径RADIUS* @param x* @param y* @param RADIUS* @return*/public Polygon createCircle(double x, double y, final double RADIUS){final int SIDES = 32;//圆上面的点个数Coordinate coords[] = new Coordinate[SIDES+1];for( int i = 0; i < SIDES; i++){double angle = ((double) i / (double) SIDES) * Math.PI * 2.0;double dx = Math.cos( angle ) * RADIUS;double dy = Math.sin( angle ) * RADIUS;coords[i] = new Coordinate( (double) x + dx, (double) y + dy );}coords[SIDES] = coords[0];LinearRing ring = geometryFactory.createLinearRing( coords );Polygon polygon = geometryFactory.createPolygon( ring, null );return polygon;}/*** @param args* @throws ParseException */public static void main(String[] args) throws ParseException {GeometryDemo gt = new GeometryDemo();Polygon p = gt.createCircle(0, 1, 2);//圆上所有的坐标(32个)Coordinate coords[] = p.getCoordinates();for(Coordinate coord:coords){System.out.println(coord.x+","+coord.y);}}
      }

转载于:https://www.cnblogs.com/duanxingxing/p/5145829.html

JTS基本概念和使用相关推荐

  1. 【JTS】JTS的几何图形的基本关系方法

    拓扑关系--九交模型 2015年06月11日 08:42:30 阅读数:4541 空间关系 中文名称 OGC标准 解释 Contains 包含 是 一个几何图形的内部完全包含了另一个几何图形的内部和边 ...

  2. java jts点到面的距离_jts-空间索引

    前言: 如果您对JTS这三个词还是没有一个概念,那么推荐您关注一下sinoly的博客.这个我能够找到为数不多的关于jts的中文资料. http://www.blogjava.net/sinoly/ar ...

  3. geotools应用-JTS生产四叉树索引和R树索引

    微信搜索:"二十同学" 公众号,欢迎关注一条不一样的成长之路 geotools介绍 geotools官网https://geotools.org/ Geotools是一个java类 ...

  4. JTS学习-com.vividsolutions.jts.operation包

    JTS组织以下的文件夹:几何图形(geom包).拓扑图(geomgraph包) .基本算法(algorithm包).索引方法(index包).输入/输出(io包).线性关系(linearref包).计 ...

  5. jts学习——com.vividsolutions.jts.geom包

    介绍 jts是一个为GIS服务提供的api,内部可以用坐标点构建空间模型,判断模型之间的关系等 Coordinate JTS内部封装的一个坐标类Coordinate(坐标)是用来存储坐标的轻便的类.它 ...

  6. RPC 笔记(03)— gRPC 概念、安装、编译、客户端和服务端示例

    1. gRPC 概念 gRPC 是 Google 开源的一款高性能的 RPC 框架.GitHub 上介绍如下: gRPC is a modern, open source, high-performa ...

  7. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  8. 数据结构(01)— 算法复杂度概念及常见的复杂度计算

    1. 大 O 表示法 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度.大 O 表示法指出了最糟情况下的运行时间.大 O 表示法在讨论运行时间时, ...

  9. OpenCV 笔记(01)— OpenCV 概念、整体架构、各模块主要功能

    1. OpenCV 概念 图像处理( Image Processing )是用计算机对图像进行分析, 以达到所需结果的技术, 又称影像处理. 图像处理技术一般包括图像压缩, 增强和复原, 匹配.描述和 ...

最新文章

  1. MyBatis基础-CRUD
  2. ansys结构分析单元与应用_结构动力学中的时域分析(3) —— 基于ANSYS的实现
  3. windows清理图标缓存并重新加载
  4. GitHub Actions 支持 skip ci 了
  5. linux中ls文件内存大小,Linux下用ls和du命令查看文件以及文件夹大小
  6. java exif 语言编码_Java读取图片EXIF信息的代码
  7. C# ListView用法详解
  8. [国嵌攻略][038][时钟初始化]
  9. GNOME界面简单使用
  10. 内是不是半包围结构_什么是自行车变速器上的“倾斜平行四边形”结构?
  11. java easyui分页源码_SpringMVC+easyUI中datagrid分页实现_2014.5.1
  12. 轻量级服务器与云服务器的区别
  13. ASP.NET MVC5+EF6+EasyUI 后台管理系统(59)-BLL层重构
  14. 小型Web页打包优化(下)
  15. 设计模式 (七) 适配器模式
  16. 应对雾霾,哪款口罩适合你?
  17. Xilinx - WP509阅读笔记 - 了解射频采样数据转换器的关键参数
  18. 同步模式之保护性暂停
  19. 拆解了20个企业微信社群的我, 发现【社群营销】最好的方法应该是这样!
  20. 前沿人物(零)——伯特霍尔德霍恩

热门文章

  1. (原创)惠州市惠阳区房价偏低的原因深入分析
  2. 对QT学习之路12-14的源代码补充与修正
  3. statistics DATA in SHANGHAI
  4. 如何保住我们的头发?初级程序员的碎碎念
  5. 亲测可用的github只下载一个文件夹的方法
  6. 啊,苏黎世联邦理工的拒信,最想去的学校啊
  7. 2021的第一封拒信来自2021年年度青年活动家本科生奖!
  8. 你做过的项目会逐渐形成你自己的认知和别人对于你的看法~剑桥工程硕士陶瓷有感
  9. C++风格与C风格文件读写效率测试-vs2015,vs2017
  10. Python开发培训前景如何?