MySQL中判断一个点是否落在多边形内
来源:互联网 发布:数据分析网站有哪些 编辑:程序博客网 时间:2024/05/17 07:36
关于地理空间数据,经常需要处理两个空间数据的关联关系。有很多种方法可以处理,通过编写程序算法,或者是调用数据库中对应的function。在mysql数据库中,http://dev.mysql.com/doc/refman/5.1/en/functions-for-testing-spatial-relations-between-geometric-objects.html做了详细的介绍,但是它并没有真正的实现多边形(5.6版本之前),本文以判断一个点是否落在多边形内的主题,加以简单的扩展。
首先,建立一张简单的地理数据表,
CREATE TABLE `ci_special_zone` (
`id` int(11) NOT NULL auto_increment,
`ploygongeo` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
并插入几条数据
INSERT INTO ci_special_zone (ploygongeo) VALUES('POLYGON((113.547 22.186,113.549 22.186,113.549 22.188, 113.547 22.188,113.547 22.186))');
INSERT INTO ci_special_zone (ploygongeo) VALUES('POLYGON((112.547 21.186,112.549 212.186,112.549 21.188, 112.547 212.188,112.547 21.186))');
创建function,
DELIMITER //
CREATE FUNCTION myWithin(p POINT, poly POLYGON) RETURNS INT(1) DETERMINISTIC
BEGIN
DECLARE n INT DEFAULT 0;
DECLARE pX DECIMAL(9,6);
DECLARE pY DECIMAL(9,6);
DECLARE ls LINESTRING;
DECLARE poly1 POINT;
DECLARE poly1X DECIMAL(9,6);
DECLARE poly1Y DECIMAL(9,6);
DECLARE poly2 POINT;
DECLARE poly2X DECIMAL(9,6);
DECLARE poly2Y DECIMAL(9,6);
DECLARE i INT DEFAULT 0;
DECLARE result INT(1) DEFAULT 0;
SET pX = X(p);
SET pY = Y(p);
SET ls = ExteriorRing(poly);
SET poly2 = EndPoint(ls);
SET poly2X = X(poly2);
SET poly2Y = Y(poly2);
SET n = NumPoints(ls);
WHILE i<n DO
SET poly1 = PointN(ls, (i+1));
SET poly1X = X(poly1);
SET poly1Y = Y(poly1);
IF ( ( ( ( poly1X <= pX ) && ( pX < poly2X ) ) || ( ( poly2X <= pX ) && ( pX < poly1X ) ) ) && ( pY > ( poly2Y - poly1Y ) * ( pX - poly1X ) / ( poly2X - poly1X ) + poly1Y ) ) THEN
SET result = !result;
END IF;
SET poly2X = poly1X;
SET poly2Y = poly1Y;
SET i = i + 1;
END WHILE;
RETURN result;
End;
//
DELIMITER ;
最后,执行如下的sql语句
SELECT substring(ploygongeo,10,length(ploygongeo)-11) from ci_special_zone
where myWithin(PolygonFromText('Point(113.547 22.186)'),PolygonFromText(ploygongeo))>0 limit 0,1
坐标点113.547 22.186是经纬度,若有返回值,则表示坐标点落在所在的区间。
- Mysql中判断一个点是否落在多边形内。
- MySQL中判断一个点是否落在多边形内
- 判断一个点是否落在多边形内
- 判断一个点是否落在多边形内
- 判断一个点是否落在多边形内
- 如何判断一个指定的经纬度点是否落在一个多边形内
- 如何判断一个指定的经纬度点是否落在一个多边形内
- 如何判断一个指定的经纬度点是否落在一个多边形内
- Qt 判断一个点是否落在三角形内(算法)
- 判断一个点是否在多边形内
- 判断一个点是否在多边形内
- 判断一个点是否在多边形内
- 如何判断一个指定的经纬度点是否落在一个多边形区域内?
- 在Android里如何判断一个指定的经纬度点是否落在一个多边形区域内
- 要判断点是否落在多边形的关系
- GIS-判断点是否落在指点的多边形区域内
- 判断点是否落在多边形内部的算法
- 判断一个点是否在多边形中
- Java中的不定长参数
- jdk、tomcat、maven、mongodb环境配置
- 透过WinDBG的视角看String
- C语言结构体里的成员数组和指针
- MATLAB编写回调函数(部分 更新)
- MySQL中判断一个点是否落在多边形内
- IT囧事
- 属性动画实现翻滚的控件
- 数字证书原理
- linux系统编程
- 【机器学习基础】Logistic回归基础
- 纯c语言实现动态分配多维数组的方法
- 日子
- androi自定义自动换行的View(类似网页的标签Tag)