การตั้งค่า Mapbox
ขั้นตอนการใช้ Mapbox บนเว็บผ่าน MapConductor จำเป็นต้องมี access token เฉพาะเมื่อใช้รูปแบบที่โฮสต์โดย Mapbox (สิ่งที่ขึ้นต้นด้วย mapbox://) เท่านั้น
ก่อนเริ่ม
ติดตั้ง
mapbox-gl ถูกรวมอยู่ในแพ็กเกจแล้ว ไม่จำเป็นต้องติดตั้งแยก ไม่มีเวอร์ชัน React Native
npm install @mapconductor/js-sdk-core @mapconductor/js-sdk-react \
@mapconductor/react-for-mapboxโหลดสไตล์ชีต
โหลดครั้งเดียวที่จุดเริ่มต้นของแอป หากลืม ตำแหน่งแผนที่และรูปลักษณ์ของตัวควบคุมจะเสียหาย
import '@mapconductor/react-for-mapbox/style.css';
ส่งผ่าน access token (หากจำเป็น)
โทเค็นจะถูกส่งผ่านไปยัง state hook ภายในจะถูกตั้งค่าทั่วไปเป็น mapboxgl.accessToken สามารถข้ามได้หากใช้เฉพาะการออกแบบที่ใช้ OSM
const mapState = useMapboxViewState({
id: 'mapbox-map',
accessToken: import.meta.env.VITE_MAPBOX_ACCESS_TOKEN,
mapDesignType: MapboxDesign.Streets,
cameraPosition: createMapCameraPosition({ position: TOKYO, zoom: 12 }),
});ตรวจสอบ
สิ่งที่ควรเห็น
หากใช้ OsmBright สามารถตรวจสอบการทำงานได้โดยไม่ต้องใช้โทเค็น
import { useState } from 'react';
import { createGeoPoint, createMapCameraPosition, createMarkerState } from '@mapconductor/js-sdk-core';
import { Marker } from '@mapconductor/js-sdk-react';
import { MapboxDesign, MapBoxMapView2D, useMapboxViewState } from '@mapconductor/react-for-mapbox';
import '@mapconductor/react-for-mapbox/style.css';
const TOKYO = createGeoPoint({ latitude: 35.6812, longitude: 139.7671 });
export function HelloMap() {
// No token needed for the OsmBright design
const mapState = useMapboxViewState({
id: 'mapbox-map',
mapDesignType: MapboxDesign.OsmBright,
cameraPosition: createMapCameraPosition({ position: TOKYO, zoom: 12 }),
});
const [markerState] = useState(() => createMarkerState({ id: 'tokyo', position: TOKYO }));
return (
<MapBoxMapView2D state={mapState} style={{ height: 480 }}>
<Marker state={markerState} />
</MapBoxMapView2D>
);
}อ็อบเจกต์สถานะ
พารามิเตอร์ที่ useMapboxViewState รับ โปรดทราบว่าชื่อ export ของมุมมองคือ MapBoxMapView / MapBoxMapView2D (B เป็นตัวพิมพ์ใหญ่)
useMapboxViewState({
id?: string;
accessToken?: string;
mapDesignType?: MapboxMapDesignType; // default MapboxDesign.Streets
cameraPosition?: MapCameraPosition; // default MapCameraPosition.Default
})ดีไซน์แผนที่
MapboxDesign แบ่งออกเป็น 2 กลุ่มคือ สิ่งที่ต้องการโทเค็นและสิ่งที่ไม่ต้องการโทเค็น
การแก้ปัญหา
แสดงเฉพาะรูปแบบ Mapbox ไม่ได้
- รูปแบบที่ขึ้นต้นด้วย mapbox:// จำเป็นต้องมีโทเค็น ตรวจสอบว่าได้ส่งผ่าน accessToken หรือไม่
- ตรวจสอบว่าโทเค็นเป็นโทเค็นสาธารณะและไม่หมดอายุหรือไม่
ระดับการซูมแตกต่างจากผู้ให้บริการรายอื่น
- MapConductor จัดระดับการซูมให้ตรงกับมาตรฐานของ Google Mapbox แปลงค่านี้โดยใช้ออฟเซ็ตจริง (googleZoom ≒ mapboxZoom + 1.0)
แผนที่ถูกเริ่มต้นสองครั้งเฉพาะระหว่างการพัฒนา
- React StrictMode จะรัน effect สองครั้ง ผู้ให้บริการแต่ละรายได้รับการออกแบบให้ตรวจจับสิ่งนี้และทิ้งอีกตัวไป ดังนั้นจึงไม่จำเป็นต้องปิดใช้งาน StrictMode
ถัดไป
เนื่องจากมีโครงสร้างเหมือนกับ MapLibre การเปลี่ยนแปลง mapDesignType จะทำให้ต้องสร้างแผนที่ใหม่