2

郵便番号から特定の範囲のすべての郵便番号を見つける必要があります。DBにすべての郵便番号lat/lonがあります。

オンラインで、互いにわずかに異なる2つの数式を見つけました。どちらが正しいですか?

式1:

def latRange = range/69.172
def lonRange = Math.abs(range/(Math.cos(Math.toRadians(zip.latitude)) * 69.172));
def minLat = zip.latitude - latRange
def maxLat = zip.latitude + latRange
def minLon = zip.longitude - lonRange
def maxLon = zip.longitude + lonRange

式2:(以下を除いて式1と同じです:)

def lonRange = Math.abs(range/(Math.cos(zip.latitude) * 69.172));

(2番目のものにはありませんMath.toRadians)min / max Lat / Lonを取得した後、between条件を使用してDBテーブルを検索する予定です。 どの式が正しいですか?

4

3 に答える 3

1

それはあなたの緯度/経度の単位に依存します。度単位の場合は、ラジアンに変換する必要があります。

于 2010-10-26T02:17:00.213 に答える
0

緯度と経度のデータがまだラジアンでない場合は、変換するデータを使用する必要があります。ただし、設定方法が正方形の範囲になることに注意する必要があります。

ピタゴラスの定理を使用して距離を見つけ、最終的に円形の範囲になるように、mysqlクエリで距離の計算を行う方がよいでしょう。この質問はあなたがそれを始めるのを助けるはずです:mySQLはyの範囲内のxkm/マイル以内の郵便番号を選択します

パフォーマンスを向上させる必要がある場合は、Sphinxを使用してインデックスを作成できます。

于 2010-10-26T02:35:45.443 に答える
0

私はdbにすべての重労働を任せることを提案します。いくつかのDBにはgeoアドオンがありますが、ここにいくつかの例があります:MongoDBpostgres + postgis

于 2010-10-26T03:04:04.983 に答える