首页 > 数据库 >PgSql - PostGIS 在 PostgreSQL 中使用

PgSql - PostGIS 在 PostgreSQL 中使用

时间:2023-10-21 13:55:22浏览次数:40  
标签:PostgreSQL EXTENSION postgis ST PgSql geom PostGIS

首先来介绍一下 PostGIS 是什么?
PostGIS 是 PostgreSQL 对象关系数据库的一个空间数据库扩展。它增加了对地理对象的支持,允许在SQL中运行位置查询。

官方介绍:

PostGIS:Spatial and Geographic objects for PostgreSQL

PostGIS is a spatial database extender for PostgreSQL object-relational database. It adds support for geographic objects allowing location queries to be run in SQL.

SELECT superhero.name
FROM city, superhero
WHERE ST_Contains(city.geom, superhero.geom)
AND city.name = 'Gotham';

In addition to basic location awareness, PostGIS offers many features rarely found in other competing spatial databases such as Oracle Locator/Spatial and SQL Server.

安装
不同系统不同安装方式 不再此处展开讲

背景
公司新项目需要在系统中整合gis图,之前没有接触过,特此开一篇文章来讲解学习,后续持续更新。

启用
PostGIS 是一个可选扩展,在你想使用它之前必须在每个数据库中启用它,然后才能使用它。

通过 psql 或 PgAdmin 连接你的数据库,然后运行下面SQL

-- Enable PostGIS (as of 3.0 contains just geometry/geography)
CREATE EXTENSION postgis;
-- Enable Topology
CREATE EXTENSION postgis_topology;

*** 注意:不要在 postgres 数据库中启用

升级
升级到最新版本

ALTER EXTENSION postgis UPDATE;
ALTER EXTENSION postgis_topology UPDATE;

或指定版本升级

ALTER EXTENSION postgis
UPDATE TO "3.1.0";
-- Upgrade Topology
ALTER EXTENSION postgis_topology
UPDATE TO "3.1.0";

使用
首先,创建一个带有空间列的表

CREATE TABLE mytable (
id SERIAL PRIMARY KEY,
geom GEOMETRY(Point, 26910),
name VARCHAR(128)
);

解释 :个人理解 安装完PostGis扩展后 pg库支持了 GEOMETRY 类型 特殊类型。

然后添加空间索引

CREATE INDEX mytable_gix
ON mytable
USING GIST (geom);

插入测试数据

INSERT INTO mytable (geom) VALUES (
ST_GeomFromText('POINT(0 0)', 26910)
);

解释:通过ST_GeomFromText存储 特殊的几何数据/点位数据。

查询附近的点

SELECT id, name
FROM mytable
WHERE ST_DWithin(
geom,
ST_GeomFromText('POINT(0 0)', 26910),
1000
);
————————————————
版权声明:本文为CSDN博主「Aliang!」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Hyl_Aa/article/details/131520215

标签:PostgreSQL,EXTENSION,postgis,ST,PgSql,geom,PostGIS
From: https://www.cnblogs.com/telwanggs/p/17778872.html

相关文章

  • postgresql【JSONB用法】
    //userNametypecode是我拿到数据结构出来的可以写固定值来测试;code字段为上面设置的唯一约束。如果code值没有变就是修改,否则就是新增INSERTINTO表名(username,type,code)VALUES('${userName}','${type}','${code}')ONCONFLICT9.6语法支持(code)DOUPDATE......
  • 深入了解 PostgreSQL:功能、特性和部署
    PostgreSQL,通常简称为Postgres,是一款强大且开源的关系型数据库管理系统(RDBMS),它在数据存储和处理方面提供了广泛的功能和灵活性。本文将详细介绍PostgreSQL的功能、特性以及如何部署和使用它。什么是PostgreSQL?PostgreSQL是一款开源的、免费的关系型数据库管理系统。它具有以下......
  • PostgreSQL查询约束和创建删除约束
    查询约束SELECTtc.constraint_name,tc.table_name,kcu.column_name,ccu.table_nameASforeign_table_name,ccu.column_nameASforeign_column_name,tc.is_deferrable,tc.initially_deferredFROMinformation_schema.table_constraintsAStc......
  • 修改Postgresql默认账号postgres的密码
    1.修改用户postgres的密码PostgreSQL数据库默认创建管理员账号:postgres;修改其密码,仅需一下三步:1、首先,登录PostgreSQLsudo-upostgrespsqlpostgres-p54322、然后,修改账号postgres的密码ALTERUSERpostgresWITHPASSWORD'Lpf65BsDhDNdaJmH';      (---一定......
  • Ubuntu下PostgreSQL开启远程访问(解决postgresql 端口不对外开放问题)
    修改配置文件:sudovim/etc/postgresql/9.5/main/pg_hba.conf,在文件中添加 hostallall0.0.0.0/0md5。all :匹配任何IP地址。0.0.0.0/0:对于所有IPv4地址,允许任何ip地址以任何用户身份连接任何数据;::0/0:对于所有IPv6地址。md5:加密方式。·修改 postgresql.conf:执......
  • PostgreSql使用中遇到的问题
    PostgreSql使用中遇到的问题:持续更新注意:pq中null和空字符串是完全没啥关系的。如果要判断字段是否有值,在不确定是null或者是空字符串时,就用length(field)>01.如果ddl中定义的字段名是大写的,那么查询字段名就要带""  eg:SELECT"LegalOrgID","PID","LegalOrgSNam......
  • postgreSQL基本操作
    一、使用psql工具连接到数据库psql-Upostgres#postgres是具体的用户名,应具体情况具体分析效果如图:二、有关于数据库的基本指令pg不同于mysql,它的指令更为精简1、获取所有数据库信息\l2、选定数据库\c${yourdatebasename}3、获取所有表的信息\dt#此指令需......
  • 转载 https://www.cnblogs.com/star521/p/13385181.html --PGSQL-脏数据清理,频繁de
    查看表大小--查出所有表(包含索引)并排序--查出所有表(包含索引)并排序SELECTtable_schema,table_nameAStable_full_name,pg_size_pretty(pg_total_relation_size('"'||table_schema||'"."'||table_name||'"'))ASsizeFROMinfor......
  • pgsql sql语句参数量太多报错
    批量入库pgsql的时候,发现pgsql一次只能传3万多参数,要么改数据库链接url的参数要么分批次的批量插入。 分批次批量插入: 1intlimit;//要切割成多少份2intMAX_NUMBER;//每份最多多少条数据34List<List<Integer>>splitList=Stream.iterate(0,n->n+1).......
  • The database cluster initialisation failed but was not the same version as ini
    问题:不论装哪个版本的postgresql,都报Theprogram"postgres"wasfoundby".../initdb.exe"butwasnotthesameversionasinitdb.和Thedatabaseclusterinitialisationfailed的错误。过程:1设置目录权限无效2更后版本无效3更改目录的路径无效最后解决:根据网......