maptalks上加载自定义标记

引入插件

import * as maptalks from 'maptalks'

引入css文件

import 'maptalks/dist/maptalks.css'

加载地图

this.map = new maptalks.Map('map', {
      center: [center.x, center.y], //地图中心点的xy坐标
      zoom: 16, 
      pitch: 60,
      minZoom: 1,
      maxZoom: 19,
      // dragPitch: false, // 是否允许俯视旋转--上下旋转
      spatialReference: {
        projection: 'baidu'
      },
      baseLayer: new maptalks.TileLayer('base', {
        urlTemplate:
            'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png', //根据各自地图需求修改基础底图
        subdomains: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 
        // (对比度 深褐色转换比率 反转图像色值 调整的色环角度值 饱和度)--根据需要自行调整,可以参考官网的配置说明
        cssFilter: 'contrast(60%) sepia(70%) invert(95%)  hue-rotate(340deg) saturate(80%)',
        attribution: '© sunray'
      })
    })
  • 加载完地图之后,运行会出现一张深色的地图

默认这张地图是可以左键移动,右键可以调整角度,滚轮可以放大缩小的,是否需要这些 可以在声明地图的时候根据实际来配置

图片标记

  1. 在地图上加载一个图层用来放标记
this.markerLayer = new maptalks.VectorLayer('vector').addTo(this.map)
  • 根据经纬度声明标记点
var marker = new maptalks.Marker([longitude, latitude], {
    symbol: {
       markerFile: markerFile, // 图片地址 assets目录下的地址无法识别 --踩过坑
       markerWidth: 30, // 图片大小
       markerHeight: 30, // 图片大小
       markerDx: 0,
       markerDy: 0,
       markerOpacity: 1 // 图片透明度
     }
   })

3.将标记加到图层上

marker.addTo(this.markerLayer)
  • 以上就是简单的图片标记的做法,多个标记的画 就直接声明多个marker 一起加到markerLayer上就行

4.标记的点击事件

marker.on('click', function(e) {
	// 具体点击执行逻辑
})

3d模型标记

3d模型的加载 需要引入另外的插件

import { ThreeLayer } from 'maptalks.three'

// 我这边用的是gltf的3d模型 如果是其他模型 需要引入对应的loader
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'   

1.声明3d标记图层

this.threeLayer = new ThreeLayer('t', {
  forceRenderOnMoving: true,
   forceRenderOnRotating: true
 })

2.加载模型

this.threeLayer.prepareToDraw = function(gl, scene, camera) {
   // 光
   var light01 = new THREE.AmbientLight('#0xffffff', 0.5)
   light01.castShadow = true
   scene.add(light01)
   const scene = this.threeLayer.getScene()
    let loader = new GLTFLoader()
    loader.load(process.env.BASE_URL + '模型.gltf', (obj:any) => {
    	//将经纬度转成坐标值
    	var v = that.threeLayer.coordinateToVector3(new maptalks.Coordinate(longitude, latitude))
    	// 
      	obj.scene.position.set(v.x, v.y, 0)
    })
 }

3.标记图层加到地图上

this.threeLayer.addTo(this.map)

这样就能将3d的模型标记加载到地图上了 对应的点击或者其他操作,就利用threejs捕获模型
var intersects = raycaster.intersectObjects(scene.children, true)一样的方法即可

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值