边界线情况:当Point在边界上时,MySQL Point-in_Polygon函数导致重复

时间:2010-06-25 23:36:49

标签: mysql point-in-polygon

我正在使用MySQL从数据库中提取lat long并检查它们是否在特定的邻域中。

一切都很好,除非点在两个街区之间的边界上。然后,该点包含在两个邻域中。它变得复制了。处理边界点的最佳方法是什么?

每个点应仅计入一个社区 - 而不是两者。此外,我不希望,例如,邻居A得到所有的边境案件,但邻近的邻居,邻居B,以获得零案件。

想象一下,点30.3030,-70.7070位于纽波特和Oldport之间的边界。不幸的是,这一点被计算了两次。它被记录为Oldport和Newport。

  

类型|纬度|经度|附近

small |  30.3030  | -70.7070  | Newport
small |  30.3030  | -70.7070  | Oldport
small |  30.3344  | -70.7274  | Anotherport

我使用下面的select语句:

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包含列:

  • type(VARCHAR)
  • 纬度(十进制)
  • 经度(十进制)

...而且neighborhood_shapes有列:

  • 邻里(VARCHAR)
  • neighborhood_polygons(geometry)

我使用myWithin函数来测试该点是在一个邻域还是另一个邻域。这是一个指向它的链接:myWithin function at mySQL forum。当该点在多边形中时,该函数返回1;当它不在多边形中时,该函数返回0。

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

1 个答案:

答案 0 :(得分:0)

好的,我明白了。一些多边形中存在非常小的重叠。因此,当函数运行时,它将点放在两个邻域中。

谢谢。

-Laxmidi