如何将基于GeoJSON源在Mapbox绘制多边形的代码转换为React实现
第一步:安装指定版本依赖
npm install mapbox-gl@2.4.1
第二步:React组件代码
import React, { useRef, useEffect } from 'react'; import mapboxgl from 'mapbox-gl'; import 'mapbox-gl/dist/mapbox-gl.css'; const MapboxPolygon = () => { const mapContainerRef = useRef(null); const mapRef = useRef(null); useEffect(() => { // 避免重复初始化地图 if (mapRef.current) return; mapboxgl.accessToken = 'pk.eyJ1IjoiZW1tYW51ZWxud2Fub2NoaWUiLCJhIjoiY2t0bGozd2YwMDJpcjJ1czh2aHVscmk1eCJ9.XlprBONdRkZdwS4NYdKbGw'; // 初始化地图 const map = new mapboxgl.Map({ container: mapContainerRef.current, style: 'mapbox://styles/mapbox/light-v10', center: [-68.137343, 45.137451], zoom: 5 }); map.on('load', () => { // 添加GeoJSON数据源 map.addSource('maine', { type: 'geojson', data: { type: 'Feature', geometry: { type: 'Polygon', coordinates: [ [ [-67.13734, 45.13745], [-66.96466, 44.8097], [-68.03252, 44.3252], [-69.06, 43.98], [-70.11617, 43.68405], [-70.64573, 43.09008], [-70.75102, 43.08003], [-70.79761, 43.21973], [-70.98176, 43.36789], [-70.94416, 43.46633], [-71.08482, 45.30524], [-70.66002, 45.46022], [-70.30495, 45.91479], [-70.00014, 46.69317], [-69.23708, 47.44777], [-68.90478, 47.18479], [-68.2343, 47.35462], [-67.79035, 47.06624], [-67.79141, 45.70258], [-67.13734, 45.13745] ] ] } } }); // 添加填充图层 map.addLayer({ id: 'maine', type: 'fill', source: 'maine', layout: {}, paint: { 'fill-color': '#0080ff', 'fill-opacity': 0.5 } }); // 添加边框图层 map.addLayer({ id: 'outline', type: 'line', source: 'maine', layout: {}, paint: { 'line-color': '#000', 'line-width': 3 } }); }); // 存储地图实例 mapRef.current = map; // 组件卸载时清理地图实例 return () => { if (mapRef.current) { mapRef.current.remove(); mapRef.current = null; } }; }, []); return <div ref={mapContainerRef} style={{ width: '100%', height: '100vh' }} />; }; export default MapboxPolygon;
使用说明
直接在需要展示地图的位置引入该组件即可,和原生HTML效果完全一致,包含缅因州区域的蓝色半透明填充和黑色描边。
内容的提问来源于stack exchange,提问作者Emmanuel Nwanochie
相关产品推荐
相关产品推荐

