在 React 中使用 ArcGIS JavaScript SDK 构建地图应用

创建React工程

shell 复制代码
$ npx install -g create-react-app
$ create-react-app my-react-arcgis-app
$ cd my-react-arcgis-app
$ npm start

安装ArcGIS库

shell 复制代码
$ npm install @arcgis/core

创建ArcGIS地图组件

JavaScript 复制代码
import React, { useEffect, useRef } from 'react';
import Map from '@arcgis/core/Map';
import MapView from '@arcgis/core/views/MapView';
import FeatureLayer from '@arcgis/core/layers/FeatureLayer';

export default function MyMapViewer({}) {

    const mapRef = useRef();

    useEffect(() => {
        const map = new Map({
            basemap: 'streets-navigation-vector'
        });

        const view = new MapView({
            container: mapRef.current,
            map: map,
            center: [-79.940, 32.788],
            zoom: 16
        });

        const featureLayer = new FeatureLayer({
            url: 'https://services.arcgis.com/P3ePLMYs2RVChkJx/ArcGIS/rest/services/Charleston_Buildings_SLR_2080/FeatureServer/85',
            popupTemplate: {
                title: "{BuildingFID}",
                outFields: ["*"],
                content: "{BuildingFID}"
            },
        });

        map.add(featureLayer);

        return () => {
            if (view) {
                view.destroy()
            }
        };
    }, []);

    const mapStyle = {
        width: '100%',
        height: '100%',
        position: 'absolute',
        margin: 0,
        padding: 0,
    };

    return (
        <div className="map-container" ref={mapRef} style={mapStyle} />
    );
};

使用ArcGIS地图组件

修改App.js,内容如下:

JavaScript 复制代码
import MyMapViewer from './MyMapViewer';
import './App.css';

function App() {

  return (
    <div className="app">
      <h1>My ArcGIS App</h1>
      <MyMapViewer />
    </div>
  );
}

export default App;

修改App.css,在文件夹最后添加ArcGIS的css

JavaScript 复制代码
@import 'https://js.arcgis.com/4.29/@arcgis/core/assets/esri/themes/light/main.css';
相关推荐
烬羽3 小时前
后端返回的 JSON 字符串,浏览器怎么"看懂"的?——Ajax 全链路拆解
javascript
半个落月3 小时前
一个新手用 Bun + Axios 调通 DeepSeek API 的实践记录
javascript
不好听6133 小时前
深入理解链表:线性数据结构的另一面
javascript·数据结构
林希_Rachel_傻希希3 小时前
学React治好了我的焦虑症,1小时速通React 前20分钟。
前端·javascript·面试
小林ixn3 小时前
从 Ajax 到异步编程:JSON 序列化、Event Loop 与 XHR 请求完全解析
javascript
丷丩5 小时前
MapLibre GL JS第47课:添加动画图标
javascript·gis·动画·mapbox·maplibre
快乐的哈士奇5 小时前
【Next.js实战①】Gmail API 按柜号检索邮件:OAuth 双 Cookie 与搜索 Fallback
开发语言·javascript·ecmascript
云水一下5 小时前
Vue.js从零到精通系列(五):全局状态管理——Pinia 核心与实践
前端·javascript·vue.js
kmblack16 小时前
javascript计算年龄
开发语言·javascript·ecmascript
Dick5076 小时前
ROS2 多机器人通用 Driver 层复盘:BaseRobotDriver 到多平台 Mock 切换实现
前端·javascript·机器人