在openlayers中
我们可以简单地将EPSG:900913转换为EPSG:4326
我正在寻找一个java lib可以做到这一点
我找到了这个,
http://www.jhlabs.com/java/maps/proj/index.html
但文件是c ++
我不知道如何使用它。
如果有人知道,那
请发一个简单的代码
答案 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/javadocs/org/geotools/referencing/operation/projection/MapProjection.html
所有投影的许多不同格式的投影定义可以从以下网址下载:
答案 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项目,它可能是上述开放源代码项目的最新选择:
它可以作为proj4的替代品: