MySQL を使用して、データベースから緯度経度を取得し、それらが特定の地域にあるかどうかを確認しています。
ポイントが 2 つの近隣の境界にある場合を除いて、すべてがうまく機能します。次に、その点が両方の近傍に含まれます。重複します。境界線上にあるポイントを処理する最良の方法は何ですか?
各ポイントは、両方ではなく、1 つの近傍でのみカウントする必要があります。また、たとえば、近隣 A がすべての境界ケースを取得するのではなく、隣接する近隣、近隣 B がゼロのケースを取得するようにします。
ポイント 30.3030、-70.7070 がニューポートとオールドポートの境界にあると想像してください。残念ながら、ポイントは 2 回カウントされます。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 には次の列があります。
- タイプ (VARCHAR)
- 緯度 (10 進数)
- 経度 (10 進数)
...そして、neighborhood_shapes には列があります。
- 近隣 (VARCHAR)
- neighbor_polygons (ジオメトリ)
myWithin 関数を使用して、ポイントが近隣にあるかどうかをテストします。これへのリンクは次のとおりです。mySQLフォーラムのmyWithin関数。この関数は、ポイントがポリゴン内にある場合は 1 を返し、ポリゴン内にない場合は 0 を返します。
この問題をどのように解決しますか?何かアドバイス?