同一个kmz数据同样的底图在QGIS上显示位置正常, 在Mars3d中显示就偏移了一些

问题:

1.同一个kmz数据同样的底图在QGIS上显示位置正常, 在网页中显示就偏移了一些

在qgis上的显示效果,和在mars3d的显示效果:数据明显存在偏移。

解决步骤:

1.查看了kmz数据,里面实际是tif图片数据,估计投影坐标有偏移造成的,tif用标准的4326或3857坐标系尝试

重新生成了数据为4326的,但在示例中测试后还是有偏移。

示例的测试地址:功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技

function onMounted(mapInstance) {

mapInstance.setLayersOptions([{

name: 'HN',

type: 'kml',

// url:'https://1111111111111com/file/demo-data/HNS4326.kmz',

url:'https://com/file/demo-data/HNS_3857.kmz',

center: {"lat":19.9,"lng":110.5,"alt":136098,"heading":0,"pitch":-90},

show: true,

flyTo: true

}])

}

3.最后定位到问题是,cesium内部解析的,无法干预,最好是直接替换数据为3857坐标系尝试渲染。

备注说明:1.该示例cesium内部是用RectangleEntity+图片材质,实现的

2.建议直接用ImageLayer来加载这个tif图片。

3.Mars3d关于ImageLayer的使用示例参考与api地址:

功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技

ImageLayer - V3.6.15 - Mars3D API文档

function createGroundOverlay(state, rectangleGraphics, overlays) {

const kmlDoc = state.kmlDoc;

const valueGetter = state.valueGetter;

const externalFileHandler = state.externalFileHandler;

const groundOverlay = kmlDoc.createElement("GroundOverlay");

// Set altitude mode

const altitudeMode = kmlDoc.createElement("altitudeMode");

altitudeMode.appendChild(

getAltitudeMode(state, rectangleGraphics.heightReference)

);

groundOverlay.appendChild(altitudeMode);

const height = valueGetter.get(rectangleGraphics.height);

if (defined(height)) {

groundOverlay.appendChild(

createBasicElementWithText(kmlDoc, "altitude", height)

);

}

const rectangle = valueGetter.get(rectangleGraphics.coordinates);

const latLonBox = kmlDoc.createElement("LatLonBox");

latLonBox.appendChild(

createBasicElementWithText(

kmlDoc,

"north",

CesiumMath.toDegrees(rectangle.north)

)

);

latLonBox.appendChild(

createBasicElementWithText(

kmlDoc,

"south",

CesiumMath.toDegrees(rectangle.south)

)

);

latLonBox.appendChild(

createBasicElementWithText(

kmlDoc,

"east",

CesiumMath.toDegrees(rectangle.east)

)

);

latLonBox.appendChild(

createBasicElementWithText(

kmlDoc,

"west",

CesiumMath.toDegrees(rectangle.west)

)

);

groundOverlay.appendChild(latLonBox);

// We should only end up here if we have an ImageMaterialProperty

const material = valueGetter.get(rectangleGraphics.material);

const href = externalFileHandler.texture(material.image);

const icon = kmlDoc.createElement("Icon");

icon.appendChild(createBasicElementWithText(kmlDoc, "href", href));

groundOverlay.appendChild(icon);

const color = material.color;

if (defined(color)) {

groundOverlay.appendChild(

createBasicElementWithText(kmlDoc, "color", colorToString(material.color))

);

}

overlays.push(groundOverlay);

}

相关推荐
Aniugel1 分钟前
Vue国际化实现多语言方案
前端·vue.js·面试
帅帅哥的兜兜7 分钟前
猪齿鱼 table表单编辑
前端
白兰地空瓶7 分钟前
你以为树只是画图?不——它是算法面试的“隐形主角”
前端·javascript·算法
张拭心25 分钟前
为什么说 AI 视频模型不能用来做教育?Sora-2 Veo-3 来了也不行
前端·人工智能
lvchaoq1 小时前
页面停留时间过长导致token过期问题
前端
elangyipi1231 小时前
深入理解前端项目中的 package.json 和 package-lock.json
前端·json
LYFlied1 小时前
【算法解题模板】-【回溯】----“试错式”问题解决利器
前端·数据结构·算法·leetcode·面试·职场和发展
composurext1 小时前
录音切片上传
前端·javascript·css
程序员小寒1 小时前
前端高频面试题:深拷贝和浅拷贝的区别?
前端·javascript·面试
狮子座的男孩1 小时前
html+css基础:07、css2的复合选择器_伪类选择器(概念、动态伪类、结构伪类(核心)、否定伪类、UI伪类、目标伪类、语言伪类)及伪元素选择器
前端·css·经验分享·html·伪类选择器·伪元素选择器·结构伪类