我正在为地理空间应用程序构建后端。它涉及纬度,经度和海拔的存储(可选)。
表格中的Location
列的类型为Location geography(POINtZ,4326)
插入声明
"INSERT INTO someTable (Location) VALUES(ST_GeographyFromText('SRID=4326;POINT(?)');
我在插入3d点(用String格式)代替"?"时没有问题,但是我如何处理我只有经度和纬度的情况?出于显而易见的原因,我不想操纵位置字符串以将第三个值(高度)设置为零。
我希望有人可以帮我解决这个问题。
提前致谢。
答案 0 :(得分:1)
PostGIS功能只能支持特定维度,并且不灵活,第三个坐标是可选的,我继续坚持将数据类型Location
作为PointZ并检查维度位置。
如果发现该点是2D,则位置字符串附加一个垃圾值,如-34567891
,以避免插入错误和位置检索时,请注意解析这些类型的位置点。
答案 1 :(得分:0)
您的列是3d点类型(POINTZ)。这就是为什么你必须提供3d点。我认为有两种方法可以解决您的问题:
1.使用以下内容将列转换为geometry(point, 4326)
(2d点)类型:
alter table someTable
alter Location type geometry(point, 4326)
using st_force2d(Location);
然后你就可以插入2d点了。
2.修改您的插入查询,如下所示:
INSERT INTO someTable (Location)
VALUES(st_force3d(ST_GeographyFromText('SRID=4326;POINT(?)'));.
在这种情况下,你将它传递给2d点,查询会将其转换为3d点,使用零作为第三维。
如果z-dimension的零值不是一个选项,那么您可以在表格中有一列来显示几何体的尺寸。例如:
alter table someTable add geomdim int;
然后在插入时用当前尺寸填充它。例如:
with geom_t as (
select st_geomfromtext('POINT(?)', 4326) as geom
)
insert into someTable(Location, geomdim)
select st_force3d(geom)::geography, st_coorddim(geom) from geom_t;