pg入门18—如何使用pg gis

1. 下载postgre gis镜像

2. 运行镜像

复制代码
docker run -p 15432:5432 -d  -e POSTGRES_PASSWORD=Ab123456! postgis/postgis:12-3.4-alpine

3. 使用gis

复制代码
# 进入容器,登录pg

docker exec -it bash

# 登录数据库

psql -U postgres


# 创建数据库

CREATE DATABASE mygeotest;

# 使用mygeotest数据库

/c mygeotest

# 创建gis扩展

CREATE EXTENSION postgis;

###### 存储地点 #######################################################
# 创建表,数据类型为Point

CREATE TABLE places (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    geom GEOGRAPHY(Point, 4326)  -- 使用 WGS 84 坐标系
);


# 插入数据

INSERT INTO places (name, geom)
VALUES ('My Location', ST_GeomFromText('POINT(30 10)', 4326));


# 查询数据

SELECT id, name, ST_AsText(geom) FROM places;


##### 存储路线 #######################################################
# 创建表,数据类型为LINESTRING

CREATE TABLE routes (  id SERIAL PRIMARY KEY,  name VARCHAR(100),  geom GEOMETRY(LINESTRING, 4326) );

# 插入数据

INSERT INTO routes (name, geom)
VALUES ('Route 1', ST_GeomFromText('LINESTRING(30 10, 40 40, 50 50)', 4326));

# 查询数据

SELECT id, name, ST_AsText(geom) FROM routes;



# 存储3维空间信息

# 创建表,数据类型为POINTZ

CREATE TABLE locations (  id SERIAL PRIMARY KEY,   name VARCHAR(100),  geom GEOMETRY(POINTZ, 4326) );

# 插入数据
INSERT INTO locations (name, geom)
VALUES ('Location A', ST_GeomFromText('POINT(30 10 100)', 4326));


# 查询数据

SELECT id, name, ST_AsText(geom) FROM locations;

4. 使用空间函数

PostGIS 提供了许多空间函数,例如计算面积、距离、缓冲区等。例如,计算两点之间的距离:

复制代码
SELECT ST_Distance( ST_GeomFromText('POINT(30 10)', 4326), ST_GeomFromText('POINT(30.1 10.1)', 4326) );

5. 其他功能

  • 空间索引:为了提高查询性能,可以为几何列创建空间索引:

    复制代码
    CREATE INDEX idx_places_geom ON places USING GIST(geom);
  • 支持多种数据类型:PostGIS 支持多种几何类型,包括点、线、多边形等,可以使用这些类型来表示复杂的地理对象。

6. 使用工具和库

你可以使用诸如 QGIS、GeoServer、Leaflet 等工具和库与 PostGIS 数据进行交互,进行可视化和进一步分析。

相关推荐
2301_764150562 小时前
c++如何读取和解析带BOM头的UTF-8与UTF-16文本流【详解】
jvm·数据库·python
qq_424098562 小时前
HTML函数开发用窄边框笔记本有优势吗_便携与性能权衡【指南】
jvm·数据库·python
Wyz201210242 小时前
CSS如何实现导航栏下划线随鼠标移动_利用-hover伪类与过渡动画控制
jvm·数据库·python
2201_761040592 小时前
SQL如何统计每个用户的首次行为时间_MIN聚合与分组
jvm·数据库·python
qq_189807032 小时前
mysql如何实现定时清理缓存数据_利用event scheduler执行
jvm·数据库·python
Polar__Star2 小时前
golang如何实现低功耗设备唤醒机制_golang低功耗设备唤醒机制实现教程
jvm·数据库·python
a9511416422 小时前
CSS怎么在flex布局中实现项目均分间距_设置justify-content space-evenly
jvm·数据库·python
2201_761040592 小时前
Golang如何做灰度发布_Golang灰度发布教程【实战】
jvm·数据库·python
小梦爱安全2 小时前
SQL Server(Linux)安装
数据库·microsoft·sqlserver
baidu_340998822 小时前
CSS Grid布局如何实现项目在网格内填充_掌握justify-items属性
jvm·数据库·python