2

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

但是文档是c++的
,我不知道怎么用。


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

4

6 回答 6

2

Geotools可能是最好的库。看看他们的CRS 教程,从一个坐标系转换到另一个坐标系看起来很简单:

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

于 2011-05-16T20:49:30.727 回答
2

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

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

于 2010-02-07T23:23:37.973 回答
2

另一种选择是使用开源 GIS Java 库 GeoTools:

http://geotools.org/

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

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

可以从以下位置下载所有投影的多种不同格式的投影定义:

http://www.spatialreference.org/

例如http://www.spatialreference.org/ref/epsg/4326/

于 2010-02-18T15:44:14.857 回答
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;
}
于 2018-01-12T23:48:41.313 回答
1

也很有趣:Proj4j

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

于 2012-04-23T20:15:01.260 回答
0

似乎有一个新的 Apache 项目,它可能是上述开源项目的更新替代方案:

http://sis.apache.org/

它呈现为 proj4 的替代方案:

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

于 2018-07-09T07:43:30.563 回答