0.11.1 • Published 3 years ago

region-map v0.11.1

Weekly downloads
11
License
MIT
Repository
-
Last release
3 years ago

RegionMap

基于 THREEJS 的三维地图模型

功能

  • 三维地图倾斜模型展示
  • 添加自定义 DOM 节点
  • 纹理贴图
  • 事件检测
  • 3d 柱状图
  • 2d 与 3d 飞线

效果

region flyline texture

安装

npm install region-map --save

使用

基本使用

import RegionMap from 'region-map'

const options = {
  ///...
  getTextureUrl(property: any) {
    if (property.adcode == '610100') {
      return getTextureByImageUrl('xa.png')
    }
    let url = Math.random() > 0.5 ? 'tt.png' : 'aa.jpg'
    return getTextureByImageUrl(url)
  }
}

class MyRegion extends RegionMap {
  constructor(options) {
    super(options)
  }
}
///...

飞线

import RegionMap from 'region-map'
import createFlyLineFactory from 'region-map/lib/effects/FlyLine.js'

const options = {
  mapReady: map => {
    //创建飞线
    let line = createFlyLineFactory(regionMap)
    line.createFlyLine([108.946016, 34.384795], [109.731926, 38.303278])
  }
}

class MyRegion extends RegionMap {
  constructor(options) {
    super(options)
  }
}
const regionMap = new MyRegionMap(options)

分区域贴图

region-map在渲染每个区域的时候会调用getTextureUrl,在getTextureUrl中需要用getTextureByImageUrl将对应贴图的texture对象返回:

const options = {
  //...
  //获取贴图方法
  getTextureUrl(property: any) {
    return getTextureByImageUrl(`ll/${property.adcode}.png`)
  }
}

添加 Marker

利用getViewportPositionFromLonlat可以将经纬度转换为相对于外部容器的lefttop值,之后需要将添加的 DOM 节点绝对定位。

<template>
  <div class="region-map-wrapper">
    <div ref="map" class="region-map"></div>
    <div class="map-markers" v-if="showMarkers">
      <!--添加marker-->
      <i v-for="item in markers" :style="computedPosition(item)"></i>
    </div>
  </div>
</template>
<script>
  import RegionMap from 'region-map'
  export default {
    data() {
      return {
        markers: [[longtitude, latitude]],
        showMarkers: false
      }
    },
    mounted() {
      this.initRegionMap()
    },
    methods: {
      initRegionMap() {
        this.regionMap = new RegionMap({
          el: this.$refs.map,
          //...,
          mapReady: () => {
            this.initMarker()
          }
        })
      },
      initMarker() {
        this.showMarkers = true
      },
      computedPosition(location) {
        const [left, top] = this.regionMap.getViewportPositionFromLonlat(location)
        return {
          left: left + 'px',
          top: top + 'px'
        }
      }
    }
  }
</script>
<style>
  .region-map-wrapper {
    position: relative;
    left: 0;
    right: 0;
  }
  .region-map {
    position: absolute;
    left: 0;
    right: 0;
    z-index: 1;
  }
  .map-marker {
    position: absolute;
    left: 0;
    right: 0;
    z-index: 2;
  }
</style>

Options

属性说明类型
el容器id 或者 dom 对象非必须,默认为 body
getRegionData获取区域 geojson 数据,需要返回Promise对象Function必填
center重置坐标系中心点位置Array非必须
scale坐标缩放级别number非必须
translate坐标系偏移Array非必须
deepth模型厚度number非必须
regionStyle区域样式object 具体查看 docs 中定义非必须
borderStyle边框样式object 具体查看 docs 中定义非必须
getTextureUrl获取每个区域的贴图Function非必须
constrol是否开启控件boolean非必须
debug是否开启调试模式boolean非必须
rotateXx 轴旋转角度number,单位:角度非必须
hiddenBottomBorder是否底边轮廓boolean非必须
noLight是否采用 MeshBasicMaterial 材质渲染模型(不受光照影响)boolean非必须
events事件集合Array<Event.Item>非必须
mapReady地图初始化完成回调函数Function,参数为 map 对象非必须

Event.Item

属性说明类型
type类型string
handler回调函数Function

API 📕

setOptions 重新设置配置项,类似 echarts,传入的 options 会和原来的options合并

regionMap.setOptions({
  getRegionData() {
    return axios.get('xa.json').then(res => res.data)
  },
  borderStyle: {
    color: 0x00ff00,
    linewidth: 5
  },
  regionStyle: {
    color: 0x8d8d8d
  }
})

❗ 注意:重新设置events并不会生效

//此操作无效 ❌
regionMap.setOptions({
  events: [
    {
      type: 'mousemove',
      handler() {
        //...
      }
    }
  ]
})
0.11.1

3 years ago

0.11.0

3 years ago

0.10.0

3 years ago

0.9.0

4 years ago

0.8.0

4 years ago

0.7.0

4 years ago

0.5.0

4 years ago

0.5.1

4 years ago

0.4.0

4 years ago

0.3.0

4 years ago

0.2.0

4 years ago