30

いくつかの緯度/経度ポイントを期待するプログラムを作成しています。メートル単位で計算を行うために、それらを内部で UTM に変換しています。

緯度/経度ポイント自体の範囲は非常に小さく、約 200m x 200m です。ほとんどの場合、それらは単一の UTM ゾーン内にあることに依存できます (運が悪く、ゾーンの境界を越えていない限り)。

ただし、緯度/経度が含まれるゾーンは無制限です。ある日、このプログラムはオーストラリアの人々のために実行される可能性があります (そして、ああ、1 つの州でさえいくつのゾーンにまたがっており、それが私にどれほどの苦痛をもたらしたか...)、別の日にはメキシコの人々のために実行されるかもしれません。

私の質問は、特定の経度/緯度がどのゾーンにあるかを判断して、変換ライブラリに入力できるようにする方法はありますか (現在、proj4 と R パッケージを使用していますrgdal)。

私の言語は R ですが、答えは R である必要はありません。単純な計算かもしれませんし、実行可能ファイルへのシステム コールを埋め込むことができるかもしれませんproj

乾杯。

4

5 に答える 5

47

編集:地球上のすべての非極性地域で機能する (非 R) コードについては、こちらまたはこちらを参照してください。


いくつかの例外的な地域 (スバールバル諸島とノルウェーの一部)からのデータを扱っていない限り、これは R で自分で行うだけの簡単な計算です。経度が UTM ゾーン番号にどのように関係するかについてのウィキペディアの説明は次のとおりです。 :

UTM システムは、地球の表面を南緯 80 度から北緯 84 度までの 60 のゾーンに分割します。それぞれのゾーンの幅は経度 6 度です。ゾーン 1 は、西経 180° ~ 174° をカバーします。ゾーン番号は、東経 174 ~ 180 度をカバーするゾーン 60 まで東に向かって増加します。

したがって、データで本初子午線の西の経度が -180 ~ 0 度の範囲でエンコードされていると仮定すると、上記の R コード バージョンは次のようになります。

long2UTM <- function(long) {
    (floor((long + 180)/6) %% 60) + 1
}

# Trying it out for San Francisco, clearly in UTM Zone 10 
# in the figure in the Wikipedia article linked above
SFlong <- -122.4192
long2UTM(SFlong)
# [1] 10

その式は明らかに少し単純化できますが、この形式でその構造の根底にあるロジックが最も明確になると思います。経度の%% 60一部が 180 より大きいか、-180 より小さい場合に備えて、ビットがそこにあります。

于 2012-02-08T06:55:06.590 に答える
3

私はrコードを知りませんが、このPL/SQLコードが例外に役立つと思います:

   UTMZone := Trunc((lon - Zone0WestMeridian) / d);
    --Special Cases for Norway & Svalbard
    CASE 
    WHEN (lat > 55) AND (UTMZone = 31) AND (lat < 64) AND (lon >  2) THEN UTMZone := 32;
    WHEN (lat > 71) AND (UTMZone = 32) AND (lon <  9) THEN UTMZone := 31;
    WHEN (lat > 71) AND (UTMZone = 32) AND (lon >  8) THEN UTMZone := 33;
    WHEN (lat > 71) AND (UTMZone = 34) AND (lon < 21) THEN UTMZone := 33;
    WHEN (lat > 71) AND (UTMZone = 34) AND (lon > 20) THEN UTMZone := 35; 
    WHEN (lat > 71) AND (UTMZone = 36) AND (lon < 33) THEN UTMZone := 35;
    WHEN (lat > 71) AND (UTMZone = 36) AND (lon > 32) THEN UTMZone := 37;
    ELSE UTMZone := UTMZone;  
    END CASE;
于 2013-09-13T11:38:31.910 に答える