漂泊雪狼的博客

思考,讨论,分享C#,JavaScript,.NET,Oracle,SQL Server……技术

导航

mysql空间类型使用笔记

Posted on 2017-05-14 09:35  漂泊雪狼  阅读(1539)  评论(0编辑  收藏  举报

创建表,填充测试数据

create table geom1(id int not null auto_increment primary key,geo geometry);

insert into geom1(geo)values(ST_GeomFromText('point(1 1 )',3857));

insert into geom1(geo)values(ST_GeomFromText('polygon((0 0,10 0,10 10,0 10,0 0))',3857));

 

select AsText(geo) from geom1;/*以WKT格式获取空间数据*/

select AsBinary(geo) from geom1; /*以WKB格式获取空间数据*/

 修改列为自增类型

alter table cc change id id int primary key auto_increment;

 建立空间索引,索引列必须为非空

alter table geom1
change geo geo geometry not null;
create SPATIAL  index idx_geo on geom1(geo)

 常用空间计算操作

MBRContains(g1,g2) 

返回1或0以指明g1的最小边界矩形是否包含g2的最小边界矩形。


MBRDisjoint(g1,g2) 

返回1或0以指明两个几何变量g1和g2的最小边界矩形是否不相交。

MBREqual(g1,g2) 

返回1或0以指明两个几何变量g1和g2的最小边界矩形是否相同。

MBRIntersects(g1,g2) 

返回1或0以指明两个几何变量g1和g2的最小边界矩形是否相交。

MBROverlaps(g1,g2) 

返回1或0以指明两个几何变量g1和g2的最小边界矩形是否交迭。

MBRTouches(g1,g2) 

返回1或0以指明两个几何变量g1和g2的最小边界矩形是否接触。

MBRWithin(g1,g2) 

返回1或0以指明g1的最小边界矩形是否位于g2的最小边界矩形内。



Contains(g1,g2) 

返回1或0以指明g1是否完全包含g2。

Crosses(g1,g2) 

如果g1在空间上与g2相交,返回1。如果g1为Polygon或MultiPolygon,返回NULL,或如果g2为Point或MultiPoint返回NULL。否则,返回0。

术语“空间上交叉”指的是2个给定几何对象之间的空间关系,它具有下述属性:

o        2个结合对象交叉。

o        其交叉结果将导致其维数小于两个给定几何对象最大维数的几何对象。

o        其交叉不等于两个几何对象中的任何1个。

Disjoint(g1,g2) 

返回1或0以指明g1是否与g2从空间上不相交。

Distance(g1,g2) 

以双精度数值形式返回2个几何对象中2点间的最短距离。

Equals(g1,g2) 

返回1或0以指明g1是否从空间上等同于g2。

Intersects(g1,g2) 

返回1或0以指明g1是否从空间上与g2相交。

Overlaps(g1,g2) 

返回1或0以指明g1是否从空间上与g2交迭。如果2个几何对象交叉而且其交叉将导致具有相同维数但并不等同于任一几何对象的几何对象,将使用术语“空间交迭”。

Related(g1,g2,pattern_matrix) 

返回1或0以指明由pattern_matrix指定的空间关系是否在g1和g2间存在。如果参量为NULL返回-1。模式矩形为字符串。如果实施了该函数,其规范将在此给出。

Touches(g1,g2) 

返回1或0以指明g1是否从空间上与g2接触。如果几何对象的内部不交叉,但1个几何对象的边界与另一个的边界或内部交叉,这两个几何对象是从空间上接触的。

Within(g1,g2) 

返回1或0以指明g1是否从空间上位于g2内。