postgis java_PostGIS之Java入门
相关的功能也可以使用jts.jar包实现
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Before;
import org.junit.Test;
import org.postgresql.geometric.PGcircle;
import org.postgresql.geometric.PGpoint;
public class GeometricTest {
private Connection conn;
@Before
public void init() throws Exception {
Class.forName("org.postgresql.Driver");
String url = "jdbc:postgresql://localhost:5432/postgis";
conn = DriverManager.getConnection(url, "username", "password");
Statement stmt = conn.createStatement();
stmt.execute("CREATE TEMP TABLE geomtest(mycirc circle)");
stmt.close();
}
public void destroy() throws SQLException {
if (conn != null) {
conn.close();
}
}
@Test
public void insertCircle() throws SQLException {
PGpoint center = new PGpoint(1, 2.5);
// PGpolygon polygon = new PGpolygon(points);
double radius = 4;
PGcircle circle = new PGcircle(center, radius);
PreparedStatement ps = conn.prepareStatement("INSERT INTO geomtest(mycirc) VALUES (?)");
ps.setObject(1, circle);
ps.executeUpdate();
ps.close();
}
@Test
public void retrieveCircle() throws SQLException {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT mycirc, area(mycirc) FROM geomtest");
rs.next();
PGcircle circle = (PGcircle) rs.getObject(1);
double area = rs.getDouble(2);
// PG
PGpoint center = circle.center;
double radius = circle.radius;
System.out.println("Center (X, Y) = (" + center.x + ", " + center.y + ")");
System.out.println("Radius = " + radius);
System.out.println("Area = " + area);
}
@Test
public void getWKTFromGEOM() throws SQLException {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ST_AsText(geom) FROM sheng where name = '新疆维吾尔自治区'");
rs.next();
String wkt = rs.getString(1);
System.out.println(wkt);
}
@Test
public void getWKBFromGEOM() throws SQLException {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ST_AsBinary(geom) FROM sheng");
rs.next();
String wkt = rs.getString(1);
System.out.println("wkt = " + wkt);
}
@Test
public void getEWKTFromGEOM() throws SQLException {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ST_AsEWKT(geom) FROM sheng");
rs.next();
String wkt = rs.getString(1);
System.out.println("wkt = " + wkt);
}
@Test
public void getBufferFromGEOM() throws SQLException {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ST_AsEWKT(ST_Buffer(geom, 0.2)), ST_AsEWKT(geom) FROM sheng where id = 1");
rs.next();
String wkt = rs.getString(1);
String wkt2 = rs.getString(2);
//System.out.println("tt " + wkt.substring(0, 100));
//System.out.println("tt " + wkt2.substring(0, 100));
}
/**
* 需要在postGis中模拟一个dual表(注意指明空间字段)
*/
@Test
public void getBufferFromWKT() throws SQLException {
// 新疆维吾尔自治区
String wkt = PropertiesUtility.getInstance().findFileValue("system.properties", "wkt");
long startTime = new java.util.Date().getTime();
System.out.println(startTime);
String sql = "SELECT ST_AsText(ST_Buffer(st_geomfromtext('" + wkt + "'), 0.2)) FROM dual";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
rs.next();
long endTime = new java.util.Date().getTime();
System.out.println(endTime);
System.out.println("缓冲时间:" + (endTime - startTime));
System.out.println("坐标点数:" + wkt.split(",").length);
}
/**
* 根据指定的缓冲距离进行缓冲,以米为单位
*/
@Test
public void getBufferFromWKT2() throws SQLException {
// 新疆维吾尔自治区 wkt=MULTIPOLYGON(((79.036744 34.3364.............
String wkt = PropertiesUtility.getInstance().findFileValue("system.properties", "wkt");
long startTime = new java.util.Date().getTime();
System.out.println(startTime);
// 缓冲距离为10.8KM
String sql = "SELECT ST_AsText(st_transform(st_setsrid(ST_Buffer(st_transform(st_setsrid(st_geomfromtext('" + wkt
+ "'), 4326), 2333), 10800), 2333), 4326)) FROM dual";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
rs.next();
String resultWKT = rs.getString(1);
System.out.println(resultWKT);
long endTime = new java.util.Date().getTime();
System.out.println(endTime);
System.out.println("缓冲时间:" + (endTime - startTime));
System.out.println("坐标点数:" + wkt.split(",").length);
}
// 判断点是否在多边形内
@Test
public void getWithin() throws SQLException {
Statement stmt = conn.createStatement();
String sql = "SELECT name FROM sheng where ST_Within(ST_MakePoint(116.561, 40.276), geom)";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
String wkt = rs.getString(1);
System.out.println(wkt);
}
}
}
postgis java_PostGIS之Java入门相关推荐
- Java入门培训班怎么选择
想要学习java技术,小编一直给小伙伴推荐的是报班学习,目前市面上的java培训机构有很多,对于java培训班的选择很多小伙伴都比较迷茫,下面小编就为大家详细的介绍一下Java入门培训班怎么选择的问题 ...
- Java入门学习注意事项有哪些?
想要学好java技术,做好学习规划路线和注意事项是非常重要的,尤其是零基础学员,Java涉及到的知识点非常多,我们需要制定合理的Java学习路线图,这样会事半功倍,下面小编和大家总结一下Java入门学 ...
- Java实用教程笔记 Java入门
Java入门 JDBC Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新 ...
- Java入门(一):Hello World !
前言 从今天开始,准备写Java Web开发的系列文章,毕竟自己主攻的还是Java方向,Python只是业余学习的兴趣使然,在第二技能还没有培养成熟前,做好第一技能的巩固和提高是很有必要的.从正式入行 ...
- 《Java入门经典(第7版)》—— 6.11 练习
本节书摘来异步社区<Java入门经典(第7版)>一书中的第6章,第6.11节,作者:[美]Rogers Cadenhead(罗格斯 卡登海德),更多章节内容可以访问云栖社区"异步 ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
2019独角兽企业重金招聘Python工程师标准>>> 什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能 ...
- 【极客学院每日1课 】Java入门与常用技巧
2019独角兽企业重金招聘Python工程师标准>>> Java是Android开发者必学的基础编程语言.你的基础怎么样? 遥想当年,小乔还未出嫁,小编在大学里面,啃书本,听教授在课 ...
- Java必备:java入门、java学习
2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为北京尚学堂原创文章,未经允许不得转载. 1.Java入门 1-1.Java具有那些适合在Internet环境中 ...
- Java入门学习笔记[狂神说Java]
写在前面: 本文根据B站狂神说Java 与菜鸟教程 整理而来,仅供个人学习使用,如有侵权,请联系删除. 文章目录 IDEA使用 Java基础01:注释 Java基础02:数据类型 Java基础03:类 ...
最新文章
- 【转】VMware虚拟机中CentOS设置固定IP
- 拼接多个 wchar_t *
- C++: 构造函数和析构函数
- Spring中获取bean
- 动态规划——最长公共子序列(LCS)
- Spring Boot 系列(五)web开发-Thymeleaf、FreeMarker模板引擎
- 魔术方法php,PHP中常用的魔术方法
- android media apex_APEX英雄主播即将登陆时代广场?人气十强介绍!
- Java常见面试题:常用 GC 调优策略有哪些?
- android 修改listview item view 的方法
- 【Windows socket+IP+UDP+TCP】网络基础
- 自主创新生态圈再扩大,深度科技与金格科技完成产品兼容性认证
- 第二十七篇 -- 学习第四十五天打卡20190810
- 求两个数的最小公倍数(C语言)
- Linux编辑器-vim的使用的 “打字练习“
- SVL - 共享VLAN学习模式
- 将android程序写入内存,android中将数据写入手机内存和sdcard中的文件
- Java 12 来了,我们应该采用嘛?
- Python异步: 什么时候使用异步?(3)
- 华为鸿蒙操作系统有哪些特点和优势?余承东《全场景时代 新体验与新生态》演讲全文
热门文章
- 【图像分割】基于FLICM算法实现图像分割含Matlab源码
- mysql如何直接打开表_Navicat for MySQL:如何打开 MySQL 表,需要技巧
- latex 附录 表格 公式 重新编号
- Lombok 插件如何使用
- 计算机基础集体备课教研记录,集体备课教研活动记录基础会计教学的集体备课与教研...
- 如何修改Kali和Centos7的ip
- unity中[SerializeField]特性以及Inspectors中变量的操作
- html怎么在手机打不开,手机打不开(进不去)路由器设置网址怎么办?
- 使用阈值调优改进分类模型性能
- matlab中结束脚本运行_MBD开发过程中的持续集成应用