28

Javaで、地表の位置を緯度、経度からUTMに変換する方法を知っている人はいますか(WGS84など)? 私は現在 Geotools を見ていますが、残念ながら解決策は明らかではありません。

4

5 に答える 5

19

いくつかのサンプル コードに基づいて、Geotools 2.4 を使用して機能するものを取得できました。

double utmZoneCenterLongitude = ...  // Center lon of zone, example: zone 10 = -123
int zoneNumber = ...                 // zone number, example: 10
double latitude, longitude = ...     // lat, lon in degrees

MathTransformFactory mtFactory = ReferencingFactoryFinder.getMathTransformFactory(null);
ReferencingFactoryContainer factories = new ReferencingFactoryContainer(null);

GeographicCRS geoCRS = org.geotools.referencing.crs.DefaultGeographicCRS.WGS84;
CartesianCS cartCS = org.geotools.referencing.cs.DefaultCartesianCS.GENERIC_2D;

ParameterValueGroup parameters = mtFactory.getDefaultParameters("Transverse_Mercator");
parameters.parameter("central_meridian").setValue(utmZoneCenterLongitude);
parameters.parameter("latitude_of_origin").setValue(0.0);
parameters.parameter("scale_factor").setValue(0.9996);
parameters.parameter("false_easting").setValue(500000.0);
parameters.parameter("false_northing").setValue(0.0);

Map properties = Collections.singletonMap("name", "WGS 84 / UTM Zone " + zoneNumber);
ProjectedCRS projCRS = factories.createProjectedCRS(properties, geoCRS, null, parameters, cartCS);

MathTransform transform = CRS.findMathTransform(geoCRS, projCRS);

double[] dest = new double[2];
transform.transform(new double[] {longitude, latitude}, 0, dest, 0, 1);

int easting = (int)Math.round(dest[0]);
int northing = (int)Math.round(dest[1]);
于 2008-10-07T01:43:31.080 に答える
4

座標の変換は、実際には数行のコードで実行できます。

Coordinate coordinate = new Coordinate(x, y);
MathTransform transform = CRS.findMathTransform(CRS.decode("EPSG:4326"), CRS.decode("EPSG:3857"), false);
JTS.transform(coordinate, coordinate, transform); 

これにより、経度/緯度座標 (EPSG:4326) が Web メルカトル図法 (EPSG:3857) 座標に変換されます。

ビルド ツール (maven など) で次の 2 つの GeoTools ライブラリに依存する必要があります。

<repositories>
    <repository>
        <id>osgeo</id>
        <name>Open Source Geospatial Foundation Repository</name>
        <url>http://download.osgeo.org/webdav/geotools/</url>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>org.geotools</groupId>
        <artifactId>gt-api</artifactId>
        <version>${geotools.version}</version>
    </dependency>
    <dependency>
        <groupId>org.geotools</groupId>
        <artifactId>gt-epsg-hsql</artifactId>
        <version>${geotools.version}</version>
    </dependency>
</dependencies>

この回答は、gis.stackexchange.comの質問/回答に基づいています。ここでの現在の回答は非常に冗長であるように思われるため、返信を投稿しました。

于 2016-07-15T14:51:58.273 に答える
1

このプロジェクトhttps://github.com/Berico-Technologies/Geo-Coordinate-Conversion-Java/を使用して、jitpack を使用して既存の pom.xml に追加できます。

UTM 座標 (30N、これは 30 ゾーンと北半球) を緯度と経度に変換することに成功しました。以下の私の例を参照してください。

public void setPunto(Point punto) {
    this.punto = punto;
    LatLon latlon = UTMCoord.locationFromUTMCoord(30, AVKey.NORTH, punto.getX(), punto.getY());
    this.latitud = latlon.getLatitude().degrees;
    this.longitud = latlon.getLongitude().degrees;
}

Point クラスは com.vividsolutions.jts.geom.Point クラス タイプであることに注意してください。

于 2015-11-19T14:17:01.083 に答える
1

私のプロジェクトでは、Ahmed TahaのライブラリLatLongLibを使用しています。座標を UTM システムから緯度経度システムに、またはその逆に変換するのは非常に簡単だと思います。クラス UTMUtils、UTMPoint、LatLonPoint をいじるだけです。

以前、私もJcoordを選択することを検討しました。それも簡単で、要点がわかりました。ただし、WGS84 楕円体を使用する必要があり、当時は LatLongLib だけがその機能を持っているようでした。

于 2015-02-20T10:08:16.200 に答える