mysql - 使用 MySQL 5.6 查找多边形内部的长/纬度

标签 mysql gps mapping spatial

我有一个 locations 表,其中包含许多行位置和数据。其中有两列 - 经度和纬度。我想从该表中查找在定义的 map 多边形区域中找到的记录。

我刚刚根据一些名为 polyThing 的教程创建了第二个表,它具有我定义的边界...

CREATE TABLE polyThing
    (
        `ID` int auto_increment primary key,
        `boundary` polygon not null,
            `testarea` varchar(200) NOT NULL
    );

    INSERT INTO polyThing (boundary, testarea)
        VALUES(
            PolygonFromText(
                'POLYGON(( 
        -114.018522 46.855932 ,
        -113.997591 46.856030 ,
        -113.997447 46.848626 ,
        -114.018161 46.848824 ,
        -114.018522 46.855932 ))'
            ), 'Test Area 1'
        );

我想从这个定义的多边形内的位置查找记录,并且我一直在尝试与此类似的查询。无论我尝试什么,我都得到 0 条记录。

SELECT *
FROM locations
WHERE ST_CONTAINS(
    (SELECT boundary FROM polyThing
    WHERE polyThing.testarea = 'Test Area 1')
, Point(Longitude, Latitude))

这是位置表和数据:

CREATE TABLE `locations` (
  `LocationID` int(11) NOT NULL,
  `Location` varchar(200) NOT NULL,
  `Longitude` varchar(200) NOT NULL,
  `Latitude` varchar(200) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT;


INSERT INTO `locations` (`LocationID`, `Location`, `Longitude`, `Latitude`) VALUES
(1, 'In the polygon', '-114.007191', '46.853019'),
(2, 'In the polygon', '-114.003798', '46.851045'),
(3, 'Not in', '-114.016934', '46.866098');

喜欢在正确的方向上得到插入。

最佳答案

我猜(Longitude, l.Latitude) 位于某个位置?

<强> Sql DEMO:

SELECT l.*,  ST_CONTAINS(p.boundary, POINT(l.Longitude, l.Latitude))
FROM locations l
CROSS JOIN polyThing p;
 
SELECT l.*
FROM locations l
JOIN polyThing p
  ON ST_CONTAINS(p.boundary, POINT(l.Longitude, l.Latitude))
 AND p.testarea = 'Test Area 1';

输出 enter image description here

关于mysql - 使用 MySQL 5.6 查找多边形内部的长/纬度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44286763/

相关文章:

mysql - 如何在MYSQL中按公司对员工进行分组

android - 当针对目标 API 级别 29 进行编译时,能否在 Android API 级别 < 24 上访问 NMEA?

elasticsearch - 如何自动将@timestamp值转换为elasticsearch7的文档?

asp.net-mvc - 使用 ValueInjecter 在具有不同属性名称的对象之间进行映射

php - 如何从 mysql 数据库访问 image_name 以获取 8 个 session 图像的数组

mysql - 在存储过程中遇到 concat 问题

android - 位置监听器从服务工作,但不是 IntentService

ios - 定期唤醒 iOS 应用程序以检查位置

iPhone MapView将第一个和最后一个注释放在前面

MySQL LIKE 语句在字符串开头以外的任何位置查找子字符串