我正在使用 MySQL 从数据库中提取经纬度,并检查它们是否在特定的附近。
一切都很好,除非该点位于两个社区之间的边界上。然后,该点包含在两个邻域中。它被重复了。处理边界上的点的最佳方法是什么?
每个点都应该只计算在一个邻域中——而不是两个。另外,例如,我不希望邻域 A 获得所有边界案例,但邻域邻域 B 获得零案例。
假设点 30.3030, -70.7070 位于 Newport 和 Oldport 的边界上。不幸的是,该点被计算了两次。它被记录为在 Oldport 和 Newport 中。
类型 | 纬度 | 经度 | 邻里
small | 30.3030 | -70.7070 | Newport small | 30.3030 | -70.7070 | Oldport small | 30.3344 | -70.7274 | Anotherport
我使用下面的选择语句:
SELECT t.type, t.latitude, t.longitude, s.neighborhoods
FROM my_type_table t, neighborhood_shapes s
WHERE myWithin(POINTFROMTEXT( CONCAT( 'POINT(', t.latitude, ' ', t.longitude, ')' ) ) , s.neighborhood_polygons )) = 1
my_type_table 有列:
- 类型(VARCHAR)
- 纬度(十进制)
- 经度(十进制)
...和neighbour_shapes 有列:
- 社区 (VARCHAR)
- 邻域多边形(几何)
我使用 myWithin 函数来测试该点是在一个邻域内还是另一个邻域内。这是它的链接:mySQL 论坛上的 myWithin 函数。该函数在点位于多边形中时返回 1,当点不在多边形中时返回 0。
你将如何解决这个问题?有什么建议吗?