外观
坐标转换问题
829字约3分钟
2024-09-23
坐标转换,常见转换
// 屏幕坐标 转换为 笛卡尔空间直角坐标
// let cartesian3 = mars3d.PointUtil.getCurrentMousePosition(map.scene, windowPosition);//v3.8及之前版本
let cartesian3 = map.getCurrentMousePosition(windowPosition); // v3.9及之后版本
// 笛卡尔空间直角坐标 转换为 屏幕坐标
let windowPosition = mars3d.PointTrans.toWindowCoordinates(map.scene, cartesian3);
// 笛卡尔空间直角坐标 转换为 地理坐标(弧度制)
const cartographic = Cesium.Cartographic.fromCartesian(cartesian3);
// 笛卡尔空间直角坐标 转换为 地理坐标(经纬度)
const point = mars3d.LngLatPoint.fromCartesian(cartesian3);
// 地理坐标(弧度制) 转换为 笛卡尔空间直角坐标
let cartesian3 = Cesium.Cartesian3.fromRadians(lng, lat, height); // lng\lat为弧度制
// 地理坐标(经纬度) 转换为 笛卡尔空间直角坐标
let cartesian3 = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);
或者使用 mars3d.LngLatPoint 作为中间类来做转换
// 笛卡尔空间直角坐标 转换为 地理坐标(经纬度)
let point = mars3d.LngLatPoint.fromCartesian(cartesian3);
// 地理坐标(弧度制) 转换为 地理坐标(经纬度)
let point = mars3d.LngLatPoint.fromCartographic(cartographic);
// point 转换为 其他坐标
let cartesian3 = point.toCartesian(); // 转换为 笛卡尔空间直角坐标
let cartographic = point.toCartographic(); // 转换为 地理坐标(弧度制)
示例代码:
map.on(mars3d.EventType.click, (event) => {
const point = mars3d.LngLatPoint.fromCartesian(event.cartesian); // 转为经纬度
console.log("鼠标单击坐标", point);
});
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();
坐标没有高度,都是 0,怎么计算坐标,根据经纬度求高度
const {position} = graphic;
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;
});
能取得到图片最顶端的坐标吗?
要做 2 次转换,先转像素坐标,像素坐标减去高度值后转笛卡尔空间坐标
根据经纬度如何能计算得到这个经纬度切片的 xyz 坐标?
这个规则都一致的,所有 web 墨卡托的瓦片地图规则