我创建了下表
CREATE TABLE geom (g GEOMETRY);
Run Code Online (Sandbox Code Playgroud)
并插入了许多行,例如:
INSERT INTO geom (g)
VALUES(PolygonFromText('POLYGON((
9.190586853 45.464518970,
9.190602686 45.463993916,
9.191572471 45.464001929,
9.191613325 45.463884676,
9.192136130 45.463880767,
9.192111509 45.464095594,
9.192427961 45.464117804,
9.192417811 45.464112862,
9.192509035 45.464225851,
9.192493139 45.464371079,
9.192448471 45.464439002,
9.192387444 45.464477861,
9.192051402 45.464483037,
9.192012814 45.464643592,
9.191640825 45.464647090,
9.191622331 45.464506215,
9.190586853 45.464518970))')
);
Run Code Online (Sandbox Code Playgroud)
现在我想搜索所有数据,并返回条目,其中我的纬度/长度没有任何多边形.
如何使用mysql完成?或者是否有人知道任何指向正确方向的链接?
Pau*_*xon 17
从v5.1开始的MySQL仅支持对最小边界矩形(MBR)的操作.虽然有一个" 包含 "功能可以满足您的需要但它没有完全实现并且回退到使用MBRContains
目前,MySQL没有根据规范实现这些功能.实现的那些返回与相应的基于MBR的函数相同的结果.这包括除Distance()和Related()之外的以下列表中的函数.
这些功能可以在未来的版本中实现,完全支持空间分析,而不仅仅是基于MBR的支持.
你可以做的是让MySQL给你一个基于MBR的近似结果,然后对它进行后处理以执行更准确的测试.或者,切换到PostGIS!
(2012年5月更新 - 感谢Mike Toews)
MySQL 5.6.1+提供了使用对象形状而不是MBR的函数
MySQL最初实现了这些函数,使得它们使用对象边界矩形并返回与相应的基于MBR的函数相同的结果.从MySQL 5.6.1开始,可以使用相应的版本来使用精确的对象形状.这些版本以ST_前缀命名.例如,Contains()使用对象边界矩形,而ST_Contains()使用对象形状.
如果您无法将dbs更改为像PostgreSQL的PostGIS扩展那样正确实现空间运算符的dbs,则http://postgis.refractions.net/可以使用两部分方法解决此问题.
首先让MySQL使用它们的intersects运算符(http://dev.mysql.com/doc/refman/5.1/en/functions-that-test-spatial-relationships-between-geometries.html#function_intersects)为你提供一个基于边界框的边界框预过滤结果(默认情况下就是这样).如果查询很慢,请确保首先在几何字段上有索引.
然后将您在查询中使用的原始几何体水合成GIS几何体库的几何对象,如GEOS(http://trac.osgeo.org/geos/)(基于C++,虽然它也有不同语言的绑定,如Python),Shapely(http://trac.gispython.org/lab/wiki/Shapely),OGR(或Java拓扑套件)( JTS)http://www.vividsolutions.com/jts/jtshome.htm).
使用适当的运算符(如内部或相交)测试从查询结果中返回的每个几何.这些库中的任何一个都会给你一个布尔结果.
就个人而言,我会查看OGR的样本,因为它有一个可以提供帮助的大社区.
哦是的,抱歉这样的链接......我想因为我是"新"我只能发一个链接(?)