java polygon 用法_从Polygon对象的Java中更新几何图形
我正在嘗試使用外部文件中的數(shù)據(jù)更新PostGIs幾何列.某些多邊形中的點(diǎn)數(shù)超過(guò)35k,并且ST_GeomFromText方法不起作用,因?yàn)槲谋咀址L(zhǎng).我可以將這些點(diǎn)讀入Polygon對(duì)象,我想做的事情如下:
PreparedStatement ps = conn.preparedStatment("update x set y = ? where z = ?");
ps.setBinary(1, polygon);
ps.setString(2, key);
ps.executeUpdate();
我還沒(méi)有找到關(guān)于如何做到這一點(diǎn)的任何例子.有人可以指點(diǎn)我的文檔或舉一個(gè)我可以遵循的例子嗎?
謝謝
解決方法:
所以,我做了一些測(cè)試,并為了你的利益掀起了下面的例子.我也剛剛將其作為GIST on Github提供,隨意克隆和探索.
首先,這是我在新數(shù)據(jù)庫(kù)gis_data中創(chuàng)建的表的DDL,該數(shù)據(jù)庫(kù)構(gòu)建在template_postgis數(shù)據(jù)庫(kù)模板上:
CREATE TABLE sample_table
(
"key" character varying(20) NOT NULL,
large_poly geometry NOT NULL,
CONSTRAINT simple_pl PRIMARY KEY (key)
)
此表用于我的Java示例,如下所示.請(qǐng)務(wù)必使用您的憑據(jù)修改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();
}
}
}
這個(gè)例子主要基于PostGIS example,它說(shuō)明選擇如此精美和簡(jiǎn)單.插入也很簡(jiǎn)單,因?yàn)镻ostGIS在擴(kuò)展上做了很多工作.
如果您已經(jīng)在PostGIS Geometry對(duì)象中擁有數(shù)據(jù),請(qǐng)?jiān)谖业氖纠袌?zhí)行此操作并將其包裝在PGgeometry對(duì)象中以插入數(shù)據(jù)庫(kù).這將讓數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序處理它的傳輸方式(可能是二進(jìn)制數(shù)據(jù)).一旦我真正關(guān)注instructions on how to construct Polygons,一切都很順利.
免責(zé)聲明:我只用簡(jiǎn)單的多邊形試過(guò)這個(gè),但原則是合理的.讓我知道你正在處理的非常大的多邊形是怎么回事!
標(biāo)簽:java,jdbc,postgis
來(lái)源: https://codeday.me/bug/20190722/1507363.html
總結(jié)
以上是生活随笔為你收集整理的java polygon 用法_从Polygon对象的Java中更新几何图形的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 速达软件商品流通企业解决方案
- 下一篇: 老鸟谈谈JAVA EE的学习