在 openlayers 中,我们可以简单地将 EPSG:900913 转换为 EPSG:4326
我正在寻找可以做到这一点的 java lib。
在这里我找到了这个,
http://www.jhlabs.com/java/maps/proj/index.html
但是文档是c++的
,我不知道怎么用。
如果有人知道,
请发布一个简单的代码
在 openlayers 中,我们可以简单地将 EPSG:900913 转换为 EPSG:4326
我正在寻找可以做到这一点的 java lib。
在这里我找到了这个,
http://www.jhlabs.com/java/maps/proj/index.html
但是文档是c++的
,我不知道怎么用。
如果有人知道,
请发布一个简单的代码
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。
您引用的页面上的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。
另一种选择是使用开源 GIS Java 库 GeoTools:
此处有关投影类的详细信息:
http://geotools.org/javadocs/org/geotools/referencing/operation/projection/MapProjection.html
可以从以下位置下载所有投影的多种不同格式的投影定义:
我知道这是差不多 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;
}
也很有趣:Proj4j
Proj4J 是一个 Java 库,用于将点坐标从一个地理坐标系转换到另一个地理坐标系,包括基准面转换。这个库的核心是 PROJ.4 C 库的一个端口。
似乎有一个新的 Apache 项目,它可能是上述开源项目的更新替代方案:
它呈现为 proj4 的替代方案: