gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:17:47 26 4
gpt4 key购买 nike

我的问题很基本。我正在使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com