0

だから私はこの問題に数日間取り組んできました。目的は、ユーザーの現在の場所 (緯度/経度) に基づいてデータの半径検索を生成することでした。B Lat/Lon と B Lat/Lon を計算して検索にインテリジェンスを追加したいのですが (これは実行できます)、半径検索から、この三角形内の一致する GPS ポイントを削除します....

私が到達するために管理した最も近いものは、BをCに一致させることですが、Aまでに含まれるポイントではありません...

これは数学の一部であり、MySQL の一部であるため、これを実装するために使用したい最終的な方法です。

何かご意見は ?

テラン

メイン画像

最終結果

他のどこから

Q:結果を返す半径が A だけなのに、B と C の周りに半径があるのはなぜですか? Aこれは単に各ポイントの緯度経度を表示するためのものです... これがどのように使用されるかを示す図を追加しました。

Q:B と C は実際には何を表しているのですか (A は現在の位置) A: B と C は、ユーザーの現在の位置、方位、速度に基づいて (数学によって) 計算された位置になります。

「ポイントが三角形にあるかどうかをテストするのは簡単です。三角形のエッジ ベクトルと、三角形の角からテスト ポイントまでのベクトルの外積を考えてみてください。内側のポイントは、3 つの辺すべての内側にあります。」

リンク - 三角形計算の内部 - http://www.mathworks.com/matlabcentral/fileexchange/22690-inside-triangle/content/inside_triangle.m

4

1 に答える 1

2

このプロセスにはいくつかのステップがあります。

円の境界ボックス内の点を見つけます。これは、経度次元で少しずさんですが、うまく効率的に機能します。

   SELECT *
     FROM points p
    WHERE p.lat >= alat-radius
      AND p.lat <= alat+radius
      AND p.lon >= alon-radius
      AND p.lon <= alon+radius

次に、三角形の内側の点を除外します。これを処理するには、三角形を含めるストアド関数を作成する必要があります。

   SELECT *
     FROM points p
    WHERE p.lat >= alat-radius
      AND p.lat <= alat+radius
      AND p.lon >= alon-radius
      AND p.lon <= alon+radius
      AND NOT Inside_Triangle(p.lat, p.lon, alat, alon, blat, blon, clat, clon)

三角形の包含を行うためのアルゴリズムについては、こちらを参照してください。 2D ポイントがポリゴン内にあるかどうかを判断するにはどうすればよいですか?

最後に、半径の外側にあるポイントを除外します。

   SELECT *
     FROM points p
    WHERE p.lat >= alat-radius
      AND p.lat <= alat+radius
      AND p.lon >= alon-radius
      AND p.lon <= alon+radius
      AND NOT Inside_Triangle(p.lat, p.lon, alat, alon, blat, blon, clat, clon)
      AND Haversine(p.lat,p.lon,alat,alon) > radius

以下は、Haversine 関数の例です。半径の単位を慎重に分類する必要があることに注意してください。 この MySQL ストアド関数が、クエリで計算を実行する場合とは異なる結果をもたらすのはなぜですか?

そこにあります。必要なポイントを含む結果セットを取得する方法。

于 2012-08-20T22:27:04.163 に答える