create table NODES (ID SERIAL not null,geometry geography(POINTZ, 4326) null);
create table EDGES (ID SERIAL not null,geometry geography(LINESTRINGZ, 4326) null);


insert into nodes(geometry) values(ST_GeographyFromText('SRID=4326; POINT(-110 30 40)'));
insert into edges(geometry) values(ST_GeographyFromText('SRID=4326; LINESTRING(-110 30 40,11 22 33)'));

alter table public.nodes alter column geometry set data type geography(PointZ,4326);

select ST_AsText(geometry) from nodes;
select ST_AsText(geometry) from edges;

  注意!!!!注意!!!!!

上面的字段geometry的数据类型是有问题的,我当时也是随便找了个博客一看就按照人家的写上了,然后现在我被坑哭了。。。。

geography应该是表示经纬度的数据类型,经过亲身经历发现,x的范围只有(-180,180),y的范围只有(-90,90),超出范围之后,数据就会和实际存储的不同,会被一定的算法转换

 

所以真正的3D几何类型为

 

create table NODES (ID SERIAL not null,geometry geometry(POINTZ, 4326) null);
create table EDGES (ID SERIAL not null,geometry geometry(LINESTRINGZ, 4326) null);
 
 
insert into nodes(geometry) values(ST_GeomFromEWKT('SRID=4326; POINT(-110 30 40)'));
insert into edges(geometry) values(ST_GeomFromEWKT('SRID=4326; LINESTRING(-110 30 40,11 22 33)'));
 
alter table public.nodes alter column geometry set data type geography(PointZ,4326);
 
select ST_AsText(geometry) from nodes;
select ST_AsText(geometry) from edges;

惭愧,惭愧,当时照搬的时候甚至都没有想过geography是什么意思。。。哎。。╮(╯▽╰)╭

需要注意的是插入的时候 ST_GeomFromEWKT 和 GeomFromEWKT  都可以,我还没发现他们的区别,为了统一,我暂时使用的是 ST_GeomFromEWKT

相关文章:

  • 2021-07-27
  • 2022-12-23
  • 2021-08-02
  • 2021-08-03
  • 2022-12-23
  • 2022-01-31
猜你喜欢
  • 2022-02-25
  • 2021-09-13
  • 2021-12-12
  • 2021-12-08
  • 2022-12-23
  • 2022-12-23
  • 2021-08-31
相关资源
相似解决方案