空间数据库概述
空间数据库存储的不是单一性质的数据,而是涵盖了几乎所有与地理相关的数据类型,这些数据类型主要可以分为 3 类:
(1)属性数据:与通用数据库基本一致,主要用来描述地学现象的各种属性,一般包括数字、文本、日期类型。
(2)图形图像数据:与通用数据库不同,空间数据库系统中大量的数据借助于图形图像来描述。
(3)空间关系数据:存储拓扑关系的数据,通常与图形数据是合二为一的。
空间数据库还具有以下特点。
属性数据和空间数据联合管理。
空间实体的属性数据和空间数据可随时间而发生相应变化。
空间数据的数据项长度可变,包含一个或多个对象,需要嵌套记录。
一种地物类型对应一个属性数据表文件。多种地物类型共用一个属性数据表文件。
具有空间多尺度性和时间多尺度性。
Esri公司的ArcSDE,SDE即Spatial Database Engine,空间数据库引擎。ArcSDE主要支持的数据库包括Oracle,SQL Server,IBM DB2。
https://baike.baidu.com/item/空间数据库/8275107?fr=aladdin
2 MySQL空间数据库
PostgreSQL由于具备PostGIS扩展而在开源GIS中有广泛地应用,可视化工具包括pgAdmin、Quantum GIS(类似ArcGIS Desktop)。
从MySQL4.1开始,也对空间数据库进行了支持。
1) 常用使用场景
矩形查询:
通过API获取显示屏4角的坐标点,顺序连接生成矩形,空间数据库提供查询矩形范围内坐标功能。
圆型查询:
根据当前所在位置为中心点,根据给定的里程数为半径生成圆形,搜索圆形范围内的数据。
2) MySql支持的类型
点 POINT(15 20)
线 LINESTRING(0 0, 10 10, 20 25, 50 60)
面 POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))
多个点 MULTIPOINT(0 0, 20 20, 60 60)
多个线 MULTILINESTRING((10 10, 20 20), (15 15, 30 15))
多个面 MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((5 5,7 5,7 7,5 7, 5 5)))
集合 GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20)),简称GEOMETRY,可以放入点、线、面。
3) 测试
以存储坐标点为例
DROP TABLE IF EXISTS points;
CREATE TABLE `points` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL DEFAULT '',
`location` point NOT NULL,
PRIMARY KEY (`id`),
SPATIAL KEY `sp_index` (`location`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入测试数据
# 天安门
INSERT INTO points VALUES (1,'aaaa',POINT(116.397389,39.908149));
https://blog.csdn.net/gaojingyuan/article/details/79004990
========
Mysql gis 空间数据库功能学习
当前只有MyISAM引擎的数据表支持地理空间数据的存储
建表:
CREATE DATABASE geodatabase;
USE geodatabase;
CREATE TABLE test(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(128) NOT NULL,
pnt POINT,
line LINESTRING,
pgn POLYGON
)ENGINE=MyISAM;
添加空间列,在geom表里添加可以存储point类型数据
ALTER TABLE geom ADD pt POINT;
用以下SQL插入一条空间数据
INSERT INTO `test` VALUES(
null,
'a test string',
POINTFROMTEXT('POINT(15 20)'),
LINESTRINGFROMTEXT('LINESTRING(0 0, 10 10, 20 25, 50 60)'),
POLYGONFROMTEXT('POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))')
);
这里也可以用通行的GEOMFROMTEXT函数实现WKT到数据库内部几何格式的转换。而GEOMFROMWKB函数用于转换WKB。
INSERT INTO `gis` VALUES(
null,
'a test strin222g',
GEOMFROMTEXT('POINT(15 20)'),
GEOMFROMTEXT('LINESTRING(0 0, 10 10, 20 25, 50 60)'),
GEOMFROMTEXT('POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))')
)
这个函数很有用:Envelope
Envelope(g)
返回几何值g的最小边界矩形(MBR)。结果以Polygon值的形式返回。
多边形(polygon)是由边界框的顶点定义的:
POLYGON((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))
mysql> SELECT AsText(Envelope(GeomFromText('LineString(1 1,2 2)')));
+-------------------------------------------------------+
| AsText(Envelope(GeomFromText('LineString(1 1,2 2)'))) |
+-------------------------------------------------------+
| POLYGON((1 1,2 1,2 2,1 2,1 1)) |
+-------------------------------------------------------+
或者多个点面集合:
SELECT AsText( Envelope( GeomFromText('GeometryCollection(Point(10 2),Point(9 9),LineString(2 2, 3 30),LineString(200 200, 3 30),Polygon((400 300,10 0,10 10,0 10,400 300)),Point(100 100))' ) ) ) ;
用以下SQL从数据表中获得空间数据
SELECT id,name,ASTEXT(pnt),ASTEXT(line),ASTEXT(pgn) from `test`;
ASTEXT函数的功能与GEOMFROMTEXT的功能恰好相反,就是将数据从内部格式转换为WKT;相应的ASBINARY可以转换为WKB。
https://blog.csdn.net/weixin_42056745/article/details/102588906
========
这些是网上看的,我还没操作过mysql是否直接支持 POINT 等这些类型的数据类型,或者额外要安装什么组件;