• 与postgis相关的一些常用的sql


    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

  • 相关阅读:
    VMware Workstation 6.0 正式版公布
    KMyMoney:全体理财好管家
    Bugzilla 3.0 公布
    Brightside:切换工作区的小东西
    QTM-Blogging 客户端
    MDF2ISO-将 MDF 转换为 ISO
    Yakuake 2.8 beta1
    Red Hat 的 Liberation 字体
    Dictman:有效的词典呆板人
    digiKam 0.9.2 Beta 1
  • 原文地址:https://www.cnblogs.com/lwmp/p/6845509.html
Copyright © 2020-2023  润新知