# 坐标转换,常见转换
//屏幕坐标 转换为 笛卡尔空间直角坐标
// var cartesian3 = mars3d.PointUtil.getCurrentMousePosition(map.scene, windowPosition);//v3.8及之前版本
var cartesian3 = map.getCurrentMousePosition(windowPosition); //v3.9及之后版本
//笛卡尔空间直角坐标 转换为 屏幕坐标
var windowPosition = mars3d.PointTrans.toWindowCoordinates(map.scene, cartesian3);
//笛卡尔空间直角坐标 转换为 地理坐标(弧度制)
var cartographic = Cesium.Cartographic.fromCartesian(cartesian3);
//笛卡尔空间直角坐标 转换为 地理坐标(经纬度)
var point = mars3d.LngLatPoint.fromCartesian(cartesian3);
//地理坐标(弧度制) 转换为 笛卡尔空间直角坐标
var cartesian3 = Cesium.Cartesian3.fromRadians(lng, lat, height); //lng\lat为弧度制
//地理坐标(经纬度) 转换为 笛卡尔空间直角坐标
var cartesian3 = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
或者使用 mars3d.LngLatPoint 作为中间类来做转换
//笛卡尔空间直角坐标 转换为 地理坐标(经纬度)
var point = mars3d.LngLatPoint.fromCartesian(cartesian3);
//地理坐标(弧度制) 转换为 地理坐标(经纬度)
var point = mars3d.LngLatPoint.fromCartographic(cartographic);
//point 转换为 其他坐标
var cartesian3 = point.toCartesian(); //转换为 笛卡尔空间直角坐标
var cartographic = point.toCartographic(); //转换为 地理坐标(弧度制)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
示例代码:
map.on(mars3d.EventType.click, function (event) {
var point = mars3d.LngLatPoint.fromCartesian(event.cartesian); //转为经纬度
console.log("鼠标单击坐标", point);
});
1
2
3
4
2
3
4
# Mars3d 根据经纬度能知道是哪个城市吗?
调用高德、百度、天地图的逆地理编码就行 http://mars3d.cn/api/GaodePOI.html?classFilter=gaode#getAddress
# app 项目定位精度很差有没有好的解决办法?
定位精度目前依赖手机浏览器来定位的 , 如果再优化就需要利用第 3 方库来提高精度,如百度或高德 js,或封装安卓 app 后的 plus 的 h5 方式
# 同一个页面,可以展示不同坐标系吗
basemap 是 epsg4326 的。,layer 图层是 epsg 4450 的。可以在一个页面中展示吗? 回复: 可以不同坐标系叠加,但 layer 图层是 epsg 4450 的只支持 arcgis 动态服务,其他情况的不支持 wmts 只支持 3 个坐标系,EPSG4490\4326\3857
# Mars3d 高德的定位 api 如何配置才能正确定位
参考示例中的这几个文件,首先需要运行浏览器访问你的位置,如果请求超时可能需要代理。
# 想获取到当前视窗的地图范围,请问有什么方法可以拿到吗
比如当前视窗地图范围的边界点,每个边界点的经纬度 mars3d 的 API 文档中有相关的方法:具体使用可以参考文档地址:http://mars3d.cn/api/Map.html?classFilter=map#getExtent 主要是 getExtent 方法,此方法的返回值为一个对象,可以使用如下方式进行从中取需要的值即可
const { xmin, xmax, ymin, ymax, height } = map.getExtent();
1
# 坐标没有高度,都是 0,怎么计算坐标,根据经纬度求高度
const position = graphic.position;
mars3d.PointUtil.getSurfaceHeight(map.scene, graphic.position, {
has3dtiles: true,
}).then((result) => {
console.log(
"原始高度为:" +
result.height_original.toFixed(2) +
",贴地高度:" +
result.height.toFixed(2)
);
graphic.position = result.position;
});
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 能取得到图片最顶端的坐标吗?
要做 2 次转换,先转像素坐标,像素坐标减去高度值后转笛卡尔空间坐标
# 根据经纬度如何能计算得到这个经纬度切片的 xyz 坐标?
这个规则都一致的,所有 web 墨卡托的瓦片地图规则