場所を含むテーブルがあり、それぞれに緯度と経度のポイントがあります。緯度と経度のポイントがあり、KM で距離が必要です。select コマンドを使用して、この距離に一致する行を db で見つける必要があります。
すべての行を選択せずに、各ポイントの関数を実行して距離を計算する方法はありますか?
ありがとう
場所を含むテーブルがあり、それぞれに緯度と経度のポイントがあります。緯度と経度のポイントがあり、KM で距離が必要です。select コマンドを使用して、この距離に一致する行を db で見つける必要があります。
すべての行を選択せずに、各ポイントの関数を実行して距離を計算する方法はありますか?
ありがとう
皆さんありがとう!ここに答えがあります:
String SelectString = "SELECT * FROM (SELECT *,(((acos(sin((";
SelectString += userLat;
SelectString += "*pi()/180)) * sin((latPoint*pi()/180))+cos((";
SelectString += userLat;
SelectString += "*pi()/180)) * cos((latPoint*pi()/180)) * cos(((";
SelectString += userLon;
SelectString += "- lonPoint)*pi()/180))))*180/pi())*60*1.1515*1.609344) as distance FROM MYTABLE ) t WHERE distance <=";
SelectString += userDistance;
使用しているSQL Serverのバージョンはわかりません.2008には、「すべての行を選択する」という懸念を回避できるジオクエリ機能があります。それ以外の場合は、次のブログ投稿が役立つ場合があります: http://johndyer.name/latitudelongitude-distance-calculation-in-sql-server/
これには計算列を使用するのが好きです。具体的には、緯度/経度である地理タイプの計算列を作成します。それがあれば、その列に対して必要なすべての空間メソッドを使用できます。