我正在尝试使用外部文件中的数据更新PostGIs几何列.某些多边形中的点数超过35k,并且ST_GeomFromText方法不起作用,因为文本字符串太长.我可以将这些点读入Polygon对象,我想做的事情如下:

PreparedStatement ps = conn.preparedStatment("update x set y = ? where z = ?");

ps.setBinary(1, polygon);

ps.setString(2, key);

ps.executeUpdate();

我还没有找到关于如何做到这一点的任何例子.有人可以指点我的文档或举一个我可以遵循的例子吗?

谢谢

解决方法:

所以,我做了一些测试,并为了你的利益掀起了下面的例子.我也刚刚将其作为GIST on Github提供,随意克隆和探索.

首先,这是我在新数据库gis_data中创建的表的DDL,该数据库构建在template_postgis数据库模板上:

CREATE TABLE sample_table

(

"key" character varying(20) NOT NULL,

large_poly geometry NOT NULL,

CONSTRAINT simple_pl PRIMARY KEY (key)

)

此表用于我的Java示例,如下所示.请务必使用您的凭据修改DriverManager.getConnection()行.

import java.sql.*;

import java.util.*;

import java.lang.*;

import org.postgis.*;

public class JavaGIS {

public static void main(String[] args) {

java.sql.Connection conn;

try {

Class.forName("org.postgresql.Driver");

String url = "jdbc:postgresql://localhost:5432/gis_data";

conn = DriverManager.getConnection(url, "postgres", "");

((org.postgresql.PGConnection)conn).addDataType("geometry",Class.forName("org.postgis.PGgeometry"));

((org.postgresql.PGConnection)conn).addDataType("box3d",Class.forName("org.postgis.PGbox3d"));

Polygon geo = new Polygon(

new LinearRing[] {

new LinearRing(

new Point[] {

new Point(-1.0d, -1.0d, 0.5d),

new Point( 1.0d, -1.0d, 0.0d),

new Point( 1.0d, 1.0d, -0.5d),

new Point(-1.0d, 1.0d, 0.0d),

new Point(-1.0d, -1.0d, 0.5d)

}

)

}

);

PreparedStatement s = conn.prepareStatement("INSERT INTO sample_table (key_value, large_poly) VALUES (?, ?)");

s.setString(1, "poly1");

s.setObject(2, new PGgeometry(geo));

int rows = s.executeUpdate();

if (rows > 0) {

System.out.println(" Successful insert! ");

} else {

System.out.println(" Failed insert!");

}

s.close();

Statement qs = conn.createStatement();

ResultSet r = qs.executeQuery("SELECT key_value, large_poly FROM sample_table");

while( r.next() ) {

/*

* Retrieve the geometry as an object then cast it to the geometry type.

* Print things out.

*/

String key = r.getString(1);

PGgeometry geom = (PGgeometry)r.getObject(2);

if (geom.getGeoType() == Geometry.POLYGON) {

System.out.println("Found a polygon with key " + key);

} else {

System.out.println("Found a PostGIS geometry object " + geom.getGeoType() + " having key " + key);

}

}

qs.close();

conn.close();

}

catch( Exception e ) {

e.printStackTrace();

}

}

}

这个例子主要基于PostGIS example,它说明选择如此精美和简单.插入也很简单,因为PostGIS在扩展上做了很多工作.

如果您已经在PostGIS Geometry对象中拥有数据,请在我的示例中执行此操作并将其包装在PGgeometry对象中以插入数据库.这将让数据库驱动程序处理它的传输方式(可能是二进制数据).一旦我真正关注instructions on how to construct Polygons,一切都很顺利.

免责声明:我只用简单的多边形试过这个,但原则是合理的.让我知道你正在处理的非常大的多边形是怎么回事!

标签:java,jdbc,postgis

来源: https://codeday.me/bug/20190722/1507363.html

java polygon 用法_从Polygon对象的Java中更新几何图形相关推荐

  1. java class类型参数_使用Class对象实例化Java类型参数/ generic

    如何实例化Java泛型对象,该对象仅接受类或参数给出的类型参数宾语? 例如: 通常,可以使用以下语法实例化Integer对象的ArrayList: ArrayList foo = new ArrayL ...

  2. java future用法_纯干货:Java学习过程中的21个知识点和技术点

    我们在Java学习过程中要学会抓重点,善于总结,Java学习过程中常见的21个知识点和技术点你知道吗?下面和千锋广州小编一起来看看吧! 1. JVM相关 对于刚刚接触Java的人来说,JVM相关的知识 ...

  3. java future用法_你必须掌握的 21 个 Java 核心技术

    作者:工程师-搁浅来源:https://www.jb51.net/article/122070.htm 写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知 ...

  4. java hashmap用法_备战金九银十:Java核心技术面试题100+,助你搞定面试官

    一线互联网公司工作了几年,我作为求职者参加了不少面试,也作为面试官面试了很多同学,整理这份面试指南,一方面是帮助大家更好的准备面试,有的放矢,另一方面也是对自己知识框架做一个体系化的梳理. 这篇文章梳 ...

  5. java 句柄池_深入理解JVM之Java对象的创建、内存布局、访问定位详解

    本文实例讲述了深入理解JVM之Java对象的创建.内存布局.访问定位.分享给大家供大家参考,具体如下: 对象的创建 一个简单的创建对象语句Clazz instance = new Clazz();包含 ...

  6. java optional 用法_理解、学习与使用Java中的Optional

    从Java8 引入的一个很有趣的特性是Optional类.Optional类主要解决的问题是臭名昭著的空指针异常(NullPointerException) -- 每个 Java 程序员都非常了解的异 ...

  7. java expression 用法_浅析Java 8新特性Lambda Expression

    什么是Lambda Expression 对于Lambda Expression,我的理解是,它是一个函数表达式,如下: (int x, int y) -> x - y 符号左边定义了函数的输入 ...

  8. java sortedlist 用法_为什么Java中没有SortedList?

    本文翻译自:Why is there no SortedList in Java? In Java there are the SortedSet and SortedMap interfaces. ...

  9. java核心面试_不正确的核心Java面试答案

    java核心面试 总览 在Internet上,Java面试问题和答案从一个网站复制到另一个网站. 这可能意味着错误或过时的答案可能永远不会得到纠正. 这是一些不太正确或已经过时的问题和答案. 即是Ja ...

最新文章

  1. 测序发展史,150年的风雨历程 (第二版)
  2. php mysql study_phpStudy 升级 MySQL5.7
  3. BOM事件对象even
  4. 可由一个尾指针唯一确定的链表有_2013-2014学年二学期数据结构期末考试试卷(3卷)...
  5. WinForm给ComboBox增加Value(转)
  6. AssertJ的SoftAssertions –我们需要它们吗?
  7. Java BigInteger类| 带示例的shiftLeft()方法
  8. ubuntu rpm安装_为什么说Ubuntu是一个值得尊敬的Linux发行版
  9. Mac OSX 下高效安装 homebrew 及完美避坑姿势
  10. v-if 的区别v-show
  11. css垂直居中怎么设置?文字上下居中和图片垂直居中
  12. Python 分析Nginx 日志并存入MySQL数据库(单线程)
  13. 指定selenium chrome下载文件路径
  14. 内存碎片是什么?关于内存碎片的解释
  15. RabbitMQ使用规范
  16. Python语言特色集锦
  17. windows 命令行 通过驱动名删除打印机
  18. 论文阅读_基于知识图谱的约束性问答
  19. HDU 6194 题解报告
  20. percona-tool文档说明(5)- 复制类

热门文章

  1. 盘点那些多倍积分的银行卡
  2. Android 屏幕适配终结者
  3. 建立时间和保持时间概念
  4. 《心田上的百合花》阅读理解题:心田花开——含答案
  5. Docker 核心技术(2)- helloworld 镜像
  6. 你不知道的javascript读书笔记
  7. 一篇快速解决Nginx Post请求405 (Not Allowed)异常的方案
  8. Edxposed学习研究(四)Magisk(面具)源码下载编译详细实战教程
  9. 【转】Ogitor中Gizmo的绘制技巧 - 战魂小筑 - C++博客
  10. sap 寄售业务流程