2016-10-02 10 views
0

私はレーダーから多くの座標を取得するが、これらの座標はGoogleマップの座標とほとんど同じであるが、私は会社に尋ねた。私はアルバーの投影上の座標を得るために、私は次の操作を行う必要があります:あなたは、その後2 CoordinateReferenceSystemを作成することができます経度と緯度をイメージに変換するX、Yピクセルの座標をAlberの投影に合わせる

(すなわち 座標系)、デフォルトとして1(ある経度/緯度を設定)、 をWKT文字列(投影されるx/y)でもう一方を設定します。その後、 は、簡単に2つのMathTransformを作成して の両方の方向に変換できます。

これはアルバーの投影にOGC WKTです:私は何を得るからそう

PROJCS["unnamed", 
    GEOGCS["WGS 84", 
     DATUM["WGS_1984", 
      SPHEROID["WGS 84",6378137,298.2572235629972, 
       AUTHORITY["EPSG","7030"]], 
      AUTHORITY["EPSG","6326"]], 
     PRIMEM["Greenwich",0], 
     UNIT["degree",0.0174532925199433], 
     AUTHORITY["EPSG","4326"]], 
    PROJECTION["Albers_Conic_Equal_Area"], 
    PARAMETER["standard_parallel_1",31.996308], 
    PARAMETER["standard_parallel_2",33.996308], 
    PARAMETER["latitude_of_center",32.996308], 
    PARAMETER["longitude_of_center",35.415901], 
    PARAMETER["false_easting",0], 
    PARAMETER["false_northing",0], 
    UNIT["metre",1,AUTHORITY["EPSG","9001"]]] 

、私はアルバーの投影地図画像上に表示するようにそのWKTの投影に長い/緯度から変換する必要があります。 、それが理由座標系を間違っ源の可能性があり、今

(-38422.86847540497, 111410.0483012808, NaN) 

だからGeoToolsに、私は次のコードを使用:

CoordinateReferenceSystem source = CRS.decode("EPSG:4326"); 
    CoordinateReferenceSystem target = CRS.parseWKT("PROJCS[\"unnamed\", GEOGCS[\"WGS 84\", DATUM[\"WGS_1984\", SPHEROID[\"WGS 84\",6378137,298.2572235629972, AUTHORITY[\"EPSG\",\"7030\"]], AUTHORITY[\"EPSG\",\"6326\"]], PRIMEM[\"Greenwich\",0], UNIT[\"degree\",0.0174532925199433], AUTHORITY[\"EPSG\",\"4326\"]], PROJECTION[\"Albers_Conic_Equal_Area\"], PARAMETER[\"standard_parallel_1\",31.996308], PARAMETER[\"standard_parallel_2\",33.996308], PARAMETER[\"latitude_of_center\",32.996308], PARAMETER[\"longitude_of_center\",35.415901], PARAMETER[\"false_easting\",0], PARAMETER[\"false_northing\",0], UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]]]"); 
    MathTransform transform = CRS.findMathTransform(source, target, true); 

    Coordinate c = JTS.transform(new Coordinate(34, 35), new Coordinate(), transform); 
    System.out.println(c.toString()); 

をそして、それは私が手に出力ですしかし、デフォルトでlong/latシステムの意味はどうでしたか?

これを解決しても、マップ画像にこれらのポイントを表示するにはどうすればよいですか?私はイメージの幅/高さを知っていなければならないのですか?

答えて

0

このアルバープロジェクションWKTは、EPSG 4326からゼロ点(パラメータを参照)からメートル単位で投影します。それがメートルであるかどうか私たちはどのように知るでしょうか? WKTにはユニット単位のUNITラベルが設定されているためです。

私はどのように使用しましたか?

私の会社は地図のJPEGファイルと地図の定数のXMLファイルの2つのファイルを私に渡しました。

マップ定数XMLファイルには、マップのゼロ点からマップのコーナーまでの距離が含まれています。だから、地図上に少なくとも1つのポイントがあれば、すべてを見つけることができます。

あなたはそれがX/Yをマップするために変換するために知っておくべきこと:

  • (私の場合にはその1.6正確に1マイル)の各画素では何キロ
  • 上の少なくとも1つの既知のポイントゼロ点からの距離のマップが

これは、私はそれをやった方法です:

 MathTransform transform = CRS.findMathTransform(epsg4326, targetWKT, true); 

     DirectPosition2D srcDirectPosition2D 
       = new DirectPosition2D(epsg4326, latitude, longitude); 
     DirectPosition2D destDirectPosition2D 
       = new DirectPosition2D(); 
     transform.transform(srcDirectPosition2D, destDirectPosition2D); 

     double transX = destDirectPosition2D.x; 
     double transY = destDirectPosition2D.y; 

     int kmPerPixel = mapImage.getWidth/1024; // It is known to me that my map is 1024x1024km ... 

     double x = zeroPointX + ((transX * 0.001) * kmPerPixel); 
     double y = zeroPointY + (((transX * -1) * 0.001) * kmPerPixel); 

zeroPointXそして、あなたは私のコーナーで行ったのと同じように、距離のある地図上のポイントに、追加することなく同じ計算を行うことができます。

何人かの人々を助けるかもしれないので、私が考え出したものを投稿しました。

関連する問題