| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712 |
- 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 }
- }
- }
- // 初始化地图业务,生命周期钩子函数(必须),框架在地图初始化完成后自动调用该函数
- export function onMounted(mapInstance) {
- map = mapInstance // 记录首次创建的map
- // map.on(mars3d.EventType.removeLayer, function (event) {
- // console.log("移除了图层", event)
- // })
- showDraw()
- }
- // 释放当前地图业务的生命周期函数,具体项目中时必须写onMounted的反向操作(如解绑事件、对象销毁、变量置空)
- 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: "https://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) {
- console.log("数据加载完成", event)
- eventTarget.fire("refTree")
- })
- 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: "https://data.mars3d.cn/file/geojson/hfty-point.json",
- symbol: {
- styleOptions: {
- image: "https://data.mars3d.cn/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)
- eventTarget.fire("refTree")
- })
- graphicLayer.on(mars3d.EventType.click, function (event) {
- console.log("单击了图层", event)
- })
- }
- export function showPointForHeat() {
- removeLayer()
- graphicLayer = new mars3d.layer.GeoJsonLayer({
- name: "体育设施点-按热力图渲染",
- url: "https://data.mars3d.cn/file/geojson/hfty-point.json",
- symbol: {
- type: "heat", // 按热力图来渲染数据
- // 下面参数支持mars3d.layer.HeatLayer的所有构造参数
- heatStyle: {
- radius: 20,
- minOpacity: 0,
- maxOpacity: 0.4,
- blur: 0.3,
- gradient: {
- 0: "#e9ec36",
- 0.25: "#ffdd2f",
- 0.5: "#fa6c20",
- 0.75: "#fe4a33",
- 1: "#ff0000"
- }
- },
- // 以下为矩形矢量对象的样式参数
- style: {
- opacity: 1.0,
- outline: true, // 显示范围线,方便对照
- outlineColor: "#ffffff",
- outlineWidth: 1
- }
- },
- flyTo: true
- })
- map.addLayer(graphicLayer)
- // 绑定事件
- graphicLayer.on(mars3d.EventType.load, function (event) {
- console.log("数据加载完成", event)
- })
- }
- /**
- * 全国省界
- */
- export function showChinaLine() {
- removeLayer()
- graphicLayer = new mars3d.layer.GeoJsonLayer({
- name: "全国省界",
- url: "https://data.mars3d.cn/file/geojson/areas/100000_full.json",
- format: simplifyGeoJSON, // 用于自定义处理geojson
- // simplify: { tolerance: 0.00001 },
- symbol: {
- type: "polylineP",
- styleOptions: {
- width: 2,
- materialType: mars3d.MaterialType.LineFlow,
- materialOptions: {
- color: "#00ffff",
- image: "https://data.mars3d.cn/img/textures/fence-line.png",
- speed: 10,
- repeat_x: 10
- },
- distanceDisplayCondition: true,
- distanceDisplayCondition_far: 12000000,
- distanceDisplayCondition_near: 100000,
- label: {
- text: "{name}",
- position: "{center}", // 省会位置center
- font_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)
- eventTarget.fire("refTree")
- })
- }
- // 简化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: "https://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)
- eventTarget.fire("refTree")
- })
- 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.支持URL
- url: "https://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)
- eventTarget.fire("refTree")
- })
- layerTest.on(mars3d.EventType.click, function (event) {
- // 单击事件
- console.log("单击了图层", event)
- })
- }
- /**
- * 立体建筑物
- */
- export function showBuilding() {
- removeLayer()
- graphicLayer = new mars3d.layer.GeoJsonLayer({
- name: "建筑物面",
- url: "https://data.mars3d.cn/file/geojson/buildings-demo.json",
- // filter: "floors>30", // 筛选数据
- symbol: {
- styleOptions: {
- color: "#0d3685",
- outlineColor: "#0d3685",
- opacity: 0.8
- },
- // styleFieldOptions: {
- // "floors<20": { color: "#ff0000" },
- // "floors>20 && floors<30": { color: "#fff000" },
- // "floors>30": { color: "#00ffff" }
- // },
- 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)
- eventTarget.fire("refTree")
- })
- }
- /**
- * 分层分户立体建筑物
- */
- export function showFloor() {
- removeLayer()
- graphicLayer = new mars3d.layer.GeoJsonLayer({
- name: "分层分户建筑物面",
- url: "https://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)
- eventTarget.fire("refTree")
- })
- }
- /**
- * 行政区划 ,转为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: "https://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: "https://data.mars3d.cn/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)
- eventTarget.fire("refTree")
- })
- 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: "https://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)
- eventTarget.fire("refTree")
- })
- }
- /**
- * 显示世界各国
- */
- 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: "https://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)
- eventTarget.fire("refTree")
- })
- graphicLayer.on(mars3d.EventType.click, function (event) {
- console.log("单击了图层", event)
- })
- }
- // 加载GCJ数据进行纠偏
- export function showGCJ02Data() {
- removeLayer()
- const gcjLayer = new mars3d.layer.GeoJsonLayer({
- name: "纠偏前",
- url: "https://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: "https://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)
- // 绑定事件
- graphicLayer.on(mars3d.EventType.load, function (event) {
- console.log("数据加载完成", event)
- eventTarget.fire("refTree")
- })
- }
- export function getGraphicsTree(options) {
- return graphicLayer.getGraphicsTree(options)
- }
- export function getGraphicById(id) {
- return graphicLayer.getGraphicById(id)
- }
|