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。

 


參考鏈接1:https://blog.csdn.net/chaiqi/article/details/23099407

參考鏈接2:https://blog.csdn.net/long535/article/details/75714781

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章