java变换投影EPSG:900913到EPSG:4326

时间:2010-02-07 14:38:07

标签: java map-projections cartography epsg

在openlayers中 我们可以简单地将EPSG:900913转换为EPSG:4326
我正在寻找一个java lib可以做到这一点 我找到了这个, http://www.jhlabs.com/java/maps/proj/index.html

但文件是c ++
 我不知道如何使用它。


如果有人知道,那 请发一个简单的代码

6 个答案:

答案 0 :(得分:2)

Jerry Huxtable在您引用的页面上令人愉快的Globe Applet确实是用Java编写的,如download中所示。类com.jhlabs.map.proj.ProjectionFactory包含名为fromPROJ4Specification()的方法,该方法返回com.jhlabs.map.proj.Projection。您可以使用EPSG:900913参数specified on the OpenLayers site来创建所需的投影。

900913:
+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0
+x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs

您还应该查看OpenMap

答案 1 :(得分:2)

另一个选择是使用OpenSource GIS Java库GeoTools:

http://geotools.org/

此处有关投影类的详细信息:

http://geotools.org/javadocs/org/geotools/referencing/operation/projection/MapProjection.html

所有投影的许多不同格式的投影定义可以从以下网址下载:

http://www.spatialreference.org/

E.g。 http://www.spatialreference.org/ref/epsg/4326/

答案 2 :(得分:2)

Geotools可能是用于此目的的最佳库。看一下他们的CRS tutorial,使用以下方法从一个坐标系转换到另一个坐标系看起来很简单:

CoordinateReferenceSystem dataCRS = schema.getCoordinateReferenceSystem();
CoordinateReferenceSystem worldCRS = map.getCoordinateReferenceSystem();
boolean lenient = true; // allow for some error due to different datums
MathTransform transform = CRS.findMathTransform(dataCRS, worldCRS, lenient);

您可以使用以下方法检索您的CRS参考:

CRS.decode("EPSG:4326")

根据javadoc

答案 3 :(得分:2)

据我所知,这是近8年前,但也许这可以帮助另一位勇敢的旅行者。

我们不得不离开GeoTools,因为它是LGPL,我们的法律人士不允许这样做。

我刚刚将代码移到proj4j(https://trac.osgeo.org/proj4j/)。看起来它并没有被积极开发,但它适用于我们的简单需求。此外,许可证是Apache 2.0,它更加宽容。

它可以通过Maven获得,因此可以轻松实现:http://search.maven.org/#artifactdetails%7Corg.osgeo%7Cproj4j%7C0.1.0%7Cjar

它并不直接支持EPSG:900913,因为它并不是真正的官方标准。它确实支持EPSG:3857,这是一回事。

以下是您正在寻找的内容片段:

public Point2D.Double transform(Point2D.Double point, String sourceCRS, String targetCRS) {
    Point2D.Double destPosition = new Point2D.Double();

    CRSFactory factory = new CRSFactory();
    CoordinateReferenceSystem srcCrs = factory.createFromName(sourceCRS); // Use "EPSG:3857" here instead of 900913.
    CoordinateReferenceSystem destCrs = factory.createFromName(targetCRS); // Use "EPSG:4326 here.
    CoordinateTransform transform = new CoordinateTransformFactory().createTransform(srcCrs, destCrs);

    ProjCoordinate srcCoord = new ProjCoordinate(point.getX(), point.getY());
    ProjCoordinate destCoord = new ProjCoordinate();
    transform.transform(srcCoord, destCoord);
    destPosition.setLocation(destCoord.x, destCoord.y);

    return destPosition;
}

答案 4 :(得分:1)

同样有趣:Proj4j

Proj4J是一个Java库,用于将点坐标从一个地理坐标系转换为另一个,包括基准转换。 该库的核心是PROJ.4 C库的一个端口。

答案 5 :(得分:0)

似乎有一个新的Apache项目,它可能是上述开放源代码项目的最新选择:

http://sis.apache.org/

它可以作为proj4的替代品:

https://sis.apache.org/book/en/developer-guide.html