1

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

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

この投影法とその構成に関する公式情報をいくつか見つけました: http://ign.be/FR/FR2-1-4.shtmおよびhttp://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);
}

(私のgifが1000x1000であることを知っています)

LamberConformal コンストラクターの JavaDoc: 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 で、次の結果が得られます。

x=-1766051.0; y=-1.6355546E7;

パラメータとして「中心点」(?)を与える

x=500.0; y=500.0;

(マップの真ん中、いい感じ)

これに精通している、またはリンクから構成を把握できる人はいますか?

編集:

メソッドの最後の行をこれに置き換えてみました:

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

しかし、良くはありません。

4

1 に答える 1

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);
于 2011-07-31T06:55:56.847 に答える