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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
1月前
|
人工智能 关系型数据库 分布式数据库
拥抱Data+AI|“全球第一”雅迪如何实现智能营销?DMS+PolarDB注入数据新活力
针对雅迪“云销通App”的需求与痛点,本文将介绍阿里云瑶池数据库DMS+PolarDB for AI提供的一站式Data+AI解决方案,助力销售人员高效用数,全面提升销售管理效率。
|
5月前
|
SQL 关系型数据库 索引
关系型数据库SQLserver插入数据
【7月更文挑战第28天】
60 4
|
5月前
|
缓存 关系型数据库 分布式数据库
PolarDB产品使用问题之有时会读到表中过去已删除的数据,是什么原因
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
2月前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
阿里云瑶池在2024云栖大会上重磅发布由Data+AI驱动的多模数据管理平台DMS:OneMeta+OneOps,通过统一、开放、多模的元数据服务实现跨环境、跨引擎、跨实例的统一治理,可支持高达40+种数据源,实现自建、他云数据源的无缝对接,助力业务决策效率提升10倍。
|
3月前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
阿里云数据库重磅升级!元数据服务OneMeta + OneOps统一管理多模态数据
|
4月前
|
存储 SQL Cloud Native
揭秘!PolarDB-X存储引擎如何玩转“时间魔术”?Lizard多级闪回技术让你秒回数据“黄金时代”!
【8月更文挑战第25天】PolarDB-X是一款由阿里巴巴自主研发的云原生分布式数据库,以其高性能、高可用性和出色的可扩展性著称。其核心竞争力之一是Lizard存储引擎的多级闪回技术,能够提供高效的数据恢复与问题诊断能力。本文通过一个电商公司的案例展示了一级与二级闪回技术如何帮助快速恢复误删的大量订单数据,确保业务连续性不受影响。一级闪回通过维护最近时间段内历史数据版本链,支持任意时间点查询;而二级闪回则通过扩展数据保留时间并采用成本更低的存储方式,进一步增强了数据保护能力。多级闪回技术的应用显著提高了数据库的可靠性和灵活性,为企业数据安全保驾护航。
55 1
|
4月前
|
关系型数据库 分布式数据库 数据库
基于PolarDB的图分析:通过表格将数据快速导入到图
本文介绍了使用 PolarDB PostgreSQL兼容版的AGE插件时,在大数据量下,快速导入数据的方法。可以快速将图数据库中亿级以上的节点和边快速导入到数据库中,避免了插入边时进行查询带来的性能瓶颈。
|
5月前
|
关系型数据库 MySQL 分布式数据库
PolarDB产品使用问题之在执行ALTER TABLE语句后,备份数据的物理空间占用增加,是什么原因
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
4月前
|
SQL 关系型数据库 数据库

相关产品

  • 云原生数据库 PolarDB