दस्तावेज़ / सेटअप / React / Google Maps

Google Maps का सेटअप

यह MapConductor से Google Maps को Web पर उपयोग करने की प्रक्रिया है। Google Maps JavaScript API गतिशील रूप से लोड होता है, इसलिए आपको script टैग लिखने की आवश्यकता नहीं है। 2D और 3D के लिए अलग-अलग विचार (views) का उपयोग किया जाता है।

PACKAGE
react-for-googlemaps
API KEY
आवश्यक
CSS
अनावश्यक
REACT NATIVE
हाँ
वही प्रोवाइडर, दूसरे प्लेटफ़ॉर्मAndroidiOS

शुरू करने से पहले

Node.js 18 या उच्चतर
Maps SDK / JavaScript API सक्षम वाला Google Cloud प्रोजेक्ट
HTTP रेफरर द्वारा प्रतिबंधित API कुंजी
STEP 01

API कुंजी प्राप्त करें

  1. Google Cloud Console में Maps JavaScript API को सक्षम करें।
  2. "Credentials" (प्रमाणपत्र) से API कुंजी बनाएं।
  3. कुंजी को डिलीवरी डोमेन के HTTP रेफरर तक सीमित करें।
सावधानी
कुंजी को बिल्ड समय के वातावरण चर (Vite के लिए import.meta.env.VITE_*) से पास करें, और इसे स्रोत प्रबंधन में न रखें। जब तक यह फ्रंटएंड तक पहुँचती है, हानि रोकने के लिए रेफरर प्रतिबंध या डोमेन प्रतिबंध अवश्य लगाएँ।
STEP 02

इंस्टॉल करें

Google Maps JavaScript API को @googlemaps/js-api-loader द्वारा गतिशील रूप से लोड किया जाता है। यह लोडर पैकेज में शामिल है, इसलिए आपको इसे अलग से इंस्टॉल करने की आवश्यकता नहीं है, न ही CSS लोड करने की आवश्यकता है।

terminalnpm
npm install @mapconductor/js-sdk-core @mapconductor/js-sdk-react \
            @mapconductor/react-for-googlemaps
STEP 03

कुंजी को स्थिति हुक में पास करें

कुंजी को विचार (view) component के props के बजाय स्थिति हुक (state hook) में पास करें। यदि आप इसे props में रखते हैं, तो यह टेस्ट लॉग और स्नैपशॉट में मिश्रित हो जाएगी।

HelloMap.tsxTypeScript · React
const mapState = useGoogleMapViewState({
  id: 'web-google-map',
  apiKey: import.meta.env.VITE_GOOGLE_MAPS_API_KEY,
  mapDesignType: GoogleMapDesign.Normal,
  cameraPosition: createMapCameraPosition({ position: TOKYO, zoom: 12 }),
});
जब कुंजी नहीं होती है तो कोई विशेष त्रुटि नहीं आती है। यह लोड विफलता के रूप में प्रकट होती है, इसलिए पहले कुंजी पर संदेह करें।
STEP 04

2D और 3D का उपयोग करना

Google Maps में दो स्टैक होते हैं, और MapConductor प्रत्येक के लिए अलग-अलग विचार प्रदान करता है। दोनों एक ही स्थिति वस्तु (state object) साझा करते हैं। mapId सेट करने पर 2D साइड के मार्कर AdvancedMarkerElement के साथ बनाए जाते हैं, और सेट न करने पर पारंपरिक मार्कर बन जाते हैं।

HelloMap.tsxTypeScript · React
// Classic 2D map (google.maps.Map)
<GoogleMapView2D state={mapState} mapId="YOUR_MAP_ID" />

// True 3D camera (google.maps.maps3d.Map3DElement)
<GoogleMapView state={mapState} mapId="YOUR_MAP_ID" version="alpha" />
सावधानी
3D विचार (GoogleMapView) में उपयोग किए जा सकने वाले डिज़ाइन केवल Normal, Hybrid, और Satellite हैं। Terrain और None पास करने पर रनटाइम पर अपवाद आता है। 3D maps3d लाइब्रेरी का उपयोग करता है, इसलिए version="alpha" आवश्यक है।

जाँच

आपको क्या दिखना चाहिए

टोक्यो को केंद्र में रखकर नक्शा प्रदर्शित होना चाहिए और एक मार्कर लगा होना चाहिए, यही पूर्णता है।

HelloMap.tsxTypeScript · React
import { useState } from 'react';
import { createGeoPoint, createMapCameraPosition, createMarkerState } from '@mapconductor/js-sdk-core';
import { Marker } from '@mapconductor/js-sdk-react';
import { GoogleMapDesign, GoogleMapView2D, useGoogleMapViewState } from '@mapconductor/react-for-googlemaps';

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

export function HelloMap() {
  const mapState = useGoogleMapViewState({
    id: 'web-google-map',
    apiKey: import.meta.env.VITE_GOOGLE_MAPS_API_KEY,
    mapDesignType: GoogleMapDesign.Normal,
    cameraPosition: createMapCameraPosition({ position: TOKYO, zoom: 12 }),
  });
  const [markerState] = useState(() => createMarkerState({ id: 'tokyo', position: TOKYO }));

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

स्टेट ऑब्जेक्ट

useGoogleMapViewState द्वारा प्राप्त पैरामीटर हैं।

signatureTypeScript
useGoogleMapViewState({
  id?: string;
  apiKey?: string;                     // required in practice
  mapId?: string;                      // Advanced Markers / cloud styling
  mapDesignType?: GoogleMapDesignType; // default GoogleMapDesign.Normal
  cameraPosition?: MapCameraPosition;  // default MapCameraPosition.Default
})

मैप डिज़ाइन

GoogleMapDesign Google के मैप प्रकारों के अनुरूप है।

GoogleMapDesign
Notes
Normal
रोडमैप। 3D में भी उपयोग कर सकते हैं
Satellite
उपग्रह चित्र। 3D में भी उपयोग कर सकते हैं
Hybrid
उपग्रह चित्र + लेबल। 3D में भी उपयोग कर सकते हैं
Terrain
भू-आकृति मानचित्र। केवल 2D
None
बेस मैप नहीं। केवल 2D

समस्या निवारण

नक्शा प्रदर्शित नहीं हो रहा है

  • यह जांचें कि क्या कुंजी स्थिति हुक में पारित की गई है या क्या पर्यावरण चर पढ़ा जा सकता है।
  • Console में जांचें कि क्या कुंजी की रेफरर सीमा वास्तविक वितरण डोमेन से मेल खाती है।

3D दृश्य एक अपवाद फेंक रहा है

  • जांचें कि क्या आप mapDesignType में Terrain या None पास कर रहे हैं। 3D केवल Normal, Hybrid, और Satellite के लिए है।
  • जांचें कि क्या आप version="alpha" पास कर रहे हैं।

विकास के दौरान नक्शा दो बार प्रारंभ होता है

  • React StrictMode effect को दो बार निष्पादित करता है। प्रत्येक प्रदाता इसका पता लगाता है और एक को छोड़ देता है, इसलिए आपको StrictMode को हटाने की आवश्यकता नहीं है।

आगे

3D दृश्य में, कैमरे की range को विंडो के आकार बदलने के अनुसार समायोजित किया जाता है, इसलिए स्क्रीन के आकार बदलने पर भी ज़ूम दिखने का तरीका समान रहता है।