当前位置:   article > 正文

postgresql与postgis结合示例_postsql与postgis匹配

postsql与postgis匹配

    postgresql支持空间数据存储。

    postgis是postgresql的一个扩展。与postgresql配合使用,需要对应的版本。如果是windows上安装,可以参考这里选择对应的postgis版本。

    如果不安装postgis插件,在进行创建postgis扩展的时候,会报错。

    当我们安装好对应版本的postgis,在postgresql安装目录的share/extension目录下会有一个postgis.control文件,再次创建postgis扩展则会顺利创建。

     如下,开始创建空间数据库表。

  1. testdb=# create table cities(id smallint,name varchar(50));
  2. CREATE TABLE
  3. testdb=# select AddGeometryColumn('cities','the_geom',4326,'POINT',2);
  4. addgeometrycolumn
  5. -----------------------------------------------------
  6. public.cities.the_geom SRID:4326 TYPE:POINT DIMS:2
  7. (1 row)

     向表中插入记录:

  1. testdb=# insert into cities (id,the_geom,name) values (1,ST_GeomFromText('POINT(-0.1257
  2. 51.508)',4326),'London,England'),(2,ST_GeomFromText('POINT(-81.233 42.983)',4326),'London
  3. Ontario'),(3,ST_GeomFromText('POINT(27.91162491 -33.01529)',4326),'East London,SA');
  4. INSERT 0 3

    查看表记录:

  1. testdb=# select * from cities;
  2. id | name | the_geom
  3. ----+----------------+----------------------------------------------------
  4. 1 | London,England | 0101000020E6100000BBB88D06F016C0BF1B2FDD2406C14940
  5. 2 | London Ontario | 0101000020E6100000F4FDD478E94E54C0E7FBA9F1D27D4540
  6. 3 | East London,SA | 0101000020E610000040AB064060E93B4059FAD005F58140C0
  7. (3 rows)

    显示的the_geom列信息是二进制,这里需要借助gis空间函数进行转换。

  1. testdb=# select id,name,ST_AsText(the_geom),ST_AsEwkt(the_geom),ST_X(the_geom),ST_Y(the_geom) from cities;
  2. id | name | st_astext | st_asewkt | st_x | st_y
  3. ----+----------------+------------------------------+----------------------------------------+-------------+-----------
  4. 1 | London,England | POINT(-0.1257 51.508) | SRID=4326;POINT(-0.1257 51.508) | -0.1257 | 51.508
  5. 2 | London Ontario | POINT(-81.233 42.983) | SRID=4326;POINT(-81.233 42.983) | -81.233 | 42.983
  6. 3 | East London,SA | POINT(27.91162491 -33.01529) | SRID=4326;POINT(27.91162491 -33.01529) | 27.91162491 | -33.01529
  7. (3 rows)

    另外一个求距离的函数:

  1. testdb=# SELECT p1.name,p2.name,ST_DistanceSphere(p1.the_geom,p2.the_geom) FROM cities AS p1, cities AS p2 WHERE p1.id > p2.id;
  2. name | name | st_distancesphere
  3. ----------------+----------------+-------------------
  4. London Ontario | London,England | 5875787.03777356
  5. East London,SA | London,England | 9789680.59961472
  6. East London,SA | London Ontario | 13892208.67829283
  7. (3 rows)
  8. testdb=#

    在新版本中,ST_DistanceSphere函数没有第二个下划线。以前的资料可能会提示使用ST_Distance_Sphere,在postgresql14+postgis3.1.4版本中,函数变为了ST_DistanceSphere。使用的时候需要注意。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/589747
推荐阅读
相关标签
  

闽ICP备14008679号