许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  react项目中使用esri-loader加载天地图:完整实现方案

react项目中使用esri-loader加载天地图:完整实现方案

阅读数 18
点赞 0
article_banner

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 <div style={style} ref={mapRef} />;
};
export default LoadMap;



免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空