Definisci un poligono di confine

Seleziona la piattaforma: iOS JavaScript

Panoramica

Per applicare uno stile al riempimento e al tratto di un poligono di confine, utilizza FeatureStyleOptions per definire gli attributi di stile e imposta la proprietà style in un livello degli elementi su google.maps.FeatureStyleFunction, che contiene la logica di stile.

La mappa di esempio che segue mostra l'evidenziazione del poligono di confine di una singola regione.

Applica lo stile agli elementi di confine impostando la proprietà style su google.maps.FeatureStyleFunction, che può contenere logica di stile. La funzione di stile viene eseguita su ogni elemento nel livello degli elementi interessato e viene applicata nel momento in cui imposti la proprietà di stile. Per aggiornarla, imposta di nuovo la proprietà di stile.

Per applicare uno stile uniforme a tutte le caratteristiche di un livello di caratteristiche, imposta la proprietà style su un google.maps.FeatureStyleOptions. In questo caso, non è necessario utilizzare una funzione di stile delle caratteristiche, poiché la logica non è obbligatoria.

La funzione di stile dovrebbe sempre restituire risultati coerenti quando viene applicata alle caratteristiche. Ad esempio, se desideri colorare in modo casuale un insieme di caratteristiche, la parte casuale non dovrebbe avvenire nella funzione di stile delle caratteristiche, poiché ciò causerebbe risultati indesiderati.

Poiché questa funzione viene eseguita su tutte le funzionalità di un livello, l'ottimizzazione è importante. Per non influire sui tempi di rendering:

  • Abilita solo i livelli di cui hai bisogno.
  • Imposta style su null quando un livello non è più in uso.

Per applicare uno stile a un poligono nel livello degli elementi località, procedi nel seguente modo:

  1. Se non lo hai già fatto, segui la procedura descritta in Inizia per creare un nuovo ID mappa e un nuovo stile di mappa. Assicurati di attivare il livello di funzionalità Località.
  2. Ottieni un riferimento al livello degli elementi località quando la mappa viene inizializzata.

    featureLayer = map.getFeatureLayer("LOCALITY");
  3. Crea una definizione di stile di tipo google.maps.FeatureStyleFunction.

  4. Imposta la proprietà style nel livello degli elementi su FeatureStyleFunction. L'esempio seguente mostra la definizione di una funzione per applicare uno stile solo all'elemento google.maps.Feature con un ID luogo corrispondente:

    TypeScript

    // Define a style with purple fill and border.
    //@ts-ignore
    const featureStyleOptions: google.maps.FeatureStyleOptions = {
      strokeColor: '#810FCB',
      strokeOpacity: 1.0,
      strokeWeight: 3.0,
      fillColor: '#810FCB',
      fillOpacity: 0.5
    };
    
    // Apply the style to a single boundary.
    //@ts-ignore
    featureLayer.style = (options: { feature: { placeId: string; }; }) => {
      if (options.feature.placeId == 'ChIJ0zQtYiWsVHkRk8lRoB1RNPo') { // Hana, HI
        return featureStyleOptions;
      }
    };

    JavaScript

    // Define a style with purple fill and border.
    //@ts-ignore
    const featureStyleOptions = {
      strokeColor: "#810FCB",
      strokeOpacity: 1.0,
      strokeWeight: 3.0,
      fillColor: "#810FCB",
      fillOpacity: 0.5,
    };
    
    // Apply the style to a single boundary.
    //@ts-ignore
    featureLayer.style = (options) => {
      if (options.feature.placeId == "ChIJ0zQtYiWsVHkRk8lRoB1RNPo") {
        // Hana, HI
        return featureStyleOptions;
      }
    };

Se l'ID luogo specificato non viene trovato o non corrisponde al tipo di elemento selezionato, lo stile non viene applicato. Ad esempio, se tenti di applicare uno stile a un livello POSTAL_CODE corrispondente all'ID luogo di "New York City", non verrà applicato alcuno stile.

Rimuovere lo stile da un livello

Per rimuovere lo stile da un livello, imposta style su null:

featureLayer.style = null;

Cercare gli ID dei luoghi per scegliere come target gli elementi

Per ottenere gli ID luogo per le regioni:

La copertura varia in base alla regione. Per informazioni dettagliate, consulta Copertura dei confini di Google.

I nomi geografici sono disponibili da molte fonti, ad esempio la Commissione per i nomi geografici USGS e i file per i Gazetteer degli Stati Uniti.

Codice di esempio completo

TypeScript

let map: google.maps.Map;
//@ts-ignore
let featureLayer;

async function initMap() {
  // Request needed libraries.
  const { Map } = await google.maps.importLibrary("maps") as google.maps.MapsLibrary;

  map = new Map(document.getElementById('map') as HTMLElement, {
    center: { lat: 20.773, lng: -156.01 }, // Hana, HI
    zoom: 12,
    // In the cloud console, configure this Map ID with a style that enables the
    // "Locality" feature layer.
    mapId: 'a3efe1c035bad51b', // <YOUR_MAP_ID_HERE>,
  });

  //@ts-ignore
  featureLayer = map.getFeatureLayer('LOCALITY');

  // Define a style with purple fill and border.
  //@ts-ignore
  const featureStyleOptions: google.maps.FeatureStyleOptions = {
    strokeColor: '#810FCB',
    strokeOpacity: 1.0,
    strokeWeight: 3.0,
    fillColor: '#810FCB',
    fillOpacity: 0.5
  };

  // Apply the style to a single boundary.
  //@ts-ignore
  featureLayer.style = (options: { feature: { placeId: string; }; }) => {
    if (options.feature.placeId == 'ChIJ0zQtYiWsVHkRk8lRoB1RNPo') { // Hana, HI
      return featureStyleOptions;
    }
  };

}

initMap();

JavaScript

let map;
//@ts-ignore
let featureLayer;

async function initMap() {
  // Request needed libraries.
  const { Map } = await google.maps.importLibrary("maps");

  map = new Map(document.getElementById("map"), {
    center: { lat: 20.773, lng: -156.01 }, // Hana, HI
    zoom: 12,
    // In the cloud console, configure this Map ID with a style that enables the
    // "Locality" feature layer.
    mapId: "a3efe1c035bad51b", // <YOUR_MAP_ID_HERE>,
  });
  //@ts-ignore
  featureLayer = map.getFeatureLayer("LOCALITY");

  // Define a style with purple fill and border.
  //@ts-ignore
  const featureStyleOptions = {
    strokeColor: "#810FCB",
    strokeOpacity: 1.0,
    strokeWeight: 3.0,
    fillColor: "#810FCB",
    fillOpacity: 0.5,
  };

  // Apply the style to a single boundary.
  //@ts-ignore
  featureLayer.style = (options) => {
    if (options.feature.placeId == "ChIJ0zQtYiWsVHkRk8lRoB1RNPo") {
      // Hana, HI
      return featureStyleOptions;
    }
  };
}

initMap();

CSS

/* 
 * Always set the map height explicitly to define the size of the div element
 * that contains the map. 
 */
#map {
  height: 100%;
}

/* 
 * Optional: Makes the sample page fill the window. 
 */
html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

HTML

<html>
  <head>
    <title>Boundaries Simple</title>
    <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>

    <link rel="stylesheet" type="text/css" href="./style.css" />
    <script type="module" src="./index.js"></script>
  </head>
  <body>
    <div id="map"></div>

    <!-- prettier-ignore -->
    <script>(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})
        ({key: "AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg", v: "weekly"});</script>
  </body>
</html>

Prova Sample