0

geokitで遊んで、いくつかのことを試してみました...

ポイントを考えると、物事はほぼ期待どおりに機能しており、近くで物事を見つけることができます。

ただし、:milesを使用して:withinを大きな値(たとえば100,000)に設定すると、データベース内のほとんどの(すべてではないにしても)オブジェクトが返されると予想されますが、特定の時点で停止するようです。 :withinの最大値が組み込まれている場合。

数式:flatと:sphereを試しました。

よろしくお願いします、クリス

4

1 に答える 1

1

あなたの問題は、最大値が組み込まれているようには見えませんが:within、制限がありません(そしてgeokit内の健全性チェック)。

クエリがバウンディングボックスを生成するため:withinに通過するように見えます。三角法を少し実行し(を参照)、結果はインスタンスになります。Geokit::Bounds.from_point_and_radiusfrom_point_and_radiusendpointmappable.rbGeokit::Bounds

三角法で問題が発生しているのではないかと思います。三角関数は周期的であるため、半径100 000は、最終的に0〜40 000 km(地球の円周、約25 000マイル)の範囲にラップアラウンドし、バウンディングボックスは100000マイルをバインドしません。100 000を少し試してみると、おそらくgeokitを使用して、1辺あたりわずか数センチメートル(または通常の浮動小数点の問題を解決できる場合は半径がゼロ)のバウンディングボックスを作成できます。

エグゼクティブサマリー:すべてが必要な場合は、まったく使用:withinしないでください。を使用する場合は:within、適切な距離を指定します(つまり、ラップアラウンドせずに惑星の表面に収まるように十分に小さくします)。

于 2011-02-19T23:49:48.510 に答える