如何基于PolarDB-PG处理空间数据

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
简介: 《PolarDB for PostgreSQL动手实践》系列,带您体验基于PolarDB for PostgreSQL部署开源空间处理插件PostGIS,并执行空间查询。

如何基于PolarDB-PG处理空间数据

1. 创建资源

开始实验之前,您需要先创建实验相关资源。

  1. 在实验室页面,单击创建资源
  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。

说明:资源创建过程需要3~5分钟视资源不同开通时间有所差异,ACK等资源开通时间较长。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。

实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息


2. 创建PolarDB for PostgreSQL

首先创建PolarDB for PostgreSQL实例,这里我们利用Docker创建单机版实例。本步骤执行时间较长,请耐心等待。

  1. 设置yum镜像源并通过yum安装docker
yum install -y yum-utils
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
  1. 启动docker并拉取polardb-pg的单机版镜像
systemctl start docker
docker pull polardb/polardb_pg_local_instance:single
  1. 基于docker镜像启动一个docker容器,容器中自带一个polardb的实例,我们后续的操作都在容器中进行
docker run \
    -it --cap-add=SYS_PTRACE --privileged=true \
    --name polardb_pg_single \
    polardb/polardb_pg_local_instance:single \
    bash


3. 下载和安装PostGIS

  1. 本步骤以及之后的操作都在docker容器中执行,请确定命令行开头为 postgres@xxxxxx, 如果是root@xxx,请重新执行第一步的最后一条命令进入docker
docker run \
    -it --cap-add=SYS_PTRACE --privileged=true \
    --name polardb_pg_single \
    polardb/polardb_pg_local_instance:single \
    bash
  1. 下载PostGIS源码,这里我们下载3.1.8版本源码并解压。
wget https://labfileapp.oss-cn-hangzhou.aliyuncs.com/database/postgis-3.1.8.tar.gz
tar -xzvf postgis-3.1.8.tar.gz
  1. 安装PostGIS编译所需的依赖库。
sudo apt install -y libgeos-dev libproj-dev libgdal-dev libxml2-dev libjson-c-dev libprotoc-dev libprotobuf-dev libprotobuf-c-dev protobuf-compiler protobuf-c-compiler
  1. 编译和安装PostGIS。
cd postgis-3.1.8
./configure
make -j4
make install


4. 在数据库中安装插件和存储空间数据

  1. 通过psql工具连接数据库。
psql
  1. 安装PostGIS插件。
CREATE EXTENSION postgis;
  1. 插入一份道路数据。
CREATE TABLE roads (
    road_id SERIAL PRIMARY KEY,
    road_name VARCHAR(64),
    road_geom geometry(LINESTRING,3005)
  );
BEGIN;
INSERT INTO roads (road_id, road_geom, road_name)
  VALUES (1,'SRID=3005;LINESTRING(191232 243118,191108 243242)','Jeff Rd');
INSERT INTO roads (road_id, road_geom, road_name)
  VALUES (2,'SRID=3005;LINESTRING(189141 244158,189265 244817)','Geordie Rd');
INSERT INTO roads (road_id, road_geom, road_name)
  VALUES (3,'SRID=3005;LINESTRING(192783 228138,192612 229814)','Paul St');
INSERT INTO roads (road_id, road_geom, road_name)
  VALUES (4,'SRID=3005;LINESTRING(189412 252431,189631 259122)','Graeme Ave');
INSERT INTO roads (road_id, road_geom, road_name)
  VALUES (5,'SRID=3005;LINESTRING(190131 224148,190871 228134)','Phil Tce');
INSERT INTO roads (road_id, road_geom, road_name)
  VALUES (6,'SRID=3005;LINESTRING(198231 263418,198213 268322)','Dave Cres');
COMMIT;


5. 执行空间查询

  1. 查询全部数据。
SELECT road_id, ST_AsText(road_geom) AS geom, road_name FROM roads;
  1. 创建索引,加速相交查询。
CREATE INDEX on roads USING gist(road_geom);
  1. 查询和一个矩形框相交的数据。
SELECT ST_AsText(road_geom) AS geom
FROM roads
WHERE
  road_geom && ST_MakeEnvelope(191232, 243117,191232, 243119);
  1. 查询道路的总长度。
SELECT SUM(ST_Length(road_geom)) FROM roads;


6. 执行空间分析

PostGIS支持多种空间分析操作,这里以使用DBSCAN进行密度聚类为例。

  1. 创建测试数据集。
CREATE TABLE cluster_pnts (id int, geom geometry);
INSERT INTO cluster_pnts VALUES
(0, NULL),
(1, 'POINT (0 0)'),
(2, 'POINT (0 1)'),
(3, 'POINT (-0.5 0.5)'),
(4, 'POINT (1 0)'),
(5, 'POINT (1 1)'),
(6, 'POINT (1.0 0.5)'),
(7, 'POINT EMPTY'),
(8, NULL),
(9, 'POINT (0 0)'),
(10, 'POINT (0 1)'),
(11, 'POINT (-0.5 0.5)'),
(12, 'POINT (1 0)'),
(13, 'POLYGON((80 80,80 90,90 90,90 80,80 80))');
  1. 执行DBSCAN聚类,其中0.7代表邻域的半径,2代表识别为聚类中心所需的点密度。输出结果的第一列为点的序号,第二列为聚类所属的类的序号。
select id, ST_ClusterDBSCAN(geom, 0.7,2) over () from cluster_pnts;

实验链接:https://developer.aliyun.com/adc/scenario/59c74f426f644ad295f4d6e3e10c68d8

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
5月前
|
存储 关系型数据库 MySQL
亿级数据秒级响应:PolarDB MySQL HTAP实时分析方案设计与压测报告
PolarDB MySQL HTAP方案实现亿级数据秒级响应,支持高并发事务与实时分析。通过行列混存、智能路由与资源隔离,满足电商、金融等场景的实时报表、决策需求,降低架构复杂度与运维成本。
201 6
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
12月前
|
人工智能 关系型数据库 分布式数据库
拥抱Data+AI|“全球第一”雅迪如何实现智能营销?DMS+PolarDB注入数据新活力
针对雅迪“云销通App”的需求与痛点,本文将介绍阿里云瑶池数据库DMS+PolarDB for AI提供的一站式Data+AI解决方案,助力销售人员高效用数,全面提升销售管理效率。
|
SQL 关系型数据库 索引
关系型数据库SQLserver插入数据
【7月更文挑战第28天】
198 4
|
10月前
|
存储 关系型数据库 分布式数据库
PolarDB PG 版冷热数据分层功能介绍
本文介绍了云原生数据库PolarDB PG版的冷热数据分层存储功能,涵盖其原理、特性及最佳实践。冷热分层存储通过将冷数据归档至OSS(对象存储服务),实现低成本高效存储,同时保持SQL操作透明性和性能优化。支持多种分层模式,如表与索引分层、大字段独立归档等,并提供压缩和缓存机制以提升访问速度。此外,还介绍了如何通过DDL语句轻松转存数据至OSS,以及一系列最佳实践,包括自动冷热分层、无锁表转存和一键转存等功能。
596 36
|
9月前
|
SQL 关系型数据库 分布式数据库
PolarDB 开源基础教程系列 7.1 快速构建“海量逼真”数据
本文介绍了如何使用PostgreSQL和PolarDB快速生成“海量且逼真”的测试数据,以满足不同业务场景的需求。传统数据库测试依赖标准套件(如TPC-C、TPC-H),难以生成符合特定业务特征的复杂数据。通过自定义函数(如`gen_random_int`、`gen_random_string`等)、SRF函数(如`generate_series`)和pgbench工具,可以高效生成大规模、高仿真度的数据,并进行压力测试。文中还提供了多个示例代码展示.
250 7
|
9月前
|
人工智能 关系型数据库 分布式数据库
阿里云PolarDB重磅发布云原生与Data+AI新特性,打造智能时代数据引擎
阿里云PolarDB重磅发布云原生与Data+AI新特性,打造智能时代数据引擎
509 0
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
阿里云瑶池在2024云栖大会上重磅发布由Data+AI驱动的多模数据管理平台DMS:OneMeta+OneOps,通过统一、开放、多模的元数据服务实现跨环境、跨引擎、跨实例的统一治理,可支持高达40+种数据源,实现自建、他云数据源的无缝对接,助力业务决策效率提升10倍。
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
阿里云数据库重磅升级!元数据服务OneMeta + OneOps统一管理多模态数据
|
关系型数据库 分布式数据库 数据库
基于PolarDB的图分析:通过表格将数据快速导入到图
本文介绍了使用 PolarDB PostgreSQL兼容版的AGE插件时,在大数据量下,快速导入数据的方法。可以快速将图数据库中亿级以上的节点和边快速导入到数据库中,避免了插入边时进行查询带来的性能瓶颈。

相关产品

  • 云原生数据库 PolarDB