一、转坐标系
2D与3D的坐标系是完全不一样的。除了多了一维Z,值也是完全不一样。2D一般是<200,10>这样,而3D的是<100000,100000, 20>这样。而且坐标系也有很多种
- 需要先定义坐标系, 需要源与目标两个:
需要使用proj4:
Proj4.defs(
"EPSG:4547",
"+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +type=crs"
);
Proj4.defs("EPSG:4490", "+proj=longlat +ellps=GRS80 +no_defs +type=crs");
- 转坐标系
Proj4(Proj4("EPSG:4490"), Proj4("EPSG:4547"), cor)
二. 获取地表坐标
即2d转3d坐标后,缺少z坐标。一般期望的是地表坐标。一般你用的3D引擎都会自带交点工具:
我们使用的是叫linesIntersect
, 可类似下面这样获取z坐标:
api.tools.linesIntersect([{x,y,30}, {x,y,10}])
原理是线段与覆盖物的交点。上面x与y,即是2d转化后的坐标<x,y>, 再补上30,10两个z坐标。这时有两个点<x,y,30>与<x,y, 10>,然后这两个点连成一个线段,再与地表这个覆盖物相交,交点即是地表坐标。
其中:30,10这两个值可换别的,我那地方的z坐标一般是20。