[英]mysql query points within polygon - no results
I'm pretty sure that I'm doing multiple things wrong here but I'm not sure what... 我很确定我在这里犯了很多错误,但我不确定是什么......
The table (minus a few fields): 表格(减去几个字段):
CREATE TABLE IF NOT EXISTS `stuff` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`lat` decimal(12,7) NOT NULL,
`lon` decimal(12,7) NOT NULL,
`location` point NOT NULL,
UNIQUE KEY `id` (`id`),
KEY `distance` (`distance`),
KEY `lat` (`lat`),
KEY `lon` (`lon`),
SPATIAL KEY `location` (`location`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5;
The triggers to automatically set the location point: 自动设置位置点的触发器:
DROP TRIGGER IF EXISTS `stuff_insert_defaults`;
DELIMITER //
CREATE TRIGGER `stuff_insert_defaults` BEFORE INSERT ON `stuff`
FOR EACH ROW SET NEW.location = PointFromText(CONCAT('POINT(',NEW.lat,' ',NEW.lon,')'))
//
DELIMITER ;
DROP TRIGGER IF EXISTS `stuff_update_location`;
DELIMITER //
CREATE TRIGGER `stuff_update_location` BEFORE UPDATE ON `stuff`
FOR EACH ROW SET NEW.location = PointFromText(CONCAT('POINT(',NEW.lat,' ',NEW.lon,')'))
//
DELIMITER ;
Some sample data (4 random points within the state of Colorado): 一些样本数据(科罗拉多州内4个随机点):
/* 4 random points within the state of colorado */
INSERT INTO `stuff` (`id`, `distance`, `lat`, `lon`, `location`) VALUES
(1, 5.0000000, 40.2488450, -103.8003460, 0x000000000101000000f6622827da1f444001df6dde38f359c0),
(2, 5.0000000, 38.4849180, -107.8726700, 0x000000000101000000f19e03cb113e4340d28c45d3d9f75ac0),
(3, 5.0000000, 39.5040250, -105.3584800, 0x000000000101000000e6ae25e483c0434049111956f1565ac0),
(4, 5.0000000, 39.1904180, -106.8179680, 0x000000000101000000ed48f59d5f9843402b4b749659b45ac0);
The rough outter boundary of the state of Colorado: 科罗拉多州粗糙的外围边界:
NW corner: 41.000497 -109.050149
NE corner: 41.002380 -102.051881
SE corner: 36.993237 -102.041959
SW corner: 36.999037 -109.045220
The query which SHOULD return the 4 records we inserted: 应该返回我们插入的4条记录的查询:
SELECT *, AsText(location) FROM stuff
WHERE Contains(
GeomFromText('POLYGON((41.000497 -109.050149, 41.002380 -102.051881, 36.993237 -102.041959, 36.999037 -109.045220, 41.000497 -109.050149))'), location );
What I'm getting back... 我要回来的......
nada...
zip...
nil...
nothing...
As documented under Class Polygon
(emphasis added): 如类
Polygon
(强调添加):
Polygon
AssertionsPolygon
断言
- The boundary of a
Polygon
consists of a set ofLinearRing
objects (that is,LineString
objects that are both simple and closed ) that make up its exterior and interior boundaries.Polygon
的边界由一组LinearRing
对象(即简单和封闭的LineString
对象)组成,构成其外部和内部边界。
You must therefore close the polygon by finishing at the starting point: 因此,您必须通过在起点处完成来关闭多边形:
SELECT *, AsText(location) FROM stuff
WHERE Contains(
GeomFromText('POLYGON((41.000497 -109.050149, 41.002380 -102.051881, 36.993237 -102.041959, 36.999037 -109.045220, 41.000497 -109.050149))'), location );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.