Socket
Socket
Sign inDemoInstall

dmap

Package Overview
Dependencies
71
Maintainers
5
Versions
57
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    dmap

3d map visualization lib


Version published
Maintainers
5
Install size
25.1 MB
Created

Readme

Source

dmap

高性能、通用的 webgl地图组件库


简介

dmap是一种3d的地理类可视化引擎(一些非地理相关的功能也能实现)

dmap依赖开源、通用的jquery 和 three.js。

dmap基于webgl,性能合表现比svg、canvas等其他dom元素形成的可视化更好。但webgl非所有浏览器支持,如需兼容性更好的2d地图,可以使用ldmap

安装

tnpm install @ali/ldmap

启动

dmap的组件采用require机制,你可以用 node-cube 启动

sudo npm install node-cube -g
cd your_dir
cube start

浏览demo http://localhost:9999/demo/

绑定

一些地理数据放在内部服务器,需日常环境绑定

10.189.224.26 daily.s.aliyun.com# daily

引入:

可以整体引入

var D = require('@ali/dmap');
var map = new D.Map(container, options);

也可部分引入

var Map = require('@ali/dmap/map/map');
var map = new Map(container, options);

为了选择性引入,可以了解dmap的目录组织 ↓↓↓

目录:

d-map目录组织如下:

名称说明
mapmap是地图的核心,此目录包括map的构造、投影、交互、渲染等
layer3d图层,包括地理类图层和可视类图层,详见下文
layer_2d2d的可视化贴图,可以贴图在地球等实体表面
render和绘图相关的,如特殊3d结构、shader等
core公共方法等
mapping贴图
demo案例

数据:

组件开发主要涉及地理数据和可视化数据。

地理类:

地理类数据组要为geojson格式,如地理边界、公路数据等。 详细

可视类:

在javascript语法层面上,可视类数据一般有2层结构,如:

[[]] 型:

[['上海', 222], ['宁波市':111], ...]

[{}] 型:

[{name: '上海', value: 222}, {name: '宁波市', value:111}, ...] 

{{}} 与 {[]}型数据同理。

从展现形式区分 分为连接型数据、与点状、面状、轨迹数据。

点状数据(点图、热力图等):

[{name: '上海', value: 222}, {name: '宁波市', value:111}, ...]

连接型数据(飞线数据等):

[{name: '上海', value: 222, from: { lat: 30, lng: 120}, to: { lat: 30.5, lng: 120.6}], {name: '上海', value: 222, from: { lat: 30, lng: 120}, to: { lat: 30.9, lng: 120.8}], ...]

map

map是地图的核心,包含: 1、初始化三维环境 2、与输入进行交互 3、定义了地理投影 4、触发各类事件等

当移动或缩放map结束,鼠标离开时,map默认会打印现在的位置信息。

map的交互方式有2种,平移和旋转,敲击键盘自动切换(外部禁了敲击事件除外)。

map的初始化:

var Map = require('@ali/dmap/map/map');
var container = $('#map-container');
var map = new Map(container, {});

map的配置:

名称类型说明
projectionString投影方式, 详见下表
angleNumber相机视野的角度,50为人眼视野角度
nearNumber相机可视最近距离
farNumber相机可视最远距离
rotationObject相机旋转角 {x: x, y: y}
rotateSpeedNumber相机旋转缓动速度
centerObject相机视觉的中心坐标 {x: x, y: y, z:z}
moveSpeedNumber相机中心移动的速度
distanceNumber相机距离中心的距离
moveSpeedNumber相机缩放缓动速度
autoRotateSpeedNumber自动旋转速度
clearColorColorStringwebgl背景色
clearAlphaNumber0-1 webgl背景透明度
globalAlphaNumber0-1 总体透明度

projection的分类:

map投影方式说明
plane / mecator墨卡托投影 最通用的平面投影方式
sphere球面投影
origin_2d将经纬度直接按照数值映射到平面上
normal{x:x,y:y,z:z} -> {x:x,y:y,z:z}(非经纬度映射)

map的方法:

layer

layer是3d地图的层,层即具有独立意义的整体。

和数据一样,layer可分为地理展现和可视展现。

地理展现包括贴图地球、太阳、地理边界、建筑层等。

可视展现包括点图、热力图、飞线图、区域热力图等。

但对于组件而言,一个组件也许兼具两种类型,如/layer/area.js 其可以勾勒地理边界,也可以填充颜色形成区域热力图(即所谓Choropleth map)

大部分可视化图层,都能跟随map的投影方式,如平面图和地球。

layer/addons目录存放不常用的,辅助性的图表,如标注、辅助线等。

部分layer会分为2个层次,如 flying_lines 和 flying_line。 flying_lines管理一组飞线,而flying_line管理一根飞线。

layer分类:

名称说明
globe.js地球的模型 支持多种贴图
sky.js天空,支持贴图和颜色
solar.js太阳, 可以做光源、支持发光效果
areas.js通过geojson格式的边界地理数据,绘制矢量层
flying_lines.js飞线图,支持如两地交易、电话通信等关联性数据可视化
layer_2d.js生成2d的可视化贴图
heatmap_height.js高度热力图
scatter.js3d点图
addons/markers3d标注

layer初始化:

var Map = require('@ali/dmap/map/map');
var Solar = require('./../layer/solar');
//初始化地图
var container = $('#map-container');
var map = new Map(container, {});
//各种不同的组件 构造的方式都很类似
var scatter = new Scatter();
scatter.addTo(map);
scatter.render([{lat:30, lng: 120}]);

layer的配置:

配置采用多层的配置结构,传入组件后和组件的配置深度合并。

普通通用配置:
名称类型说明
ratioNumber当投影为球面的时候,为了避免多个层重叠,各层在径向上的scale的比例
offsetObject在投影结束后进行的偏移 {x:x,y:y,z:z}
函数型通用配置:

各组件配置中,有许多函数型配置,如颜色对应函数,经纬度提取函数等,以经纬度提取函数为例: 在我们传入render函数的data,组织结构也许非常多变,如:

//案例1
{
  lat: 30,
  lng: 120,
  value:1
}
//案例2
[30, 120, 1]
//案例3
{
  cp:{
  lat: 30,
  lng: 120
  },
  value: 1
}
//案例4
{
  cp:[30,120],
  value: 1
}

我们很难枚举这些常用的经纬度组合,为了获得数据中的经纬度,我们通过函数传入:

var getLat = function(d){
    var lat = d.lat || d.latitude || d[0];
    if(lat) return lat;
    var center = d.cp || d.center || d.c || d.pos || d.position;
    if(center) return center.lat || center[0] || center.latitude;
  };
//
var options = {
  lat: getLat
};
......

这些常用的字段可以为函数, 其中,d为可视数据中的一项,id为其序号或id。v为提取出来的可视化字段,min, max为其中的最值,feature为geojson的单元。

名称说明常见输入值
lat纬度提取函数d, id
id获取数据的idd, id
geoid获取地理数据的地理idfeature
color色彩映射函数v, min, max
value获取需要可视化字段值的方法d, id
特殊对象型通用配置:

配置中有一些具有普遍的特殊对象: gradient对象:

{
    'from': '#001f6b',//起始颜色
    'to': '#e4f2f1',//结束颜色
    'easing': 'Quadratic.Out.1.1',//过渡函数
    'space': 'hsl'//色彩空间
  }

gradient对象到组件内部,会通过内置的高阶函数构造一个颜色映射函数,当输入0-1的数值,返回相应的颜色。 easing字段用.隔开成3段, 前两段采用 TWEEN.js中描述过渡函数的记号,如线性变换Linear.None:

function(k){
  return k;
}

后者在这个基础上进行乘方,如 Linear.None.2.2:

function(k){
  return Math.pow(k, 2.2);
}

sprite对象: 经过内部处理,生成粒子系统、2d点图等的贴图,如:

var options = {
  'sprite': {
    'drawN': 1.15,
    'color': {
        'from': 'hsla(20,100%,75%,0.8)',
        'to': 'hsla(120,100%,50%,0.1)',
        'easing': 'Linear.None.1.7',
        'space': 'rgb'
      }
  }
};
layer的方法:

不同组件有些公共的方法

名称说明
initialize初始化
initinit型的方法,各种初始化,如initEvents initDom
updateupdate型方法,多针对属性的改变进行更新,如updateColor
addTo加入地图
data导入数据 有时进行一些处理
render接受数据并绘制
draw仅仅绘制或图形更新
hide回到初始状态而不销毁 可以用于组件回收
destroy彻底清除

layer_2d

layer层基本是通过在3维空间里建立实体实现,另外有一种可视化方案,在贴图中实现可视化,贴入3d的实体表面,甚至与shader进行交互,layer_2d内的组件就是为了实现这种贴图。

名称说明
scatter点/热力图

FAQs

Last updated on 14 Sep 2017

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc