地图场景 Map

10/3/2021

我们使用DIV渲染后看到的二维地图对象,我们统称为地图场景,在Mars2D中对应是mars2d.Map类 (opens new window),这是一切的开始,所有相关控制的起点。掌握学习好了mars2d.Map类 基本也就掌握好了Mars2D。

# 1. 地图场景初始化

在使用mars2d时你可以根据需要对默认参数进行配置,如果你只是想得到默认的效果,你仅需要写下面一行代码即可:

var map = new mars2d.Map('mars2dContainer')
1

当你需要对地图进行配置的时候,mars2d提供了详细的参数配置方案(如下),你可以暂时不需要完全理解各个参数的意义,在接下来的后续教程中我们会详细解释相关参数。

// 创建二维地图场景
var map = new mars2d.Map('mars2dContainer', {
  zoom: 13,
  center: { lng: 117.240601, lat: 31.827107 },
  minZoom: 3,
  maxZoom: 18,
  control: {
    scale: true,
    locationBar: {
      crs: "CGCS2000_GK_Zone_3",
      template: "<div>经度:{lng}</div> <div>纬度:{lat}</div> <div>横{crsx}  纵{crsy}</div> <div>层级:{level}</div>",
    },
    zoom: { position: "bottomright" },
    toolBar: { position: "bottomright" },
    layers: { position: "topleft" },
  },
  basemaps: [
    { name: "高德地图", type: "gaode", layer: "vec", show: true },
    { name: "高德地图", type: "gaode", layer: "img" },
  ],
  operationallayers: [{ name: "经纬网", type: "graticule" }],
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 2. mars2d.Map类 参数说明

参数名 类型 参数解释
id String 或 HTMLElement 地图div容器的id或dom
mapOptions Object API文档 Map类 (opens new window)

# 2.1 使用json配置文件记录参数快速创建地图场景

我们在不同项目应用时,可能是同一套代码,仅仅只是地图的配置参数不一样, 那么我们可以把地图的参数保存在后端服务动态生成或存储在json文件,将地图场景参数化。 我们可以直接加载使用不同json数据来快速创建各种地图场景。

# (1)通过任意方式去读取json文件,下面只是一种演示的方式

let configUrl = 'http://mars2d.cn/config/config.json'  
mars2d.axios
  .get(configUrl)
  .then(function (response) {
    //构建地图
    window.initMap(response.data.map);
  })
  .catch(function (error) {
    console.log('加载JSON出错', error)
  });

1
2
3
4
5
6
7
8
9
10
11

# (2)读取到的json对象传入new mars2d.Map方法创建地图

function initMap(mapOptions) { 
  //创建二维地图场景
  var map = new mars2d.Map('mars2dContainer', mapOptions)
}
1
2
3
4

config.json中的属性参数是与mapOptions参数相同。

# 2.2 运行效果

新窗口查看

# 3. 默认视角参数

你如果想设置进入地图页面时,自定义默认视角中心点和地图层级的话,你可以在创建地图时设置zoom和center参数 (opens new window) 值:

var map = new mars2d.Map('mars2dContainer', {
  "zoom": 13,
  "center": { "lng": 117.240601, "lat": 31.827107 },
})
1
2
3
4

也可以通过map.getView (opens new window) 方法获取当前的地图视角后拷贝设置到config.json中。或者在地图空白区域右键菜单中【查看当前视角】来快捷获取下参数值。

# 4. 控件

在创建地图的时候,你可以在配置项中通过control对控件中的功能组件进行相应的配置,支持的参数,参考 control参数说明 (opens new window)

var map = new mars2d.Map('mars2dContainer', {
  control: {
    //以下是Leaflet所支持的控件相关的options
    scale: true,
    zoom: { position: "bottomright" },
    layers: { position: "topleft" },

    //以下是mars2d.control定义的控件
    defaultContextMenu: true, //右键菜单
    locationBar: {
      crs: "CGCS2000_GK_Zone_3",
      template: "<div>经度:{lng}</div> <div>纬度:{lat}</div> <div>横{crsx}  纵{crsy}</div> <div>层级:{level}</div>",
    },
    toolBar: { position: "bottomright" },
  },
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 5. 栅格瓦片底图

栅格底图就是我们浏览地图最重要的底层参照物, 在创建地图的时候,你可以通过basemapse (opens new window) 添加栅格瓦片底图(允许添加多个,添加多个图层后可在底图控制器中切换),一般我们可以设置basemaps数组中默认显示的底图的show参数为true

var map = new mars2d.Map('mars2dContainer', {
  basemaps: [
    {
      name: "天地图电子",
      type: "group",
      layers: [
        { name: "底图", type: "tdt", layer: "vec_d" },
        { name: "注记", type: "tdt",  layer: "vec_z" },
      ],
      show: true,
    },
    { name: "天地图卫星", type: "tdt", layer: "img" },
    { name: "OSM地图",type: "xyz", url: "http://a.tile.openstreetmap.org/{z}/{x}/{y}.png" },
    { name: "高德地图", type: "gaode",  layer: "vec" }
  ]
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 7.1 底图的图层参数

栅格底图所支持的图层类型,只能是瓦片图层,均是继承自 BaseTileLayer类 (opens new window) 的图层类型。basemaps参数为一个数组,其中各图层的参数支持:

basemaps参数说明

参数名 类型 参数解释
type string 图层类型
name string 用于图层控件展示的名称
其他参数 每个type都有一些个性化的不同参数,参考各type对应的图层类构造参数

# 7.2 底图的type图层类型

basemaps所支持的type目前包括:

类型名 说明 对应的图层类 备注
image 单张图片 mars2d.layer.ImageLayer
tile 标准金字塔地图 mars2d.layer.TileLayer
wms OGC WMS标准服务 mars2d.layer.WmsLayer
wmts OGC WMTS标准服务 mars2d.layer.WmtsLayer
arcgis ArcGIS标准服务 mars2d.layer.ArcGisLayer
arcgis_cache ArcGIS切片 mars2d.layer.ArcGisCacheLayer
tdt 天地图 mars2d.layer.TdtLayer 在线地图
gaode 高德 mars2d.layer.GaodeLayer 在线地图
baidu 百度 mars2d.layer.BaiduLayer 在线地图
tencent 腾讯 mars2d.layer.TencentLayer 在线地图
osm OpenStreetMap(OSM) mars2d.layer.OsmLayer 国外在线地图
mapbox Mapbox地图 mars2d.layer.MapboxLayer 国外在线地图
google 谷歌地图 mars2d.layer.GoogleLayer 目前已被封

# 7.3 更新底图

创建完成底图后,需要切换底图或获取当前的底图,可以根据config配置的id或name属性,显示指定的底图,如:

//获取或设置当前显示的底图,设置时可以传入图层id或name
map.basemap = '离线地图' 

//获取配置的底图数组
let arr = map.getBasemaps()

1
2
3
4
5
6

# 8. 可以叠加的图层

在二维地图中,你可以在地图上添加多个图层来叠加显示。 在创建地图时,可以传operationallayers参数 (opens new window) 来将当前项目内常用的图层一次性配置好,代码中去按需使用。

var map = new mars2d.Map('mars2dContainer', {
  operationallayers: [
    { name: "实时路况", type: "gaode", layer: "time" },
    { name: "经纬网", type: "graticule", show: true },
  ]
})
1
2
3
4
5
6

# 8.1 可以叠加的图层

operationallayers 配置支持的 basemaps所有支持的瓦片图层,还支持所有矢量覆盖物数据的加载,支持的type类型,请参考 图层类型 (opens new window) ,每个type都有一些个性化的不同参数,参考各type对应的图层类构造参数。

# 8.2 对图层的控制

可以通过 let layer = map.getLayer(1987,'id') (opens new window)来获取config.json中配置的对应id为1987的图层对象。

为了方便理解getLayer获取到的对象,layers配置的图层与下面的创建方式是等价的,

//用工厂方法创建图层
var layerImg = mars2d.LayerUtil.create({
  type: "image",
  url: "//data.mars2d.cn/file/img/radar/201906211112.PNG",
  rectangle: { xmin: 73.16895, xmax: 134.86816, ymin: 12.2023, ymax: 54.11485 },
  alpha: 0.7,
});
map.addLayer(layerImg);
1
2
3
4
5
6
7
8

在Map创建后可以通过addLayer (opens new window)removeLayer (opens new window)方法来控制图层的加载和删除。

更多方法可以在图层类型 (opens new window) 找到对应的 图层类 后,查阅对应类的属性或方法进行进一步控制及管理图层。

最后更新: 4/27/2022, 9:19:39 PM