2011-07-27 9 views
1

マップ(画像)のx、y座標に緯度/経度で定義された位置を投影できる関数を記述する必要があります。lambert 2008投射

地図自体は、投影タイプとして「ベルギーのランバート」を使用しているようです。

この投影法とその設定についての公式の情報はhttp://ign.be/FR/FR2-1-4.shtmhttp://ign.be/Common/Lambert2008/Transformation_Geographic_Lambert_FR.pdfです(フランス語では必要に応じて翻訳します)。

基本的に、私はいくつかのライブラリを使用する方が簡単だという結論に達しました(これは必須条件ではありません)。いくつかの研究の後で、OpenMapは仕事をすることができるはずです。

だから、ここで私がこれまでに得たものである:

private Point mapCoordinatesToPoint(LatLonPoint latLonPoint) { 
    LatLonPoint centerLatLonPoint = new LatLonPoint(50.797815, 4.3592158333333333333333333333333); 
    Proj proj = new LambertConformal(centerLatLonPoint, 1, 1000, 1000, 4.3592158333333333333333333333333, 49.833333333333333333333333333333, 51.166666666666666666666666666667, 50.797815, 649328.0, 665262.0, Ellipsoid.GRS_1980); 
    return proj.forward(latLonPoint); 
} 

LamberConformalコンストラクタの

のJavaDoc(私のGIFは1000×1000であることを知っている):http://openmap.bbn.com/doc/api/com/bbn/openmap/proj/LambertConformal.html#LambertConformal%28com.bbn.openmap.LatLonPoint,%20float,%20int,%20int,%20double,%20double,%20double,%20double,%20double,%20double,%20com.bbn.openmap.proj.Ellipsoid%29

を私は設定していなかったと思いますそれは正しい:地図上のある点、xxxは、この結果を与える:

012516410617451515053691パラメータとして「センターポイント」(?)を与える

誰でもこの精通し、またはリンクから設定を把握することができ

x=500.0; y=500.0; 

(OKに見えるマップの真ん中を、)を与えますか?

EDIT:

return proj.forward(latLonPoint.getLatitude(), latLonPoint.getLongitude(), new Point(), false); 

ではなく、よりよい:

はこれでメソッドから最後の行を置き換えてみました。

答えて

0

興味のある方は、ここで私はそれを動作させた方法です。

これは、ベルギーの地図(Lambert 72または2008のいずれかを使用しているようです)です。

Proj proj = new LambertConformal(centerLatLonPoint, scale, 1776, 1468, 
      4.3592158333333333333333333333333, //centralMeridian 
      49.833333333333333333333333333333, //lambert_sp_one 
      51.166666666666666666666666666667, //lambert_sp_two 
      50.797815, //referenceLatitude 
      649328.0, //falseEasting 
      665262.0, //falseNorthing 
      Ellipsoid.GRS_1980); 

スケールは、このように算出することができる。

LatLonPoint dePanneLatLonPoint = new LatLonPoint(51.0975f, 2.5855f); 
    Point dePannePoint = new Point(27, 313); 

    LatLonPoint mussonLatLonPoint = new LatLonPoint(49.5567f, 5.7106f); 
    Point mussonPoint = new Point(1464, 1426); 

    float scale = proj.getScale(dePanneLatLonPoint, mussonLatLonPoint, dePannePoint, mussonPoint); 

2つの点が両方の地理的座標を知っている(できるだけNWおよびSeなど)の任意の点である、これは上に投影されます地図。

また、マップの中心の地理座標を見つける必要がありました。

地図上の点の位置は、この方法を発見することができる。

 Point point = proj.forward(latitude, longitude, new Point(), false); 
関連する問題