เอกสาร / การตั้งค่า / React / ArcGIS

การตั้งค่า ArcGIS

ขั้นตอนการใช้ ArcGIS บนเว็บผ่าน MapConductor @arcgis/core รวมอยู่ในแพ็กเกจ และ CSS ธีมของ Esri จะถูกโหลดโดยแพ็กเกจ

PACKAGE
react-for-arcgis
API KEY
จำเป็น
CSS
อัตโนมัติ
REACT NATIVE
มี
ผู้ให้บริการเดียวกัน แพลตฟอร์มอื่นAndroidiOS

ก่อนเริ่ม

Node.js 18 ขึ้นไป
คีย์ API ของ ArcGIS Location Platform
STEP 01

ติดตั้ง

@arcgis/core รวมอยู่ในแพ็กเกจ CSS ธีมของ Esri จะถูกโหลดจากฝั่งมุมมองด้วย ดังนั้นคุณไม่ต้องทำการ import เอง

terminalnpm
npm install @mapconductor/js-sdk-core @mapconductor/js-sdk-react \
            @mapconductor/react-for-arcgis
STEP 02

ส่งคีย์ API ไปยังส่วนเชื่อมต่อสถานะ

ส่งคีย์ไปยังส่วนเชื่อมต่อสถานะ ไม่ใช่ไปยัง props ของคอมโพเนนต์มุมมอง เนื่องจากหากวางไว้ใน props จะปนเข้าไปในบันทึกและสแน็ปชอตของการทดสอบ

ArcGISMap.tsxTypeScript · React
const state = useArcGISViewState({
  apiKey: import.meta.env.VITE_ARCGIS_API_KEY,
  mapDesignType: ArcGISDesign.Streets,
  cameraPosition: createMapCameraPosition({ position: TOKYO, zoom: 12 }),
});
ข้อควรระวัง
ส่งคีย์จากตัวแปรสภาพแวดล้อมระหว่างการบิลด์ (สำหรับ Vite เช่น import.meta.env.VITE_*) และอย่านำไปใส่ในการจัดการซอร์สโค้ด เนื่องจากคีย์จะถูกส่งไปยังฟรอนต์เอนด์ คุณต้องตั้งข้อจำกัดผู้ส่งและโดเมนเพื่อป้องกันความเสียหายหากคีย์รั่วไหล
STEP 03

ใช้ 2D และ 3D แยกกัน

ArcGISMapView เป็นมุมมองฉาก 3D และ ArcGISMapView2D เป็นมุมมองแผนที่ 2D ทั้งสองใช้วัตถุสถานะร่วมกัน จึงสามารถสลับได้ขณะทำงาน

ตรวจสอบ

สิ่งที่ควรเห็น

เสร็จสิ้นเมื่อแผนที่ ArcGIS ปรากฏขึ้น

ArcGISMap.tsxTypeScript · React
import { useState } from 'react';
import { createGeoPoint, createMapCameraPosition, createMarkerState } from '@mapconductor/js-sdk-core';
import { Marker } from '@mapconductor/js-sdk-react';
import { ArcGISDesign, ArcGISMapView2D, useArcGISViewState } from '@mapconductor/react-for-arcgis';

const TOKYO = createGeoPoint({ latitude: 35.6812, longitude: 139.7671 });

export function ArcGISMap() {
  const state = useArcGISViewState({
    apiKey: import.meta.env.VITE_ARCGIS_API_KEY,
    mapDesignType: ArcGISDesign.Streets,
    cameraPosition: createMapCameraPosition({ position: TOKYO, zoom: 12 }),
  });
  const [markerState] = useState(() => createMarkerState({ id: 'tokyo', position: TOKYO }));

  return (
    <ArcGISMapView2D state={state} style={{ height: 480 }}>
      <Marker state={markerState} />
    </ArcGISMapView2D>
  );
}

ดีไซน์แผนที่

ArcGISDesign รองรับแผนที่ฐานของ Esri สิ่งที่แสดงไว้นี้คือส่วนหนึ่งเท่านั้น

ArcGISDesign
Notes
Streets / StreetsNight / StreetsRelief
แผนที่ถนนและรูปแบบต่างๆ
Imagery / ImageryLabels
ภาพดาวเทียมพร้อมป้ายกำกับ
Topographic / Terrain
แผนที่ภูมิประเทศ
LightGray / DarkGray
สำหรับเลเยอร์พื้นฐานของข้อมูล
Navigation / NavigationNight
สำหรับการนำทาง
Oceans / ChartedTerritory / Nova
สไตล์ตามธีมอื่นๆ

การแก้ปัญหา

แผนที่ไม่แสดง

  • ตรวจสอบว่าคีย์ถูกส่งไปยังส่วนเชื่อมต่อสถานะหรือไม่
  • ตรวจสอบว่าบริการ ArcGIS ที่จำเป็นเปิดใช้งานอยู่สำหรับคีย์หรือไม่

บันเดิลมีขนาดใหญ่

  • @arcgis/core เป็นไลบรารีขนาดใหญ่ หากคุณแยกเฉพาะหน้าจอที่ใช้ ArcGIS ออกเป็น dynamic import จะช่วยลดการโหลดเริ่มต้นได้

เกิดข้อผิดพลาดลำดับ hook เมื่อสลับ provider

  • React ไม่สามารถเปลี่ยนลำดับการเรียกใช้ hook ได้ ให้สร้างคอมโพเนนต์เล็กๆ สำหรับแต่ละ provider และเรียกใช้ hook ของ provider นั้นภายใน ไดเร็กทอรี providers/ ในแอปตัวอย่างมีโครงสร้างนี้

ถัดไป

ArcGIS สามารถจัดการสินทรัพย์ GIS ได้โดยตรง หาก API ทั่วไปไม่เพียงพอ คุณสามารถดึงมุมมองเนทีฟจาก MapViewHolder และควบคุมได้โดยตรง