経度/緯度をマップ上のピクセルに変換します


10

ここから地図があります。任意のlon / latペアをマップ上のピクセルに簡単に変換できるようにしたい(逆変換も可能)。マップには.tfwファイルと投影情報が付属しています。

0.02222222222222 
0.00000000000000 
0.00000000000000 
-0.02222222222222 
-180.00000000000000 
90.00000000000000

と投影情報:

Projection: Plate Carree aka Geographic or "LatLong"
Earth ellipsoid: Sphere, radius 6370997 m
Datum: WGS84
Extent: 180 West to 180 East, 90 North to 90 South
Size: 16,200 height samples wide x 8,100 high
Resolution: 2.47 km/pixel

私は地図作成関連のことをまったく知らないので、私が理解している限り、まずWGS84(経度/緯度のペア)から地理的投影法に変換する必要があります(同じではありませんか?)。実際には同じように見えますが、上の投影情報の球の半径は6370997で、プレートカリー投影で見つけたspatialreference.comページとは異なります。とにかく、私はDotSpatial.Projectionsライブラリが次のコードでこれを行うことができることを発見しました:

    var kievCoordinates = new[] { 50.4546600, 30.5238000 };
    var z = new[] { 1.0 };

    var wgs84 = KnownCoordinateSystems.Geographic.World.WGS1984;
    var dest = new ProjectionInfo();
    dest.ParseEsriString(
        "PROJCS[\"WGS 84 / Plate Carree (deprecated)\",GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]],PROJECTION[\"Equidistant_Cylindrical\"],PARAMETER[\"central_meridian\",0],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]");

    Reproject.ReprojectPoints(kievCoordinates, z, wgs84, dest, 0, 1);

そして、ワールドファイルを使用して、結果の座標をマップ上のピクセルに変換する必要があります。次の式を知っています。

ウィキペディアの画像

しかし、ワールドファイルにはメートルではなく度数があり、どうすればよいかわかりません。一般的に、私は正しいことをしていますか?または、私のデータを考えると、もっと簡単な方法がありますか?


1
ワールドファイルに基づいて、ラスターは緯度経度と度を単位として使用しています。セルサイズは0.0222度です。これは、pseudo-Plate Carreeとも呼ばれます。プレートカリーは、値をスケーリングしてメートルに変換します。WGS84と呼ばれるデータムの組み合わせもありますが、radius = 6370997の球が言及されています。WKID:4326を使用してみます。
mkennedy 2016年

@mkennedy上記の式をワールドファイルに適用すると、メーター用に設計されているため、意味のある結果にならないと思いますか?また、WKID:4326の意味がわかりません。結果も表示されません。
Dmitry Marchuk 2016年

回答:


6

座標間の変換はありませんが、次のようにピクセル位置との間で変換されます。px、pyはマップ内のピクセル位置であり、geoxとgeoyは実際の座標です。また、tfwから取得したxOff、yOffがあり、-180、90にxsizeとysize、0.02222222222222、-0.02222222222222が追加されています。

pix2coord(px,py)
    geox = xOff + (px * xsize)
    geoy = yOff + (py * ysize)

coord2pix(geox, geoy)
    px = (geox - xOff) / xsize 
    py = (geoy - yOff) / ysize

上記の2つの疑似関数は、特定のピクセル位置のジオロケーション(geox、geoy)を示します。私が求めているのは、特定のジオロケーションのピクセル位置です。これが可能なのは、「プレートカリー」が経度と緯度の地理的角度を平面上の(直交座標系内の)メトリック座標として扱うためです。地球の経緯線を描くと、同じサイズの四角形になります(これがマップ画像の外観です)。エラーを編集した後、lon / lat(50.4546600、30.5238000)が表示されます(10370.459803704598、2676.42902676429)が表示されます。ピクセルが必要な場合は、整数にキャストしてください。


px = (geox + xOff) / xsizeあなたの例では、(50.4546600 + (-180)) / 0.02222222222222どちらが負であり、ほぼ等しいでしょう5830。違い2113.3936363636362ます。さらに説明するか、答えを修正してください。
Dmitry Marchuk

オリジナルコードが...私はチェックしましょう、いくつかの依存関係を持つJavaScriptでいた
アンドレアス・ミュラー

JavaScriptからのコピー中にエラーが発生したため、上記のコードとテキストを変更しました。
アンドレアス・ミュラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.