// 0. 引入使用到的leaflet类 import { Map, TileLayer, LayerGroup, Control, Marker, Icon, GeoJSON } from '../lib/leaflet/leaflet-src.esm.js'; // 1. 创建一个map对象 // 参数为html元素的id:
const map = new Map('map'); // 2. 创建一个地图图层TileLayer // 参数为一个url模板,一般包含xyz // 有时候模板中包含subdomains,表示地图有多个子url(对应模板参数{s}) const amapLayer = new TileLayer( 'http://wprd0{s}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7', { subdomains: '1234' } ); // 2.1 再创建一个地图图层tdtVectorLayer const tdtVectorLayer = new TileLayer( 'http://t0.tianditu.gov.cn/vec_w/wmts?layer=vec&style=default&tilematrixset=w&Service=WMTS&Request=GetTile&Version=1.0.0&Format=tiles&TileMatrix={z}&TileCol={x}&TileRow={y}&tk=11b55a09c9e0df4a1e91741b455b7f28', {} ); const tdtLabelLayer = new TileLayer( 'http://t0.tianditu.gov.cn/cva_w/wmts?layer=cva&style=default&tilematrixset=w&Service=WMTS&Request=GetTile&Version=1.0.0&Format=tiles&TileMatrix={z}&TileCol={x}&TileRow={y}&tk=11b55a09c9e0df4a1e91741b455b7f28', {} ); const tdtLayer = new LayerGroup([tdtVectorLayer, tdtLabelLayer]); // 3. 图层加入到地图map中(显示一个图层) tdtLayer.addTo(map); // 4. 设置地图中心点坐标(北京),缩放级别10 map.setView([39.909186, 116.397411], 10); // 5. 添加一个控制层 const layerControl = new Control.Layers( { 高德: amapLayer, 天地图: tdtLayer }, {}, { collapsed: false } ); // 6. 将控制层加入到地图map中 layerControl.addTo(map); // d3.1 创建一个icon,以`data:image/svg+xml,`形式存在 const svg = ''; let iconUrl = 'data:image/svg+xml,' + encodeURIComponent(svg) // d3.2 创建一个Marker对象 // 坐标 // icon对象(url、大小、锚点坐标) const marker = new Marker([39.909186, 116.397411], { icon: new Icon({ iconUrl: iconUrl, iconSize: [32,32], iconAnchor: [16,32] }) }); // d3.3 将点添加(显示)到map中 marker.addTo(map); // d4.1 引入一个 GeoJSON 数据 const data = { "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": { "NAME": "西北五环" }, "geometry": { "type": "Point", "coordinates": [ 116.22196197509766, 39.99527080014614 ] } }, { "type": "Feature", "properties": { "NAME": "东五环" }, "geometry": { "type": "Point", "coordinates": [ 116.53816223144531, 39.9034155951341 ] } }, { "type": "Feature", "properties": { "NAME": "南五环" }, "geometry": { "type": "Point", "coordinates": [ 116.40151977539062, 39.7631584037253 ] } } ] }; // d4.2 根据data创建 GeoJSON 对象,该对象对应leaflet中的一个图层 const glayer = new GeoJSON(data, { pointToLayer: (geoJsonPoint, latlng) => { return new Marker(latlng, { icon: new Icon({ iconUrl: iconUrl, iconSize: [32, 32], iconAnchor: [16, 32] }) }); } }); // d4.3 将GeoJSON 对象添加到地图中 glayer.addTo(map);