1. قبل از شروع
در این لبه کد، همه چیزهایی را که برای شروع با کتابخانه vis.gl/react-google-map
برای Google Maps JavaScript API نیاز دارید، یاد می گیرید، که به شما امکان می دهد نقشه گوگل را به برنامه React اضافه کنید. شما یاد می گیرید که چگونه راه اندازی کنید، Maps JavaScript API را بارگیری کنید، اولین نقشه خود را نمایش دهید، با نشانگرها و خوشه بندی نشانگرها کار کنید، روی نقشه بکشید، و تعامل با کاربر را مدیریت کنید.
پیش نیازها
- دانش اولیه جاوا اسکریپت، HTML و CSS
آنچه یاد می گیرید
- چگونه با کتابخانه
vis.gl/react-google-map
برای پلتفرم Google Maps شروع به کار کنیم. - نحوه بارگیری Maps JavaScript API به صورت اعلامی
- نحوه بارگذاری نقشه در برنامه React
- نحوه استفاده از نشانگرها، نشانگرهای سفارشی و خوشه بندی نشانگر.
- نحوه کار با سیستم رویداد Maps JavaScript API برای ارائه تعامل با کاربر.
- نحوه کنترل نقشه به صورت پویا
- نحوه ترسیم روی نقشه
آنچه شما نیاز دارید
- یک حساب Google Cloud با فعال کردن صورتحساب.
- یک کلید API پلتفرم Google Maps با فعال کردن API جاوا اسکریپت Maps.
- Node.js روی رایانه شما نصب شده است.
- یک ویرایشگر متن یا IDE به انتخاب شما.
- کتابخانه
vis.gl/react-google-map
برای Google Maps JavaScript API. - کتابخانه
googlemaps/markerclusterer
پلتفرم نقشه های گوگل را راه اندازی کنید
اگر قبلاً یک حساب Google Cloud Platform و پروژهای با صورتحساب فعال ندارید، لطفاً راهنمای شروع به کار با Google Maps Platform را برای ایجاد یک حساب صورتحساب و یک پروژه ببینید.
- در Cloud Console ، روی منوی کشویی پروژه کلیک کنید و پروژه ای را که می خواهید برای این کد لبه استفاده کنید انتخاب کنید.
- APIها و SDKهای پلتفرم Google Maps مورد نیاز برای این لبه کد را در Google Cloud Marketplace فعال کنید. برای انجام این کار، مراحل این ویدیو یا این مستند را دنبال کنید.
- یک کلید API در صفحه Credentials در Cloud Console ایجاد کنید. می توانید مراحل این ویدئو یا این مستند را دنبال کنید. همه درخواستها به پلتفرم Google Maps به یک کلید API نیاز دارند.
2. راه اندازی شوید
پروژه شروع را دانلود کنید
برای دانلود قالب پروژه شروع و کد راه حل، مراحل زیر را دنبال کنید:
- مخزن GitHub را دانلود یا فورک کنید. پروژه شروع در دایرکتوری
/starter
قرار دارد و شامل ساختار فایل اصلی است که برای تکمیل کد لبه نیاز دارید. شما تمام کارهای خود را در پوشه/starter/src
انجام می دهید.
git clone https://github.com/googlemaps-samples/codelab-maps-platform-101-react-js.git
یا برای دانلود کد منبع روی این دکمه کلیک کنید.
- به دایرکتوری
/starter
بروید و npm را نصب کنید. این همه وابستگی های مورد نیاز فهرست شده در فایلpackage.json
را نصب می کند.
cd starter && npm install
- در حالی که هنوز در دایرکتوری
/starter
هستید:
npm start
پروژه شروع برای شما تنظیم شده است تا از سرور توسعه Vite استفاده کنید، که کدی را که به صورت محلی می نویسید کامپایل و اجرا می کند. سرور توسعه Vite همچنین هر زمان که کد را تغییر دهید به طور خودکار برنامه شما را در مرورگر بارگیری می کند. اگر پیوند ارائه شده در پایان فرآیند ساخت را دنبال کنید، باید یک صفحه وب پیدا کنید که روی آن نوشته شده است: "سلام، دنیا!"
- اگر می خواهید کد راه حل کامل را اجرا کنید، به دایرکتوری
/solution
بروید و همان مراحل راه اندازی را انجام دهید.
3. Maps JavaScript API را بارگیری کنید
اساس استفاده از پلتفرم نقشه های گوگل برای وب، Maps JavaScript API است. این API یک رابط جاوا اسکریپت برای استفاده از تمام ویژگیهای پلتفرم نقشههای گوگل، از جمله نقشه، نشانگرها، ابزارهای طراحی و سایر خدمات پلتفرم نقشههای گوگل، مانند Places، ارائه میکند.
برای بارگیری Maps JavaScript API با چارچوب React، باید از مؤلفه APIProvider
که بخشی از کتابخانه vis.gl/react-google-map
است استفاده کنید. این مؤلفه را می توان در هر سطحی از برنامه اضافه کرد، معمولاً در جایی در بالا، و همه مؤلفه های فرزند را بدون تغییر ارائه می کند. علاوه بر مدیریت بارگذاری Maps JavaScript API، همچنین اطلاعات زمینه و توابع را برای سایر اجزا و قلاب های این کتابخانه فراهم می کند. APIProvider
در کتابخانه vis.gl/react-google-map
گنجانده شده است، بنابراین زمانی که npm install
قبلاً اجرا کردید نصب شد.
برای استفاده از کامپوننت APIProvider
، مراحل زیر را دنبال کنید:
- فایل
/src/app.tsx
را باز کنید. این فایل جایی است که شما تمام کارهای خود را برای این کد لبه انجام می دهید. - در بالای فایل، کلاس
APIProvider
را از کتابخانه@
vis.gl/react-google-maps
وارد کنید:
import {APIProvider} from '@vis.gl/react-google-maps';
- در تعریف تابع
App
، پارامترapiKey
مولفهAPIProvider
را با کلید API ایجاد شده در مرحله قبل و ویژگیonLoad
با یک پیام گزارش کنسول تنظیم کنید:
<APIProvider apiKey={'Your API key here'} onLoad={() => console.log('Maps API has loaded.')}>
مؤلفه APIProvider
مجموعهای از ویژگیها را دارد که گزینههای مختلفی را برای بارگیری Maps JavaScript API مشخص میکند، از جمله کلید API پلتفرم Google Maps شما، نسخهای از API که میخواهید بارگیری کنید، و هر کتابخانه اضافی ارائهشده توسط Maps JavaScript API که میخواهید بارگیری کنید.
کلید Google Maps API تنها ویژگی مورد نیاز برای عملکرد APIProvider
است، و ما ویژگی onLoad
را برای اهداف نمایشی اضافه کردیم. برای اطلاعات بیشتر به <APIProvider>
Component مراجعه کنید.
فایل app.tsx
شما باید به شکل زیر باشد:
import React from 'react';
import {createRoot} from "react-dom/client";
import {APIProvider} from '@vis.gl/react-google-maps';
const App = () => (
<APIProvider apiKey={'Your API key here'} onLoad={() => console.log('Maps API has loaded.')}>
<h1>Hello, world!</h1>
</APIProvider>
);
const root = createRoot(document.getElementById('app'));
root.render(<App />);
export default App;
اگر همه چیز با موفقیت انجام شد، باید عبارت console.log
را در کنسول مرورگر مشاهده کنید. اکنون که Maps JavaScript API بارگذاری شده است، می توانید نقشه پویا را در مرحله بعد رندر کنید.
4. نمایش یک نقشه
زمان نمایش اولین نقشه شماست!
متداول ترین قسمت مورد استفاده Maps JavaScript API google.maps.Map
است که به شما امکان می دهد نمونه های نقشه را ایجاد و دستکاری کنید. کتابخانه vis.gl/react-google-map
این کلاس را در مؤلفه Map
میپیچد. ابتدا کلاس های Map
و MapCameraChangedEvent
را وارد کنید.
import {APIProvider, Map, MapCameraChangedEvent} from '@vis.gl/react-google-maps';
مؤلفه Map
از تنظیمات مختلف برای نقشه پشتیبانی می کند. برای این کد لبه از تنظیمات زیر استفاده می کنید:
-
defaultCenter
، که طول و عرض جغرافیایی مرکز نقشه را تعیین می کند. -
defaultZoom
، که سطح بزرگنمایی اولیه نقشه را تعیین می کند. - برای نمایش یک نقشه، کد زیر را در تگ های
APIProvider
قرار دهید تا نقشه را در سیدنی، استرالیا در مرکز قرار دهید، و به آن سطح زوم13
بدهید، که سطح بزرگنمایی مناسب برای نشان دادن مرکز شهر است:
<Map
defaultZoom={13}
defaultCenter={ { lat: -33.860664, lng: 151.208138 } }
onCameraChanged={ (ev: MapCameraChangedEvent) =>
console.log('camera changed:', ev.detail.center, 'zoom:', ev.detail.zoom)
}>
</Map>
اکنون باید نقشه سیدنی را در مرورگر خود مشاهده کنید:
به طور خلاصه، در این بخش نقشه ای را با مولفه <Map>
نمایش می دهید و حالت اولیه آن را با ویژگی ها تنظیم می کنید. شما همچنین از رویدادها برای عکسبرداری از زمان تغییر دوربین استفاده کردید.
فایل app.tsx
شما باید چیزی شبیه به این باشد:
import React from 'react';
import {createRoot} from "react-dom/client";
import {APIProvider, Map, MapCameraChangedEvent} from '@vis.gl/react-google-maps';
const App = () => (
<APIProvider apiKey={'Your API key here'} onLoad={() => console.log('Maps API has loaded.')}>
<Map
defaultZoom={13}
defaultCenter={ { lat: -33.860664, lng: 151.208138 } }
onCameraChanged={ (ev: MapCameraChangedEvent) =>
console.log('camera changed:', ev.detail.center, 'zoom:', ev.detail.zoom)
}>
</Map>
</APIProvider>
);
const root = createRoot(document.getElementById('app'));
root.render(<App />);
export default App;
5. یک طراحی نقشه مبتنی بر ابر اضافه کنید
شناسه نقشه یک الزام برای استفاده از نشانگرهای پیشرفته است که از آنها برای علامت گذاری نقاط مورد علاقه در نقشه سیدنی استفاده می کنید. شناسه نقشه نیز برای طراحی نقشه مبتنی بر ابر استفاده می شود.
می توانید سبک نقشه خود را با استفاده از استایل نقشه مبتنی بر ابر سفارشی کنید.
یک شناسه نقشه ایجاد کنید
اگر هنوز شناسه نقشه با سبک نقشه مرتبط با آن ایجاد نکردهاید، برای تکمیل مراحل زیر، راهنمای Map IDs را ببینید:
- یک شناسه نقشه ایجاد کنید.
- شناسه نقشه را به سبک نقشه مرتبط کنید.
برای استفاده از شناسه نقشه ای که ایجاد کرده اید، ویژگی mapId
مولفه <Map>
را تنظیم کنید:
<Map
defaultZoom={13}
defaultCenter={ { lat: -33.860664, lng: 151.208138 } }
mapId='DEMO_MAP_ID'
onCameraChanged={ (ev: MapCameraChangedEvent) =>
console.log('camera changed:', ev.detail.center, 'zoom:', ev.detail.zoom)
}>
</Map>
شما باید سبکی را که انتخاب کرده اید روی نقشه ببینید!
6. نشانگرها را به نقشه اضافه کنید
کارهای زیادی وجود دارد که توسعه دهندگان با Maps JavaScript API انجام می دهند، اما قرار دادن نشانگرها روی نقشه قطعاً محبوب ترین آنهاست. نشانگرها به شما امکان میدهند نقاط خاصی را روی نقشه نشان دهید و یک عنصر رابط کاربری مشترک برای مدیریت تعامل کاربر هستند. اگر قبلاً از Google Maps استفاده کردهاید، احتمالاً با نشانگر پیشفرض آشنا هستید که به شکل زیر است:
برای استفاده از جزء AdvancedMarker
برای قرار دادن نشانگرها روی نقشه، مراحل زیر را دنبال کنید:
- فهرستی از اشیاء برای نشان دادن نقاط مورد علاقه در منطقه سیدنی ایجاد کنید، آن را درست زیر موارد وارداتی خود، خارج از تعریف
App
قرار دهید:
type Poi ={ key: string, location: google.maps.LatLngLiteral }
const locations: Poi[] = [
{key: 'operaHouse', location: { lat: -33.8567844, lng: 151.213108 }},
{key: 'tarongaZoo', location: { lat: -33.8472767, lng: 151.2188164 }},
{key: 'manlyBeach', location: { lat: -33.8209738, lng: 151.2563253 }},
{key: 'hyderPark', location: { lat: -33.8690081, lng: 151.2052393 }},
{key: 'theRocks', location: { lat: -33.8587568, lng: 151.2058246 }},
{key: 'circularQuay', location: { lat: -33.858761, lng: 151.2055688 }},
{key: 'harbourBridge', location: { lat: -33.852228, lng: 151.2038374 }},
{key: 'kingsCross', location: { lat: -33.8737375, lng: 151.222569 }},
{key: 'botanicGardens', location: { lat: -33.864167, lng: 151.216387 }},
{key: 'museumOfSydney', location: { lat: -33.8636005, lng: 151.2092542 }},
{key: 'maritimeMuseum', location: { lat: -33.869395, lng: 151.198648 }},
{key: 'kingStreetWharf', location: { lat: -33.8665445, lng: 151.1989808 }},
{key: 'aquarium', location: { lat: -33.869627, lng: 151.202146 }},
{key: 'darlingHarbour', location: { lat: -33.87488, lng: 151.1987113 }},
{key: 'barangaroo', location: { lat: - 33.8605523, lng: 151.1972205 }},
];
const App = () => (
...
);
- پین های خود را با عنصر
<Pin>
سفارشی کنید:
<Pin background={'#FBBC04'} glyphColor={'#000'} borderColor={'#000'} />
- یک مؤلفه سفارشی برای ارائه لیست خود با نشانگرهای پیشرفته ایجاد کنید، این را در زیر تعریف
App
قرار دهید:
const App = () => (
...
);
const PoiMarkers = (props: {pois: Poi[]}) => {
return (
<>
{props.pois.map( (poi: Poi) => (
<AdvancedMarker
key={poi.key}
position={poi.location}>
<Pin background={'#FBBC04'} glyphColor={'#000'} borderColor={'#000'} />
</AdvancedMarker>
))}
</>
);
};
- مولفه
PoiMarkers
را به عنوان فرزند جزءMap
اضافه کنید:
<Map
... map properties ...
>
<PoiMarkers pois={locations} />
</Map>
- در نهایت،
Pin
وAdvancedMarker
به واردات خود اضافه کنید.
import {
APIProvider,
Map,
AdvancedMarker,
MapCameraChangedEvent,
Pin
} from '@vis.gl/react-google-maps';
شما باید نشانگرهای پیشرفته سفارشی شده را روی نقشه ببینید:
7. خوشه بندی نشانگر را فعال کنید
هنگام استفاده از بسیاری از نشانگرها یا نشانگرها که در مجاورت یکدیگر قرار دارند، ممکن است با مشکلی روبرو شوید که نشانگرها روی هم قرار می گیرند یا خیلی شلوغ به نظر می رسند که باعث تجربه کاربری بدی می شود. به عنوان مثال، پس از ایجاد نشانگرها در مرحله آخر، ممکن است متوجه این موضوع شده باشید:
این جایی است که خوشهبندی نشانگر وارد میشود. خوشهبندی نشانگر یکی دیگر از ویژگیهای رایج است که نشانگرهای نزدیک را در یک نماد گروهبندی میکند که بسته به سطح بزرگنمایی تغییر میکند، مانند این:
الگوریتم برای خوشه بندی نشانگر، منطقه قابل مشاهده نقشه را به یک شبکه تقسیم می کند، سپس نمادهایی را که در همان سلول هستند، خوشه بندی می کند. خوشبختانه، لازم نیست نگران هیچکدام از این موارد باشید، زیرا تیم پلتفرم نقشههای گوگل یک کتابخانه ابزار مفید و منبع باز به نام MarkerClustererPlus
ایجاد کرده است که همه چیز را به صورت خودکار برای شما انجام میدهد. می توانید منبع کتابخانه MarkerClustererPlus
را در GitHub مشاهده کنید.
برای فعال کردن خوشه بندی نشانگر، مراحل زیر را دنبال کنید:
- در بالای فایل
app.tsx
، اجازه میدهیم واردات و انواع پشتیبانیکننده را بهروزرسانی کنیم و به کتابخانه خود اضافه کنیم.
import React, {useEffect, useState, useRef, useCallback} from 'react';
import {createRoot} from "react-dom/client";
import {
APIProvider,
Map,
AdvancedMarker,
MapCameraChangedEvent,
useMap,
Pin
} from '@vis.gl/react-google-maps';
import {MarkerClusterer} from '@googlemaps/markerclusterer';
import type {Marker} from '@googlemaps/markerclusterer';
برای پروژه الگوی این کد لبه، کتابخانه ابزار MarkerClustererPlus
قبلاً در وابستگیهای اعلام شده در فایل package.json
گنجانده شده است، بنابراین شما قبلاً آن را هنگام اجرای npm install
در ابتدای این کد لبه نصب کردهاید.
- متغیرهایی را برای
MarkerClusterer
و عناصر پشتیبانی کننده در مؤلفهPoiMarkers
ایجاد کنید.
برای مقداردهی اولیه MarkerClusterer
به یک نمونه از نقشه نیاز دارید. آن نمونه را از قلاب useMap()
دریافت کنید:
const map = useMap();
- لیستی از نشانگرهای ذخیره شده در یک متغیر حالت ایجاد کنید:
const [markers, setMarkers] = useState<{[key: string]: Marker}>({});
- ذخیره خوشه به عنوان مرجع:
const clusterer = useRef<MarkerClusterer | null>(null);
- همچنین در مؤلفه
PoiMarkers
خود، یک نمونه ازMarkerClusterer
ایجاد کنید و آن را به نمونهMap
منتقل کنید که میخواهید خوشههای نشانگر نمایش داده شوند:
useEffect(() => {
if (!map) return;
if (!clusterer.current) {
clusterer.current = new MarkerClusterer({map});
}
}, [map]);
- یک افکت ایجاد کنید که وقتی لیست نشانگر تغییر می کند، خوشه را به روز می کند:
useEffect(() => {
clusterer.current?.clearMarkers();
clusterer.current?.addMarkers(Object.values(markers));
}, [markers]);
- یک تابع برای برش منابع برای نشانگرهای جدید ایجاد کنید:
const setMarkerRef = (marker: Marker | null, key: string) => {
if (marker && markers[key]) return;
if (!marker && !markers[key]) return;
setMarkers(prev => {
if (marker) {
return {...prev, [key]: marker};
} else {
const newMarkers = {...prev};
delete newMarkers[key];
return newMarkers;
}
});
};
- از این روش در عنصر
AdvancedMarker
برای ایجاد مرجع برای هر نشانگر استفاده کنید.
<AdvancedMarker
key={poi.key}
position={poi.location}
ref={marker => setMarkerRef(marker, poi.key)}
>
<Pin background={'#FBBC04'} glyphColor={'#000'} borderColor={'#000'} />
</AdvancedMarker>
اکنون باید خوشه های نشانگر را روی نقشه خود ببینید:
اگر بزرگنمایی و کوچکنمایی کنید، MarkerClustererPlus
بهطور خودکار خوشهها را برای شما شمارهگذاری کرده و اندازه آنها را تغییر میدهد. همچنین میتوانید روی هر نماد خوشه نشانگر کلیک کنید تا بزرگنمایی کنید و همه نشانگرهای موجود در آن خوشه را ببینید.
برای جمع بندی، در این بخش، کتابخانه ابزار منبع باز MarkerClustererPlus
را وارد کرده و از آن برای ایجاد نمونه ای از MarkerClusterer
استفاده کرده اید که با کمک React state و مراجع، نشانگرهایی را که در مرحله قبل ایجاد کرده اید، به طور خودکار خوشه بندی می کند.
کامپوننت PoiMarkers
شما باید به شکل زیر باشد:
const PoiMarkers = (props: { pois: Poi[] }) => {
const map = useMap();
const [markers, setMarkers] = useState<{[key: string]: Marker}>({});
const clusterer = useRef<MarkerClusterer | null>(null);
// Initialize MarkerClusterer, if the map has changed
useEffect(() => {
if (!map) return;
if (!clusterer.current) {
clusterer.current = new MarkerClusterer({map});
}
}, [map]);
// Update markers, if the markers array has changed
useEffect(() => {
clusterer.current?.clearMarkers();
clusterer.current?.addMarkers(Object.values(markers));
}, [markers]);
const setMarkerRef = (marker: Marker | null, key: string) => {
if (marker && markers[key]) return;
if (!marker && !markers[key]) return;
setMarkers(prev => {
if (marker) {
return {...prev, [key]: marker};
} else {
const newMarkers = {...prev};
delete newMarkers[key];
return newMarkers;
}
});
};
return (
<>
{props.pois.map( (poi: Poi) => (
<AdvancedMarker
key={poi.key}
position={poi.location}
ref={marker => setMarkerRef(marker, poi.key)}
>
<Pin background={'#FBBC04'} glyphColor={'#000'} borderColor={'#000'} />
</AdvancedMarker>
))}
</>
);
};
در مرحله بعد، نحوه مدیریت تعامل کاربر را یاد می گیرید.
8. تعامل کاربر را اضافه کنید
اکنون یک نقشه عالی دارید که برخی از محبوب ترین مقاصد گردشگری سیدنی را نشان می دهد. در این بخش، برای بهبود بیشتر تجربه کاربری نقشه خود، برخی از مدیریت های اضافی تعاملات کاربر با سیستم رویداد Maps JavaScript API را اضافه می کنید.
Maps JavaScript API یک سیستم رویداد جامع را ارائه میکند که از کنترلکنندههای رویداد جاوا اسکریپت برای مدیریت تعاملات مختلف کاربر در کد استفاده میکند. برای مثال، میتوانید شنوندگان رویداد ایجاد کنید تا اجرای کد را برای فعل و انفعالاتی مانند کلیک کاربر روی نقشه و نشانگرها، جابجایی نمای نقشه، بزرگنمایی و کوچکنمایی و غیره ایجاد کنید.
برای افزودن یک click
شنونده به نشانگرهای خود و سپس به صورت برنامهریزی پانل نقشه را طوری بسازید که نشانگر کلیک شده در مرکز نقشه ظاهر شود، این مراحل را دنبال کنید:
- یک پاسخ تماس کنترل کننده
click
ایجاد کنید.
در مؤلفه PoiMarkers
، یک کنترل کننده click
با استفاده از useCallback()
تعریف کنید.
رویداد click
هر زمان که کاربر روی یک نشانگر کلیک یا ضربه میزند فعال میشود و رویدادی را بهعنوان یک شی JSON با اطلاعاتی درباره عنصر UI که روی آن کلیک شده است، برمیگرداند. برای بهبود تجربه کاربری نقشه، میتوانید رویداد click
را مدیریت کنید و از شی LatLng
آن برای دریافت طول و عرض جغرافیایی نشانگری که روی آن کلیک شده است استفاده کنید.
هنگامی که طول و عرض جغرافیایی را دارید، آن را به تابع داخلی panTo()
نمونه Map
ارسال کنید تا با افزودن موارد زیر در تابع callback کنترل کننده رویداد، نقشه به آرامی روی نشانگر کلیک شده حرکت کند:
const PoiMarkers = (props: { pois: Poi[] }) => {
...
const handleClick = useCallback((ev: google.maps.MapMouseEvent) => {
if(!map) return;
if(!ev.latLng) return;
console.log('marker clicked:', ev.latLng.toString());
map.panTo(ev.latLng);
});
...
};
- کنترل کننده های
click
را به نشانگرها اختصاص دهید.
عناصر AdvancedMarker
کتابخانه vis.gl/react-google-map
دو ویژگی را نشان می دهد که برای مدیریت کلیک ها مفید است:
-
clickable
: اگر درست باشد،AdvancedMarker
قابل کلیک خواهد بود و رویدادgmp-click
را راه اندازی می کند و برای اهداف دسترسی تعاملی خواهد بود. به عنوان مثال، به پیمایش صفحه کلید با کلیدهای جهت دار اجازه می دهد. -
onClick
: عملکرد برگشت به تماس برای تماس زمانی که رویدادclick
رخ می دهد.
- رندر
PoiMarkers
خود را به روز کنید تا یک کنترل کنندهclick
به هر نشانگر اختصاص دهید:
return (
<>
{props.pois.map( (poi: Poi) => (
<AdvancedMarker
... other properties ...
clickable={true}
onClick={handleClick}
>
...
</AdvancedMarker>
))}
</>
);
- به مرورگر بروید و روی نشانگرهای خود کلیک کنید. هنگامی که روی یک نشانگر کلیک میشود، باید نقشه را بهطور خودکار به سمت جدیدتر حرکت دهید.
برای جمعبندی، در این بخش، شما از سیستم رویداد React برای اختصاص یک کنترلکننده click
به همه نشانگرهای روی نقشه استفاده کردید، طول و عرض جغرافیایی نشانگر را از رویداد click
اجرا شده بازیابی کردید، و از آن برای بازیابی مجدد نقشه هر زمان که روی یک نشانگر کلیک شد استفاده کردید.
فقط یک قدم دیگر باقی مانده است! در مرحله بعد، تجربه کاربری نقشه را با ویژگیهای ترسیم Maps JavaScript API بهبود میبخشید.
9. روی نقشه بکشید
تاکنون نقشه ای از سیدنی ایجاد کرده اید که نشانگرهایی را برای مقاصد گردشگری محبوب نشان می دهد و تعامل کاربر را مدیریت می کند. برای آخرین مرحله از این نرم افزار کد، از ویژگی های ترسیم Maps JavaScript API استفاده می کنید تا یک ویژگی مفید اضافی را به تجربه نقشه خود اضافه کنید.
تصور کنید که این نقشه قرار است توسط کاربرانی که می خواهند شهر سیدنی را کاوش کنند استفاده کنند. یک ویژگی مفید این است که هنگام کلیک روی یک نشانگر، شعاع اطراف آن را تجسم کنید. این به کاربر اجازه میدهد بفهمد که چه مقاصدی در فاصلهی پیادهروی نشانگر کلیک شده قرار دارند.
Maps JavaScript API شامل مجموعه ای از توابع برای ترسیم اشکال بر روی نقشه است، مانند مربع، چند ضلعی، خطوط و دایره. کتابخانه vis.gl/react-google-map
این قابلیت ها را در React در دسترس شما قرار می دهد.
در مرحله بعد، یک دایره را رندر میدهید تا شعاع 800 متری (تقریباً نیم مایل) در اطراف یک نشانگر را با کلیک روی آن نشان دهید.
مخزن استارت حاوی یک جزء سفارشی برای یک عنصر circle
است. می توانید آن را در فایل src/components/circle.tsx
پیدا کنید.
برای اینکه کاربران بتوانند روی نقشه ترسیم کنند، این مراحل را دنبال کنید:
- واردات خود را بهروزرسانی کنید تا مؤلفه Circle ارائه شده را نیز شامل شود.
import {Circle} from './components/circle'
- یک متغیر حالت برای مرکز دایره ایجاد کنید.
وضعیت مرکز دایره خود را در مؤلفه PoiMarkers
خود ثبت کنید. شما حالت اولیه را روی null قرار می دهید و به این واقعیت متمایل می شوید که یک دایره رندر نمی شود مگر اینکه یک مرکز (و شعاع) معتبر داشته باشد.
const PoiMarkers = (props: { pois: Poi[] }) => {
...
const [circleCenter, setCircleCenter] = useState(null)
...
};
- هنگامی که یک رویداد
click
انجام می شود، مرکز دایره را به روز کنید.
با مکان یافت شده در شی رویداد، setCircleCenter
فراخوانی کنید:
const handleClick = useCallback((ev: google.maps.MapMouseEvent) => {
...
setCircleCenter(ev.latLng);
});
توابع ترسیم در Maps JavaScript API گزینه های بسیار متنوعی را برای نحوه نمایش یک شی ترسیم شده روی نقشه در اختیار شما قرار می دهد. برای ارائه یک شعاع دایرهای، ویژگیهای عنصر دایره مانند رنگ و وزن ضربهای را که باید در مرکز دایره و شعاع آن قرار گیرد، تنظیم کنید.
- یک دایره به رندر خود اضافه کنید و مرکز را به متغیر حالت خود متصل کنید. رندر شما باید به شکل زیر باشد:
return (
<>
<Circle
radius={800}
center={circleCenter}
strokeColor={'#0c4cb3'}
strokeOpacity={1}
strokeWeight={3}
fillColor={'#3b82f6'}
fillOpacity={0.3}
/>
{props.pois.map( (poi: Poi) => (
<AdvancedMarker
key={poi.key}
position={poi.location}
ref={marker => setMarkerRef(marker, poi.key)}
clickable={true}
onClick={handleClick}
>
<Pin background={'#FBBC04'} glyphColor={'#000'} borderColor={'#000'} />
</AdvancedMarker>
))}
</>
);
};
همه چیز تمام شد! به مرورگر خود بروید و روی یکی از نشانگرها کلیک کنید. شما باید یک شعاع دایره ای را در اطراف آن ببینید:
10. تبریک می گویم
شما اولین برنامه وب خود را با کتابخانه vis.gl/react-google-map
برای پلتفرم Google Maps ساخته اید، از جمله بارگیری Maps JavaScript API، بارگیری نقشه، کار با نشانگرها، کنترل و ترسیم روی نقشه، و افزودن تعامل کاربر.
برای مشاهده کد تکمیل شده، به دایرکتوری /solutions
مراجعه کنید.