mars3d实现禁止地图移动,禁止地图左右平移,但是鼠标可以移动的效果。

new mars3d.layer.GeoJsonLayer({渲染后实现鼠标左键按住不释放拖动时,地图不跟着拖动效果

当前问题:

1.在map初始化,或者是加载效果的时候,整个地球的场景都是一样的。

如果鼠标左键按住不释放,在屏幕上拖动的时候,地图会跟着拖动。

2.想要的效果是,鼠标左键按住不释放,拖动的时候,地图不跟着跑

效果描述:

1.左键按住就会拖动地图跑

相关示例链接:

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

这种时候,就需要对整个场景的相机进行相关设置:

可以直接通过原生cesium的api进行实现。

关键代码:

map.viewer.scene.screenSpaceCameraController.enableRotate = false

限制相机的操作,平移,旋转,2、3D视角各不同

说明:Mars3d的api同样支持限制修改,相机操作相关参数

搜索api:Mars3D三维可视化平台 | 火星科技

效果实时体验:在以下代码全部复制到我们示例运行即可

import * as mars3d from "mars3d"export let map // mars3d.Map三维地图对象
export let graphicLayer // 矢量图层对象
export const eventTarget = new mars3d.BaseClass() // 事件对象,用于抛出事件到面板中// 需要覆盖config.json中地图属性参数(当前示例框架中自动处理合并)
export const mapOptions = {scene: {center: { lat: 30.402686, lng: 116.303632, alt: 48692, heading: 3, pitch: -43 }}
}/*** 初始化地图业务,生命周期钩子函数(必须)* 框架在地图初始化完成后自动调用该函数* @param {mars3d.Map} mapInstance 地图对象* @returns {void} 无*/
export function onMounted(mapInstance) {map = mapInstance // 记录首次创建的map// map.on(mars3d.EventType.removeLayer, function (event) {//   console.log("移除了图层", event)// })map.viewer.scene.screenSpaceCameraController.enableRotate = falseshowDraw()
}/*** 释放当前地图业务的生命周期函数* @returns {void} 无*/
export function onUnmounted() {map = null
}function removeLayer() {if (graphicLayer) {graphicLayer.clear()map.removeLayer(graphicLayer, true)graphicLayer = null}if (tilesetLayer) {map.removeLayer(tilesetLayer, true)tilesetLayer = null}
}/*** 平台通过draw标绘后保存的geojosn数据(已经内置style了,无需配置symbol)*/
export function showDraw(isFlyTo) {removeLayer()graphicLayer = new mars3d.layer.GeoJsonLayer({name: "标绘示例数据",url: "//data.mars3d.cn/file/geojson/mars3d-draw.json",popup: "{type} {name}",queryParameters: {token: "mars3d" // 可以传自定义url参数,如token等},symbol: {merge: true,styleOptions: {// 高亮时的样式highlight: {type: "click",opacity: 0.9}}},flyTo: isFlyTo})map.addLayer(graphicLayer)// load事件,必须在load完成前绑定才能监听graphicLayer.on(mars3d.EventType.load, function (event) {if (event.layer) {console.log("数据加载完成", event)}})setTimeout(() => {// readyPromise是可以load加载数据完成后去获取graphicLayer.readyPromise.then(function (layer) {console.log("readyPromise:数据加载完成", layer)})}, 5000)// 单击事件graphicLayer.on(mars3d.EventType.click, function (event) {console.log("单击了图层", event)})
}/*** 点数据*/
export function showPoint() {removeLayer()window._test_button_click = function (attr) {globalAlert(JSON.stringify(attr), "测试查看详情")}graphicLayer = new mars3d.layer.GeoJsonLayer({name: "体育设施点",url: "//data.mars3d.cn/file/geojson/hfty-point.json",symbol: {styleOptions: {image: "img/marker/mark-red.png",verticalOrigin: Cesium.VerticalOrigin.BOTTOM,scale: 1,scaleByDistance: true,scaleByDistance_far: 20000,scaleByDistance_farValue: 0.5,scaleByDistance_near: 1000,scaleByDistance_nearValue: 1,// setHeight: 5000, //指定高度label: {text: "{项目名称}",font_size: 25,color: "#ffffff",outline: true,outlineColor: "#000000",pixelOffsetY: -25,scaleByDistance: true,scaleByDistance_far: 80000,scaleByDistance_farValue: 0.5,scaleByDistance_near: 1000,scaleByDistance_nearValue: 1,distanceDisplayCondition: true,distanceDisplayCondition_far: 80000,distanceDisplayCondition_near: 0}}},popup: [{ field: "项目名称", name: "项目名称" },{ field: "建设性质", name: "建设性质" },{ field: "设施级别", name: "设施级别" },{ field: "所属区县", name: "所属区县" },{ field: "建筑内容及", name: "建筑内容" },{ field: "新增用地(", name: "新增用地" },{ field: "开工", name: "开工" },{ field: "总投资(万", name: "总投资" },{ field: "资金来源", name: "资金来源" },{ field: "初步选址", name: "初步选址" },{ field: "设施类型", name: "设施类型" },{ field: "设施等级", name: "设施等级" },{ field: "所在区县", name: "所在区县" },{ field: "具体位置", name: "具体位置" },{ field: "建设内容(", name: "建设内容" },{ field: "用地面积(", name: "用地面积", format: "mars3d.MeasureUtil.formatArea" },{ field: "设施规模(", name: "设施规模" },{ field: "举办者类型", name: "举办者类型" },{ field: "开工时间", name: "开工时间" },{ field: "总投资额(", name: "总投资额", unit: "亿元" },{ field: "项目推进主", name: "项目推进主体" },{ field: "项目进度", name: "项目进度" },{ field: "项目来源", name: "项目来源" },{ field: "备注", name: "备注" },{ name: "详情", type: "button", className: "mars3d-popup-btn-custom", callback: "_test_button_click" }],flyTo: true})map.addLayer(graphicLayer)// 绑定事件graphicLayer.on(mars3d.EventType.load, function (event) {console.log("数据加载完成", event)})graphicLayer.on(mars3d.EventType.click, function (event) {console.log("单击了图层", event)})
}/*** 全国省界*/
export function showChinaLine() {removeLayer()graphicLayer = new mars3d.layer.GeoJsonLayer({name: "全国省界",url: "//data.mars3d.cn/file/geojson/areas/100000_full.json",format: simplifyGeoJSON, // 用于自定义处理geojsonsymbol: {type: "polylineP",styleOptions: {width: 2,materialType: mars3d.MaterialType.LineFlow,materialOptions: {color: "#00ffff",image: "img/textures/fence-line.png",speed: 10,repeat_x: 10},distanceDisplayCondition: true,distanceDisplayCondition_far: 12000000,distanceDisplayCondition_near: 100000,label: {text: "{name}",position: "{center}", // 省会位置centerfont_size: 30,color: "#ffffff",outline: true,outlineColor: "#000000",scaleByDistance: true,scaleByDistance_far: 60000000,scaleByDistance_farValue: 0.2,scaleByDistance_near: 1000000,scaleByDistance_nearValue: 1,distanceDisplayCondition: true,distanceDisplayCondition_far: 10000000,distanceDisplayCondition_near: 100000,setHeight: 10000}}},flyTo: true})map.addLayer(graphicLayer)// 绑定事件graphicLayer.on(mars3d.EventType.load, function (event) {console.log("数据加载完成", event)})
}// 简化geojson的坐标
function simplifyGeoJSON(geojson) {try {geojson = turf.simplify(geojson, { tolerance: 0.0001, highQuality: true, mutate: true })} catch (e) {//}return geojson
}/*** 显示合肥区域面*/
export function showRegion() {removeLayer()graphicLayer = new mars3d.layer.GeoJsonLayer({name: "合肥市",url: "//data.mars3d.cn/file/geojson/areas/340100_full.json",symbol: {styleOptions: {fill: true,randomColor: true, // 随机色opacity: 0.3,outline: true,outlineStyle: {color: "#FED976",width: 3,opacity: 1},// 高亮时的样式highlight: {opacity: 0.9,outlineStyle: {width: 6,color: "#ff0000",addHeight: 100},label: { show: true }},label: {show: false,// 面中心点,显示文字的配置text: "{name}", // 对应的属性名称opacity: 1,font_size: 40,color: "#ffffff",font_family: "楷体",outline: true,outlineColor: "#000000",outlineWidth: 3,background: false,backgroundColor: "#000000",backgroundOpacity: 0.1,font_weight: "normal",font_style: "normal",scaleByDistance: true,scaleByDistance_far: 20000000,scaleByDistance_farValue: 0.1,scaleByDistance_near: 1000,scaleByDistance_nearValue: 1,distanceDisplayCondition: false,distanceDisplayCondition_far: 10000,distanceDisplayCondition_near: 0,visibleDepth: false}}},popup: "{name}",// "tooltip": "{name}",flyTo: true})map.addLayer(graphicLayer)// 绑定事件graphicLayer.on(mars3d.EventType.load, function (event) {console.log("数据加载完成", event)})graphicLayer.on(mars3d.EventType.click, function (event) {console.log("单击了图层", event)})
}// 规划面
export function showPlanningSurface() {removeLayer()map.setCameraView({ lat: 31.591382, lng: 120.718945, alt: 784, heading: 279, pitch: -67 })graphicLayer = new mars3d.layer.GeoJsonLayer({id: 1987,name: "用地规划",// 1.支持URLurl: "//data.mars3d.cn/file/geojson/guihua.json",// 2.也支持直接传入数据// data: {//   type: "FeatureCollection",//   name: "用地规划",//   features: [] //数据已省略,可以从上面guihua.json中复制// },symbol: {type: "polygonC",styleOptions: {opacity: 0.6,color: "#0000FF"},styleField: "类型",styleFieldOptions: {一类居住用地: { color: "#FFDF7F" },二类居住用地: { color: "#FFFF00" },社区服务用地: { color: "#FF6A38" },幼托用地: { color: "#FF6A38" },商住混合用地: { color: "#FF850A" },行政办公用地: { color: "#FF00FF" },文化设施用地: { color: "#FF00FF" },小学用地: { color: "#FF7FFF" },初中用地: { color: "#FF7FFF" },体育场用地: { color: "#00A57C" },医院用地: { color: "#A5527C" },社会福利用地: { color: "#FF7F9F" },商业用地: { color: "#FF0000" },商务用地: { color: "#7F0000" },营业网点用地: { color: "#FF7F7F" },一类工业用地: { color: "#A57C52" },社会停车场用地: { color: "#C0C0C0" },通信用地: { color: "#007CA5" },排水用地: { color: "#00BFFF" },公园绿地: { color: "#00FF00" },防护绿地: { color: "#007F00" },河流水域: { color: "#7FFFFF" },配建停车场: { color: "#ffffff" },道路用地: { color: "#ffffff" }}},popup: "类型:{类型}"// flyTo: true,})map.addLayer(graphicLayer)// 下面代码演示如果再config.json中配置的图层,如何绑定额外事件方法// 绑定config.json中对应图层配置的"id"值图层的单击事件(比如下面是id:1987对应图层)const layerTest = map.getLayerById(1987)// 绑定事件layerTest.on(mars3d.EventType.load, function (event) {console.log("数据加载完成", event)})layerTest.on(mars3d.EventType.click, function (event) {// 单击事件console.log("单击了图层", event)})
}/*** 立体建筑物*/
export function showBuilding() {removeLayer()graphicLayer = new mars3d.layer.GeoJsonLayer({name: "建筑物面",url: "//data.mars3d.cn/file/geojson/buildings-demo.json",symbol: {styleOptions: {color: "#0d3685",outlineColor: "#0d3685",opacity: 0.8},callback: function (attr, styleOpt) {const diffHeight = Number(attr.floors || 1) * Number(attr.flo_height)return { height: 0, diffHeight }}},center: { lat: 31.928659, lng: 120.420654, alt: 838, heading: 344, pitch: -42 },popup: "all",popupOptions: {showNull: true},flyTo: true})map.addLayer(graphicLayer)// 绑定事件graphicLayer.on(mars3d.EventType.load, function (event) {console.log("数据加载完成", event)})
}/***  分层分户立体建筑物*/
export function showFloor() {removeLayer()graphicLayer = new mars3d.layer.GeoJsonLayer({name: "分层分户建筑物面",url: "//data.mars3d.cn/file/geojson/huxing.json",symbol: {styleOptions: {color: "#ffffff",opacity: 0.2,outline: true,outlineColor: "#63AEFF",outlineOpacity: 0.3,highlight: {type: "click",color: "#00ffff",opacity: 0.6}},callback: function (attr, styleOpt) {const flrH = attr.floorh || 0 // 底面高度const lyrH = attr.layerh || 0 // 楼层高度return { height: flrH, diffHeight: lyrH }}},// popup: "all",center: { lat: 31.821524, lng: 117.179329, alt: 255, heading: 25, pitch: -48 },flyTo: true})map.addLayer(graphicLayer)// 绑定事件graphicLayer.on(mars3d.EventType.load, function (event) {console.log("数据加载完成", event)})
}/*** 行政区划 ,转为wall显示*/
export function showBoundaryWall() {removeLayer()map.setCameraView({ lat: 30.561661, lng: 117.663884, alt: 113078, heading: 346, pitch: -43 })graphicLayer = new mars3d.layer.GeoJsonLayer({name: "合肥市",url: "//data.mars3d.cn/file/geojson/areas/340100_full.json",symbol: {type: "wall",styleOptions: {diffHeight: 5000, // 墙高materialType: mars3d.MaterialType.LineFlow,materialOptions: {color: "#00ffff", // 颜色opacity: 0.6, // 透明度image: "img/textures/fence.png", // 图片repeatX: 1, // 重复数量axisY: true, // 竖直方向speed: 10 // 速度},// 高亮时的样式highlight: {type: "click",color: "#ffff00"}}},popup: "{name}"// "tooltip": "{name}",// flyTo: true,})map.addLayer(graphicLayer)// 绑定事件graphicLayer.on(mars3d.EventType.load, function (event) {console.log("数据加载完成", event)})graphicLayer.on(mars3d.EventType.click, function (event) {console.log("单击了图层", event)})
}/*** 显示特殊面数据(单体化)*/
let tilesetLayer
export function showMonomer() {removeLayer()// 三维模型if (!tilesetLayer) {tilesetLayer = new mars3d.layer.TilesetLayer({name: "文庙",type: "3dtiles",url: "//data.mars3d.cn/3dtiles/qx-simiao/tileset.json",position: { alt: 38.8 },maximumScreenSpaceError: 1,show: true})map.addLayer(tilesetLayer)}graphicLayer = new mars3d.layer.GeoJsonLayer({name: "文庙-单体化",url: " //data.mars3d.cn/file/geojson/dth-wm.json",symbol: {type: "polygonP",styleOptions: {// 单体化默认显示样式color: "rgba(255, 255, 255, 0.01)",clampToGround: true,classification: true,// 单体化鼠标移入或单击后高亮的样式highlight: {// type: mars3d.EventType.click,color: "rgba(255,255,0,0.4)"}}},popup: [{ field: "name", name: "房屋名称" },{ field: "jznf", name: "建造年份" },{ field: "ssdw", name: "所属单位" },{ field: "remark", name: "备注信息" }],center: { lat: 33.589442, lng: 119.031613, alt: 254, heading: 5, pitch: -37 },flyTo: true})map.addLayer(graphicLayer)// 绑定事件graphicLayer.on(mars3d.EventType.load, function (event) {console.log("数据加载完成", event)})
}/*** 显示世界各国*/
export function showWorld() {removeLayer()map.setCameraView({ lat: 22.564341, lng: 89.44688, alt: 10817167, heading: 0, pitch: -87 })graphicLayer = new mars3d.layer.GeoJsonLayer({name: "国界线",url: "//data.mars3d.cn/file/geojson/world.json",symbol: {type: "polygonP",styleOptions: {fill: true,// color: '#ffffff',// opacity: 0.01,randomColor: true,opacity: 0.5,// 高亮时的样式highlight: {type: "click",color: "#ffff00"}},styleField: "name",styleFieldOptions: {Russia: { clampToGround: true }}},popup: "{name} {name_cn}"})map.addLayer(graphicLayer)// 绑定事件graphicLayer.on(mars3d.EventType.load, function (event) {console.log("数据加载完成", event)})graphicLayer.on(mars3d.EventType.click, function (event) {console.log("单击了图层", event)})
}// 加载GCJ数据进行纠偏
export function showGCJ02Data() {removeLayer()const gcjLayer = new mars3d.layer.GeoJsonLayer({name: "纠偏前",url: "//data.mars3d.cn/file/geojson/areas/340303.json",symbol: {styleOptions: {fill: false,outline: true,outlineStyle: {color: "#FF0000",width: 3}}},popup: "纠偏前GCJ02坐标"})map.addLayer(gcjLayer)graphicLayer = new mars3d.layer.GeoJsonLayer({name: "纠偏后",url: "//data.mars3d.cn/file/geojson/areas/340303.json",chinaCRS: mars3d.ChinaCRS.GCJ02, // 标识数据坐标,内部会纠偏symbol: {styleOptions: {fill: false,outline: true,outlineStyle: {color: "#00ffff",width: 3}}},popup: "纠偏后WGS坐标",flyTo: true})map.addLayer(graphicLayer)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/825770.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

还在 MySQL 中使用枚举?小心有坑~

为什么使用枚举 限定值的取值范围,比如性别(男,女,未知)等。 枚举类型使用陷阱 1.超级不推荐在mysql中设置某一字段类型为enum,但是存的值为数字,比如‘0’,‘1’,‘2…

软考135-上午题-【软件工程】-软件配置管理

备注: 该部分考题内容在教材中找不到。直接背题目 一、配置数据库 配置数据库可以分为以下三类: (1) 开发库 专供开发人员使用,其中的信息可能做频繁修改,对其控制相当宽松 (2) 受控库 在生存期某一阶段工作结束时发布的阶段产…

【算法】深度优先遍历(DFS)算法详解与实现

文章目录 1.算法原理2. 常见的深度优先遍历方式3. 代码实现总结 深度优先遍历(DFS)是一种常用的树或图的遍历算法,它通过尽可能深地搜索树或图的分支,直到路径上的所有节点都被访问完毕,然后再回溯到上一层&#xff0c…

什么是云渲染?云渲染平台怎么使用?云渲染怎么收费?

什么是云渲染? 云渲染是一种利用云计算技术提供的云端服务,用户可以将本地任务递交到远程服务器上,由远程计算集群协调和完成渲染,并将结果返回本地,最后用户可以在本地下载渲染结果。 而实时云渲染则是云渲染的一种…

python入门之简洁安装VS保姆版安装(含虚拟环境)

11、保姆版安装 Anoconda安装(python的一个发行版本) 优点:集成了许多关于python科学计算的第三方库,保姆级别 下载:www.anaconda.com/download/ 版本默认64位,py37 √:add anaconda to my…

OCP Java17 SE Developers 复习题14

答案 C. Since the question asks about putting data into a structured object, the best class would be one that deserializes the data. Therefore, ObjectInputStream is the best choice, which is option C. ObjectWriter, BufferedStream, and ObjectReader are no…

可视化看板有那么多应用场景,该如何快速搭建?可视化工具该如何选择?

在当今的信息化时代,数据已经成为了现代决策的核心。无论是企业战略规划、运营管理,还是个人生活决策,数据都扮演着至关重要的角色。随着数据分析技术和工具的不断进步,数据在决策中的作用将变得更加突出,对组织和个人…

代码随想录算法训练营第三十六天|435. 无重叠区间,763.划分字母区间,56. 合并区间

题目:435. 无重叠区间 给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi]。返回需要移除区间的最小数量,使剩余区间互不重叠。 题目链接/讲解链接: https://programmercarl.com/0435.%E6%97%A0%E9%87%8D%E5%8F%A0…

密文字段模糊检索方案

代码地址: https://github.com/zuiyu-main/EncryptDemo https://mp.weixin.qq.com/s/cXOg1tiMtJz2eibDZmXHUQ 在个别特殊领域中,数据的安全问题是非常的重要的,所以需要数据库存储的数据是需要加密存储的。所以也就引申出来本文这个问题,加密…

【每日刷题】Day7

【每日刷题】Day7 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 206. 反转链表 - 力扣(LeetCode) 2. 203. 移除链表元素 - 力扣(…

重磅!Meta 发布 Llama 3,前所未有的强大功能和多模态能力|TodayAI

Meta今日宣布推出其最新一代尖端开源大型语言模型Llama 3。该模型预计很快将在多个领先的云服务平台上线,包括AWS、Databricks、Google Cloud、Hugging Face、Kaggle、IBM WatsonX、Microsoft Azure、NVIDIA NIM和Snowflake。 Llama 3模型得到了AMD、AWS、Dell、In…

【深度学习】yolov5目标检测学习与调试

2024.4.15 -2024.4.16 完结 0.准备&&补充知识点 yolo检测算法可以实现目标检测、分割和分类任务。 项目仓库地址:https://github.com/ultralytics/yolov5 跟练视频:目标检测 YOLOv5 开源代码项目调试与讲解实战 lux下载视频神器:h…

2W 3KVDC 隔离 稳压单输出 DC/DC 电源模块——TPK-SAR 系列介绍

TPK-SAR系列产品是专门针对PCB上分布式电源系统中需要与输入电源隔离且输出精度要求较高的电源应用场合而设计。该产品适用于;1)输入电源的电压变化≤5%;2)输入输出之前要求隔离电压≥3000VDC;3)对输出电压…

idea新建一个springboot项目

本文分为几个部分, 首先是在idea中新建项目, 然后是配置 项目的目录(新建controller、service、dao等), 然后是自定义的一些工具类(比如启动后打印地址等)。 1.、创建篇 新建项目&#xff0…

IO基础-传统I/O模型

关于IO数据流有两种形式,来源于网络和磁盘分别叫做网络IO、磁盘IO。 客户端通过TCP和UDP协议将数据流发往服务端,服务端接收数据这个过程称为网络IO。 服务端读取本地文件数据到服务中的过程称为磁盘IO。 基于 Linux 一切皆文件的理念,在内…

[大模型]Qwen-7B-Chat WebDemo

Qwen-7B-Chat WebDemo 环境准备 在autodl平台中租一个3090等24G显存的显卡机器,如下图所示镜像选择PyTorch–>2.0.0–>3.8(ubuntu20.04)–>11.8 接下来打开刚刚租用服务器的JupyterLab,并且打开其中的终端开始环境配置、模型下载和运行demo…

AI大模型日报#0419:全球最强开源大模型 Llama 3 发布:15T 数据预训练,参数将超 4000 亿

导读: 欢迎阅读《AI大模型日报》,内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。 标题: 刚刚,全球最强开源大模型 Llama 3 发布:使用 15T 数据预训练,最大模型参数将超 4000 亿 摘要…

【目标跟踪】ByteTrack详解与代码细节

文章目录 一、前言二、代码详解2.1、新起航迹2.2、预测2.3、匹配2.4、结果发布2.5、总结 三、流程图四、部署 一、前言 论文地址:https://arxiv.org/pdf/2110.06864.pdf git地址:https://github.com/ifzhang/ByteTrack ByteTrack 在是在 2021 年 10 月…

书生浦语训练营第2期-第4节笔记

一、为什么要微调? 1. 适应特定任务或领域:虽然预训练的模型通常具有广泛的知识和理解能力,但它们可能不完全适应特定任务的需求。通过在特定的数据集上微调模型,可以使模型更好地理解和处理与特定任务或领域相关的数据。 2. 提高…

【uniapp】微信小程序2024手机号快速验证及无感登录教程(内附代码)

组件:手机号快速验证组件 适用对象:企业/个体 费用:0.03元/次 目录 前言思路前端后端代码无感登录onload事件无感登录方法登录判断后端mini_login2 最后 前言 最近注册了公司,可以注册具有支付能力的小程序了,各种材料…