Mysql 空间数据库学习

建表:

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;

扫描二维码关注公众号,回复: 419655 查看本文章

用以下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))')

);

这个函数很有用: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`;

现在我需要的功能是查找一辆车在某一段时间内是否在一段区域内经过,用点来说明的话,就是一个空间坐标点在一个特定时间段内是否包含在一个特定的矩形区域内。下面这个函数应该能达到这个功能:

MBRWithin(g1,g2) 

SELECT AsText(pnt) FROM `gis` WHERE MBRWithin(pnt,GeomFromText('Polygon(1 1,0 30,30 30,30 0,1 )'))

猜你喜欢

转载自winder-sety.iteye.com/blog/2216517