简介

  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. POJ 2521

    #include <iostream> #include <stdio.h> using namespace std; int main() { //freopen(" ...

  2. .NET跨平台实践:再谈用C#开发Linux守护进程 — 完整篇

    Linux守护进程是Linux的后台服务进程,相当于Windows服务,对于为Linux开发服务程序的朋友来说,Linux守护进程相关技术是必不可少的,因为这个技术不仅仅是为了开发守护进程,还可以拓展 ...

  3. Linux下安装Nginx详细图解教程 (nginx-1.2.6)

    什么是Nginx? Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器,在高连接并发的情况下N ...

  4. php -- 特殊变量的三种输出

    ----- 020-3outputs.php ----- <!DOCTYPE html> <html> <head> <meta http-equiv=&qu ...

  5. Spring代理

    概述 代理(Proxy)是一种设计模式, 提供了对目标对象另外的访问方式:即通过代理访问目标对象. 这样好处: 可以在目标对象实现的基础上,增强额外的功能操作.(扩展目标对象的功能). 举例:假设某用 ...

  6. Maven 进阶

    一.Maven 版本管理 Maven 的推荐版本号约定为:主版本号.次版本号.增量版本号-<里程碑版本> 开发中的版本要以 -SNAPSHOT 结尾,因为这种快照版本是支持 jar 包被覆 ...

  7. CentOS7 下安装 iSCSI Target(tgt) ,使用 Ceph rbd

    目录 一.iSCSI 介绍 1. iSCSI 定义 2. 几种常见的 iSCSI Target 3. 优缺点比较 二.安装步骤 1. 关闭防火墙 2. 关闭selinux 3. 通过 yum 安装 t ...

  8. 了解Spring-boot-starter常用依赖模块

    Spring-boot的优点: 1.Spring框架的“约定优先于配置(COC)”理念以及最佳实践. 2.针对日常企业应用研发各种场景的Spring-boot-starter自动配置依赖模块,且“开箱 ...

  9. linux sticky

    文件的粘滞位(sticky)位是作什么用的? 普通文件的sticky位会被linux内核忽略, 目录的sticky位表示这个目录里的文件只能被owner和root删除 粘着位(Sticky bit) ...

  10. react高阶组件的理解

    [高阶组件和函数式编程] function hello() { console.log('hello jason'); } function WrapperHello(fn) { return fun ...