简介

  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);
      }
      }
      }

JTS基本概念和使用的更多相关文章

  1. JTS相关资料和示例

    示例 JTS基本概念和使用 JTS Geometry之间的关系 JTS algorithm package

  2. java各种概念 Core Java总结

    Base: OOA是什么?OOD是什么?OOP是什么?{ oo(object-oriented):基于对象概念,以对象为中心,以类和继承为构造机制,来认识,理解,刻画客观世界和设计,构建相应的软件系统 ...

  3. JTS

    在这个系列的 第 1 部分,我们讨论了事务并研究了它们的基本属性 ― 原子性(atomicity).一致性(consistency).孤立性(isolation)和持久性(durability).事务 ...

  4. JTS(Geometry)(转)

    原文链接:http://blog.csdn.net/cdl2008sky/article/details/7268577 空间数据模型(1).JTS Geometry model (2).ISO Ge ...

  5. J2EE之13个规范标准概念

    主要是关于j2EE十三个规范的总结. java基础知识 首先java分为三类:J2ME.J2SE.J2EE. 依据开发软件的大小和量级他们的作用分别不同,J2ME是开发为机顶盒.移动电话和PDA之类嵌 ...

  6. 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念

    一.前言     DDD(领域驱动设计)的一些介绍网上资料很多,这里就不继续描述了.自己使用领域驱动设计摸滚打爬也有2年多的时间,出于对知识的总结和分享,也是对自我理解的一个公开检验,介于博客园这个平 ...

  7. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  8. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)

    集群概念介绍(一)) 白宁超 2015年7月16日 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习 ...

  9. 声音分贝的概念,dBSPL.dBm,dBu,dBV,dBFS

    需要做个音频的PPM表,看着一堆的音频术语真是懵了,苦苦在网上扒了几天的文档,终于有了点收获,下面关于声音的分贝做个总结. 分贝 Decibel 分贝(dB)是一个对数单位(logarithmic u ...

随机推荐

  1. Solr6.5配置中文分词IKAnalyzer和拼音分词pinyinAnalyzer (二)

    之前在 Solr6.5在Centos6上的安装与配置 (一) 一文中介绍了solr6.5的安装.这篇文章主要介绍创建Solr的Core并配置中文IKAnalyzer分词和拼音检索. 一.创建Core: ...

  2. Task异步编程,刨根到底

    1. 编译器到底对await做了什么 await 一个异步操作的时候,实际上编译器会创建一个状态机,这个状态机包含了调用者的上下文变量,状态机使用yield迭代器实现,状态机由clr调度,每次运行都会 ...

  3. 剑指offer十八之二叉树的镜像

    一.题目 操作给定的二叉树,将其变换为源二叉树的镜像.二叉树的镜像定义:        源二叉树 : 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树: 8 / \ 10 6 / \ ...

  4. 执行shell脚本的四种方式(转)

    原文网址:https://www.jb51.net/article/53924.htm 这篇文章主要介绍了Linux中执行shell脚本的4种方法,即总结在Linux中运行shell脚本的4种方法. ...

  5. 一对一Socket简单聊天的实现

    今天终于调试通了Socket一对一的聊天,每次发送连接请求后,将用户名发送到Socket中去,然后将用户名和新建的socket存到map中,然后根据用户名来确定接收方是谁,以实现一对一的聊天功能. 上 ...

  6. tomcat 启动速度慢背后的真相

    1. tomcat 启动慢 在线上环境中,我们经常会遇到类似的问题,就是tomcat 启动比较慢,查看内存和cpu,io都是正常的,但是启动很慢,有的时候长达几分钟,这到底是什么原因导致的. 1.1 ...

  7. Redis注意事项

    1.Redis3.0没有虚拟内存概念,已从2.4就移除: 2.redis挂掉并重启时,如果有主从备份的,主机挂掉重启时先关掉主从备份,不然从机的数据会被冲洗掉 数据恢复时如果有 AOF(原理是将Rei ...

  8. 散列算法-MD5

    信息摘要技术把明文内容按某种规则生成一段哈西值,即使明文消息只改动了一点点,生成的结果也会完全不同. MD5(Message-digest algorithm 5)就是信息摘要的一种实现,它可以从任意 ...

  9. 非Spring环境下使用Mybatis操作数据库的流程

    准备工作 1,  导入mybatis-3.2.7.jar,mysql-connector-5.1.25-bin.jar两个jar包 2,  在数据库中创建一个db_test数据库,库中有一个表为use ...

  10. 【Vue.js实战案例】- Vue.js递归组件实现组织架构树和选人功能

    大家好!先上图看看本次案例的整体效果. 浪奔,浪流,万里涛涛江水永不休.如果在jq时代来实这个功能简直有些噩梦了,但是自从前端思想发展到现在的以MVVM为主流的大背景下,来实现一个这样繁杂的功能简直不 ...