react项目中使用eari-loader加载天地图

【react项目中使用eari-loader加载天地图】1.在项目中安装esri-loader

npm install esri-loader // or yarn add esri-loader

2.加载代码如下:
代码是基于react hook编写:
import React, { useEffect, useRef } from 'react'; import { loadModules } from 'esri-loader'const LoadMap = props => { //这个代码我封装成公用组件了,因此从父组件传来样式、变量等信息 const { style, mapObj, setMapObj } = props; const mapRef = useRef(); useEffect(() => { //options 可以定义自己本地服务器部署的api //如果没有,就使用官方自己的,就是加载比较慢 //const options = { //url:'', //css:'' //}; loadModules([ 'esri/Map', "esri/views/MapView", "esri/layers/WebTileLayer", "esri/layers/support/TileInfo", "dojo/domReady!" ], { css: true }) .then(([ Map, MapView, WebTileLayer, TileInfo ]) => { const tileInfo = new TileInfo({ rows: 256, cols: 256, compressionQuality: 0,//压缩像素值 origin: { x: -180, y: 90 }, spatialReference: { wkid: 4326 }, lods: [//定义平铺方案的细节级别数组 { level: 2, levelValue: 2, resolution: 0.3515625, scale: 147748796.52937502 }, { level: 3, levelValue: 3, resolution: 0.17578125, scale: 73874398.264687508 }, { level: 4, levelValue: 4, resolution: 0.087890625, scale: 36937199.132343754 }, { level: 5, levelValue: 5, resolution: 0.0439453125, scale: 18468599.566171877 }, { level: 6, levelValue: 6, resolution: 0.02197265625, scale: 9234299.7830859385 }, { level: 7, levelValue: 7, resolution: 0.010986328125, scale: 4617149.8915429693 }, { level: 8, levelValue: 8, resolution: 0.0054931640625, scale: 2308574.9457714846 }, { level: 9, levelValue: 9, resolution: 0.00274658203125, scale: 1154287.4728857423 }, { level: 10, levelValue: 10, resolution: 0.001373291015625, scale: 577143.73644287116 }, { level: 11, levelValue: 11, resolution: 0.0006866455078125, scale: 288571.86822143558 }, { level: 12, levelValue: 12, resolution: 0.00034332275390625, scale: 144285.93411071779 }, { level: 13, levelValue: 13, resolution: 0.000171661376953125, scale: 72142.967055358895 }, { level: 14, levelValue: 14, resolution: 8.58306884765625e-005, scale: 36071.483527679447 }, { level: 15, levelValue: 15, resolution: 4.291534423828125e-005, scale: 18035.741763839724 }, { level: 16, levelValue: 16, resolution: 2.1457672119140625e-005, scale: 9017.8708819198619 }, { level: 17, levelValue: 17, resolution: 1.0728836059570313e-005, scale: 4508.9354409599309 }, { level: 18, levelValue: 18, resolution: 5.3644180297851563e-006, scale: 2254.4677204799655 }, { level: 19, levelValue: 19, resolution: 2.68220901489257815e-006, scale: 1127.23386023998275 }, { level: 20, levelValue: 20, resolution: 1.341104507446289075e-006, scale: 563.616930119991375 } ] }) //加载天地图的矢量地图 const tiledLayer = new WebTileLayer("http://{subDomain}.tianditu.com/DataServer?T=vec_c&x={col}&y={row}&l={level}&tk=134e6b671b2b1f64c383628fbe12b4d1", { subDomains: ['t0'], tileInfo: tileInfo, spatialReference: { // 这里当时踩了一个坑:没有设置坐标系,一直报坐标系不匹配的错误 wkid: 4326 }, }); //加载天地图的标记地图 const tiledLayerLabel = new WebTileLayer("http://{subDomain}.tianditu.com/DataServer?T=cia_w&x={col}&y={row}&l={level}&tk=134e6b671b2b1f64c383628fbe12b4d1", { subDomains: ['t0'], tileInfo: tileInfo, spatialReference: { wkid: 4326 }, }); const map = new Map({ basemap: { baseLayers: [tiledLayer, tiledLayerLabel] }, }); const view = new MapView({ container: mapRef.current, map: map, scale: 20000000, center: [120, 35] }); setMapObj({ map, view })}) .catch(err => { console.error('地图初始化失败', err); }); }, [])return
; }; export default LoadMap;

    推荐阅读