0

我正在使用 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。

你将如何解决这个问题?有什么建议吗?

4

1 回答 1

0

好吧,我想通了。一些多边形中有非常小的重叠。因此,当函数运行时,它把点放在两个邻域中。

谢谢你。

-拉克西米迪

于 2010-06-28T19:26:58.507 回答