我使用v-leaflet(0.61)(一个vaadin插件)来显示地图上的某些图层。
点击地图,我为geoserver创建了一个wms查询。 查询需要一些参数,其中一个是bbox。 我认为,默认情况下,地图返回的bbox位于CRS.Simple中,这是一个神秘的传单坐标系。
即使我设置了属性
leafletMap.setCrs(Crs.EPSG3857);
myoverlayer.setCrs(Crs.EPSG3857);
到地图和图层。
我已经使用JTS拓扑套件了解了here从EPSG转换到另一个的方法。
但是我无法找到从leafltet使用的Crs.Simple转换为EPSG(4326更好)的方法。
如果我在地图和图层上设置EPSG3857,它会返回类似于边界框的内容:
Bound:6.0919189453125,45.11617660357484,11.134643554687498, 46.50217348354072
如果我使用相同的视图设置EPSG4326:
界限:6.0919189453125,44.81597900390625,11.1346435546875,
46.80450439453125
似乎只有纬度值已被更改。
我还尝试使用JTSTool(jts-topology-suite)将EPSG3857转换为EPSG4326,其值为:
BBOX = 4.0528551003362907E-4,5.4724638981914947E-5,4.1773613184440224E-4,1.0002420488398699E-4
听起来很奇怪......
有人可以帮我理解用于定义bbox的CRS吗?还是以任何方式改变它们?
"
CoordinateReferenceSystem sourceCRS = CRS.decode("EPSG:4326");
CoordinateReferenceSystem targetCRS = CRS.decode("EPSG:3857");
MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS, false);
GeometryFactory geometryFactory = new GeometryFactory(new PrecisionModel(), 4326);
com.vividsolutions.jts.geom.Point point = geometryFactory.createPoint(new Coordinate(bbb.getSouthWestLon(),bbb.getSouthWestLat() ));
com.vividsolutions.jts.geom.Point point2 = geometryFactory.createPoint(new Coordinate(bbb.getNorthEastLon(),bbb.getNorthEastLat() ));
com.vividsolutions.jts.geom.Point targetPoint = (com.vividsolutions.jts.geom.Point) JTS.transform(point, transform);
com.vividsolutions.jts.geom.Point targetPoint2 = (com.vividsolutions.jts.geom.Point) JTS.transform(point2, transform);"
答案 0 :(得分:1)
你试过Proj4Leaflet吗?我用它在标准投影和EPSG之间进行转换:2263。
第一个代码示例是我如何从2263转换为标准。
// Set the view to the centroid of the coordinates
Point p = Leaflet.Point(cx, cy);
// Unproject the geom into latlng
currentCentroid = mCrs.Projection.Unproject(p);
这是来自点击处理程序。我只需把传单给出的latlng并投射到2263。
Point proj = mCrs.Projection.Project(e.Latlng)