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;
四、資料預覽五、資料型別說明
型別 | 含義 | 說明 | 示例 |
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