java - 从 Google map 获取坐标并将其插入 PostgreSQL

标签 java android postgresql gis postgis

我的问题很基本。我正在使用 Android Google map 从 map 上的某个位置获取坐标,我想将其插入到 PostgreSQL 数据库中。我知道我必须使用 PostGIS,但我该怎么做呢?谁能指出我正确的方向?

我的 Java 插入查询如下所示:

String query = "INSERT INTO modul (denumire, adresa, tip_retea, geom, poza)";
query += " VALUES ('" 
     + getset.getDenumire() + "', '" 
     + getset.getAdresa() + "', '"
     + getset.getTipretea()+ "', 
     ST_PointFromText('point(" + point.getX() + " " + point.getY()+ ")', 1), '" 
     + getset.getImagine() + "');";

这会生成以下查询:

INSERT INTO modul (denumire, adresa, tip_retea, geom, poza) VALUES ('', '', '', ST_PointFromText('point(23.78977 44.320948)', 1), 'irrelevant b64 encoded image');

但是我怎样才能正确地将坐标插入数据库呢? “geom”列需要是什么数据类型?预先感谢您。

最佳答案

正如 Igor 在评论中指出的那样,您将字符串连接到 SQL 语句的方法对 SQL 注入(inject)是开放的。您可以通过在 Java 中使用准备好的语句来避免这种情况。

//prepare a statement -- omitting the non geometry values from OP question for clarity
String sql = "Insert into modul (geom) values (ST_MakePoint(?, ?))";
PreparedStatement stmt = conn.prepareStatement(sql);
//add the actual x and y values
stmt.setFloat(1, x);
stmt.setFloat(2, y);
stmt.executeUpdate();

请注意,您可以使用 ST_MakePoint作为连接文本值的比使用 ST_PointFromText 更简单的版本。

并且,为了回答最初的问题,类型应该是几何,但如果您仅使用特定的几何类型,则可以使这一点更加明确,并且如果您正在工作,还可以添加空间引用 ID (SRID)为 1,它将充当该列的约束,例如,

CREATE table sometable (id serial, geom geometry(POINT, 4326));

仅允许您插入点和纬度/经度。您还可以将其设置为POLYGONMUTLIPOLYGONLINESTRING等。如果您想更宽松,您可以这样做,

 CREATE table sometable (id serial, geom geometry);

另一种选择是使用 AddGeometryColumn同样,它允许显式声明几何类型和 SRID,并且还添加到元数据 View geometry_columns。

关于java - 从 Google map 获取坐标并将其插入 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26774861/

相关文章:

java - 在 Eclipse 中增加 Java 堆大小 - 使用虚拟内存

Java 日历/日期转 SQL 时间戳/Oracle 数据库

android - 带有关闭按钮的自定义对话框

postgresql - POSTGRES 续写任何运算符查询

mysql - 我是否应该进一步规范化多个表中使用的外键集?

java - 如何修复错误 "Only the original thread that created a view hierarchy can touch its views."

java - 如何在露天查找文件夹然后子文件夹然后打印文件名

java - 应用程序在 Debug模式下运行顺利,但在 Release模式下崩溃

android - AudioTrack 可以播放 MIDI 文件吗?

node.js - 未使用 TypeORM 找到连接 "default"