0

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 を返します。

この問題をどのように解決しますか?何かアドバイス?

4

1 に答える 1

0

わかりました。一部のポリゴンに非常に小さな重なりがありました。したがって、関数が実行されると、両方の近傍にポイントが配置されます。

ありがとうございました。

-ラクシュミディ

于 2010-06-28T19:26:58.507 に答える