1. 程式人生 > 其它 >mysql 開啟資料空間_地理空間資料Geometry在MySQL中使用

mysql 開啟資料空間_地理空間資料Geometry在MySQL中使用

技術標籤:mysql 開啟資料空間

在MySQL中,Geometry等幾何物件可以用來表示地理位置,即用幾何物件表示地理空間資料。

在MySQL中支援的幾何資料型別包括Geometry、Point、LineString、Polygon以及集合型別的MultiPoint、MultiLineString、MultiPolygon、GeometryCollection。其中Geometry可以表示任意一種幾何型別,即在MySQL中,如果一個欄位型別是Geometry,則可以儲存Point、LineString等其它幾何型別的值。其他的幾種則需要固定有效的表示格式。

一、資料格式
在MySQL中有3種表達幾何物件的格式:

•WKT(文字格式)•WKB(二進位制格式)•MySQL內部儲存格式 WKT是文字格式,因此可以直接使用文字來表示幾何資料,實現資料的插入與編輯。

二、常用函式ST_GEOMFROMTEXT
用於將幾何資料從可讀的文字型別轉換成內部儲存的二進位制型別。

示例:

INSERTINTO`t_geo_test2`(id,name,geometry_1)VALUES(1,'G1',geomFromText('POINT(121.47410331.232862)'));ST_ASTEXT

將幾何資料轉換成可讀的文字型別。

示例:

SELECT ST_ASTEXT(linestring_1) from t_geo_test2;

ST_GEOHASH

可以將一個地理位置(Point)轉換為一個指定長度的字串,只有Point中儲存的是經緯度即第一第二座標範圍分別在(-180,180)與[-90,90]內時才可以轉換成功。

SELECT ST_GeoHash(geometry_1,8) FROM t_geo_test2 where id =1;

Geohash官網:https://en.wikipedia.org/wiki/Geohash 在PG中使用的是postgis,相關對比見:https://yq.aliyun.com/articles/73995

三、資料SQL

/* Navicat Premium Data Transfer Source Server         : mysql Source Server Type    : MySQL Source Server Version : 50723 Source Host           : 172.20.20.11:3306 Source Schema         : testdepdb Target Server Type    : MySQL Target Server Version : 50723 File Encoding         : 65001 Date: 17/12/2018 16:28:33*/ SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0; -- ------------------------------ Table structure for t_geo_test2-- ----------------------------DROP TABLE IF EXISTS `t_geo_test2`;CREATE TABLE `t_geo_test2`  (  `id` int(11) NOT NULL,  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,  `geometry_1` geometry NULL,  `point_1` point NULL,  `linestring_1` linestring NULL,  `polygon_1` polygon NULL,  `multipoint_1` multipoint NULL,  `multilinestring_1` multilinestring NULL,  `multipolygon_1` multipolygon NULL,  `geometrycollection_1` geometrycollection NULL,  PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ------------------------------ Records of t_geo_test2-- ----------------------------INSERT INTO `t_geo_test2` VALUES (1, 'P1', ST_GeomFromText('POINT(121.474 31.2329)'), ST_GeomFromText('POINT(121.474 31.2329)'), ST_GeomFromText('LINESTRING(1 3, 12 5, 12 7)'), ST_GeomFromText('POLYGON((121.474 31.2345, 121.472 31.2333, 121.471 31.2315, 121.472 31.2302, 121.473 31.2304, 121.476 31.232, 121.474 31.2345))'), ST_GeomFromText('MULTIPOINT(0 0, 20 20, 60 60)'), ST_GeomFromText('MULTILINESTRING((10 10, 20 20), (15 15, 30 15))'), ST_GeomFromText('MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)), ((5 5, 7 5, 7 7, 5 7, 5 5)))'), ST_GeomFromText('GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))'));INSERT INTO `t_geo_test2` VALUES (2, 'L1', ST_GeomFromText('LINESTRING(121.342 31.5424, 121.346 31.2468, 121.453 31.4569)'), ST_GeomFromText('POINT(-3 -5)'), ST_GeomFromText('LINESTRING(1 3, 12 5, 12 7)'), NULL, NULL, NULL, NULL, NULL);INSERT INTO `t_geo_test2` VALUES (3, 'P1', ST_GeomFromText('POLYGON((121.474 31.2345, 121.472 31.2333, 121.471 31.2315, 121.472 31.2302, 121.473 31.2304, 121.476 31.232, 121.474 31.2345))'), ST_GeomFromText('POINT(1 1)'), ST_GeomFromText('LINESTRING(121.342 31.5424, 121.346 31.2468, 121.453 31.4569)'), NULL, NULL, NULL, NULL, NULL);INSERT INTO `t_geo_test2` VALUES (4, 'MP1', ST_GeomFromText('MULTIPOINT(0 0, 20 20, 60 60)'), ST_GeomFromText('POINT(6 7)'), NULL, NULL, NULL, NULL, NULL, NULL);INSERT INTO `t_geo_test2` VALUES (5, 'ML1', ST_GeomFromText('MULTILINESTRING((10 10, 20 20), (15 15, 30 15))'), ST_GeomFromText('POINT(4 6)'), NULL, NULL, NULL, NULL, NULL, NULL);INSERT INTO `t_geo_test2` VALUES (6, 'MPG1', ST_GeomFromText('MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)), ((5 5, 7 5, 7 7, 5 7, 5 5)))'), ST_GeomFromText('POINT(2 5)'), NULL, NULL, NULL, NULL, NULL, NULL);INSERT INTO `t_geo_test2` VALUES (7, 'G1', ST_GeomFromText('GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))'), ST_GeomFromText('POINT(1 3)'), NULL, NULL, NULL, NULL, NULL, NULL);INSERT INTO `t_geo_test2` VALUES (8, 'P1', NULL, ST_GeomFromText('POINT(-3 -5)'), NULL, NULL, NULL, NULL, NULL, NULL);INSERT INTO `t_geo_test2` VALUES (9, 'P1', NULL, NULL, ST_GeomFromText('LINESTRING(1 3, 12 5, 12 7)'), NULL, NULL, NULL, NULL, NULL);INSERT INTO `t_geo_test2` VALUES (10, 'P1', NULL, NULL, NULL, ST_GeomFromText('POLYGON((121.474 31.2345, 121.472 31.2333, 121.471 31.2315, 121.472 31.2302, 121.473 31.2304, 121.476 31.232, 121.474 31.2345))'), NULL, NULL, NULL, NULL);INSERT INTO `t_geo_test2` VALUES (17, 'P1', ST_GeomFromText('GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))'), NULL, NULL, NULL, NULL, NULL, NULL, NULL);INSERT INTO `t_geo_test2` VALUES (18, 'P1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, ST_GeomFromText('GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))')); SET FOREIGN_KEY_CHECKS = 1;

四、資料預覽703da17b6639b850edbff02fdc5199f1.png五、資料型別說明

型別含義說明示例
Geometry間資料任意一種空間型別單元格
Point座標值POINT(121.474 31.2329)
LineString線,由一系列點連線而成LINESTRING(3 0, 3 3, 3 5)
Polygon多邊形由多條線組成POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))
MultiPoint點集合集合類,包含多個點MULTIPOINT(0 0, 20 20, 60 60)
MultiLineString線集合集合類,包含多條線MULTILINESTRING((10 10, 20 20), (15 15, 30 15))
MultiPolygon多邊形集合集合類,包含多個多邊形MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)), ((5 5, 7 5, 7 7, 5 7, 5 5)))
GeometryCollection空間資料集合集合類,可以包括多個點、線、多邊形GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))

六、參考

https://www.linuxidc.com/Linux/2018-09/154191.htm

https://yq.aliyun.com/articles/50625

https://blog.csdn.net/rosejeck/article/details/82962511

https://blog.csdn.net/MinjerZhang/article/details/78137795

https://blog.csdn.net/varyall/article/details/80308295

shp檔案匯入到mysql:

https://blog.csdn.net/chenbogger/article/details/103694532

http://www.360doc.com/content/14/0311/11/7669533_359513485.shtml