Sınırlar için veriye dayalı stil özellikleri ile Yerler API'lerini ve Coğrafi Kodlamayı kullanın

Platform seçin: Android iOS JavaScript

Bölgeleri aramak ve yerler hakkında daha fazla bilgi edinmek için Maps JavaScript API'deki Places API'yi ve Geocoding API'yi kullanabilirsiniz. Geocoding API ve Places API, konum kimlikleri elde etmek için güçlü ve kararlı alternatiflerdir. Yer kimliklerini zaten kullanıyorsanız bu kimlikleri, sınırlar için veriye dayalı stilizasyonla kolayca yeniden kullanabilirsiniz.

Yerler ve Coğrafi Kodlama'yı Maps JavaScript API uygulamalarınıza aşağıdaki yöntemlerle ekleyin:

Places API'yi kullanma

Bölge bulmak için metin arama (yeni) özelliğini kullanma

Döndürülecek bölge türünü belirtmek için includedType kullanarak bölge verilerini içeren bir yer kimliği almak üzere Metin Arama (Yeni)'yi kullanabilirsiniz. Text Search (Yeni) API'nin yalnızca yer kimliklerini istemek için kullanımı ücretsizdir. Daha fazla bilgi

Bu örnek haritada, Trinidad, CA için yer kimliğini almak amacıyla bir searchByText isteğinde bulunduktan sonra sınıra stil uygulandığında gösterilmektedir:

TypeScript

async function findBoundary() {
    const request = {
        query: 'Trinidad, CA',
        fields: ['id', 'location'],
        includedType: 'locality',
        locationBias: center,
    };

    const { Place } = await google.maps.importLibrary("places") as google.maps.PlacesLibrary;
    //@ts-ignore
    const { places } = await Place.searchByText(request);

    if (places.length) {
        const place = places[0];
        styleBoundary(place.id);
        map.setCenter(place.location);
    } else {
        console.log('No results');
    }
}

function styleBoundary(placeid) {
    // Define a style of transparent purple with opaque stroke.
    const styleFill = {
        strokeColor: '#810FCB',
        strokeOpacity: 1.0,
        strokeWeight: 3.0,
        fillColor: '#810FCB',
        fillOpacity: 0.5
    };

    // Define the feature style function.
    featureLayer.style = (params) => {
        if (params.feature.placeId == placeid) {
            return styleFill;
        }
    };
}

JavaScript

async function findBoundary() {
  const request = {
    query: "Trinidad, CA",
    fields: ["id", "location"],
    includedType: "locality",
    locationBias: center,
  };
  const { Place } = await google.maps.importLibrary("places");
  //@ts-ignore
  const { places } = await Place.searchByText(request);

  if (places.length) {
    const place = places[0];

    styleBoundary(place.id);
    map.setCenter(place.location);
  } else {
    console.log("No results");
  }
}

function styleBoundary(placeid) {
  // Define a style of transparent purple with opaque stroke.
  const styleFill = {
    strokeColor: "#810FCB",
    strokeOpacity: 1.0,
    strokeWeight: 3.0,
    fillColor: "#810FCB",
    fillOpacity: 0.5,
  };

  // Define the feature style function.
  featureLayer.style = (params) => {
    if (params.feature.placeId == placeid) {
      return styleFill;
    }
  };
}

Örnek kaynak kodunun tamamını görme

TypeScript

let map;
let featureLayer;
let center;

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

    center = {lat: 41.059, lng: -124.151}; // Trinidad, CA

    map = new Map(document.getElementById('map') as HTMLElement, {
        center: center,
        zoom: 15,
        // In the cloud console, configure this Map ID with a style that enables the
        // "Locality" Data Driven Styling type.
        mapId: 'a3efe1c035bad51b', // <YOUR_MAP_ID_HERE>,
    });

    featureLayer = map.getFeatureLayer('LOCALITY');

    findBoundary();
}
async function findBoundary() {
    const request = {
        query: 'Trinidad, CA',
        fields: ['id', 'location'],
        includedType: 'locality',
        locationBias: center,
    };

    const { Place } = await google.maps.importLibrary("places") as google.maps.PlacesLibrary;
    //@ts-ignore
    const { places } = await Place.searchByText(request);

    if (places.length) {
        const place = places[0];
        styleBoundary(place.id);
        map.setCenter(place.location);
    } else {
        console.log('No results');
    }
}

function styleBoundary(placeid) {
    // Define a style of transparent purple with opaque stroke.
    const styleFill = {
        strokeColor: '#810FCB',
        strokeOpacity: 1.0,
        strokeWeight: 3.0,
        fillColor: '#810FCB',
        fillOpacity: 0.5
    };

    // Define the feature style function.
    featureLayer.style = (params) => {
        if (params.feature.placeId == placeid) {
            return styleFill;
        }
    };
}
initMap();

JavaScript

let map;
let featureLayer;
let center;

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

  center = { lat: 41.059, lng: -124.151 }; // Trinidad, CA
  map = new Map(document.getElementById("map"), {
    center: center,
    zoom: 15,
    // In the cloud console, configure this Map ID with a style that enables the
    // "Locality" Data Driven Styling type.
    mapId: "a3efe1c035bad51b", // <YOUR_MAP_ID_HERE>,
  });
  featureLayer = map.getFeatureLayer("LOCALITY");
  findBoundary();
}

async function findBoundary() {
  const request = {
    query: "Trinidad, CA",
    fields: ["id", "location"],
    includedType: "locality",
    locationBias: center,
  };
  const { Place } = await google.maps.importLibrary("places");
  //@ts-ignore
  const { places } = await Place.searchByText(request);

  if (places.length) {
    const place = places[0];

    styleBoundary(place.id);
    map.setCenter(place.location);
  } else {
    console.log("No results");
  }
}

function styleBoundary(placeid) {
  // Define a style of transparent purple with opaque stroke.
  const styleFill = {
    strokeColor: "#810FCB",
    strokeOpacity: 1.0,
    strokeWeight: 3.0,
    fillColor: "#810FCB",
    fillOpacity: 0.5,
  };

  // Define the feature style function.
  featureLayer.style = (params) => {
    if (params.feature.placeId == placeid) {
      return styleFill;
    }
  };
}

initMap();

Bölgeleri bulmak için Yerler Otomatik Tamamlama özelliğini kullanın

Yerler Otomatik Tamamlama widget'ı, kullanıcılarınızın bölge aramasını kolaylaştırır. Yerler otomatik tamamlama widget'ını yalnızca bölgeleri döndürecek şekilde yapılandırmak için aşağıdaki snippet'te gösterildiği gibi types değerini (regions) olarak ayarlayın:

// Set up the Autocomplete widget to return only region results.
const autocompleteOptions = {
  fields: ["place_id", "type"],
  strictBounds: false,
  types: ["(regions)"],
};

Bir bölgenin yer ayrıntılarını alma

Bir bölgenin yer ayrıntıları verileri oldukça yararlı olabilir. Örneğin, şunları yapabilirsiniz:

  • Yer adlarına göre sınır yer kimliklerini arayın.
  • Bir sınıra yakınlaştırmak için görüntü alanını alın.
  • Sınır için özellik türünü alın (örneğin locality).
  • ABD bölgesinde "Yer Adı, Eyalet, Ülke" (ör. "Ottumwa, IA, ABD") olarak çözümlenen biçimlendirilmiş adresi alın.
  • Fotoğraflar gibi başka faydalı verileri alabilirsiniz.

Aşağıdaki örnek işlev, Trinidad, CA için sınırı bulur ve haritayı sonuç üzerinde merkezler:

Aşağıdaki örnek işlev, place.geometry.viewport dahil olmak üzere yer ayrıntılarını almak için fetchFields()'ü, ardından haritayı seçili sınır poligonunda merkezlemek için map.fitBounds()'yi çağırır.

    async function getPlaceDetails(placeId) {
        // Use place ID to create a new Place instance.
        const place = new google.maps.places.Place({
            id: placeId,
        });

        // Call fetchFields, passing the desired data fields.
        await place.fetchFields({ fields: ['displayName', 'formattedAddress', 'geometry', 'type'] });

        // Zoom to the boundary polygon.
        let viewport = place.geometry.viewport;
        map.fitBounds(viewport, 155);

        // Print some place details to the console.
        const types = place.types;
        console.log("Feature type: " + types[0]);
        console.log("Formatted address: " + place.formattedAddress);
    }

Coğrafi Kodlama API'sini kullanma

Geocoding API, adresleri coğrafi koordinatlara veya coğrafi koordinatları adreslere dönüştürmenizi sağlar. Aşağıdaki kullanım alanları, sınırlar için veriye dayalı stil ile iyi bir şekilde birleştirilebilir:

  • Bir bölgenin görüntü alanını almak için Coğrafi Kodlama'yı kullanın.
  • 1-4 numaralı yönetim alanları, yerel bölge veya posta kodu için yer kimliklerini almak üzere Coğrafi Kodlama çağrınıza bileşen filtreleme uygulayın.
  • Enlem/boylam koordinatlarına göre yer kimliklerini bulmak veya belirli bir konumdaki tüm bileşenlerin yer kimliklerini döndürmek için ters coğrafi kodlamayı kullanın.

Bir bölgenin görüntü alanını alma

Coğrafi kodlama hizmeti, bir yer kimliği alıp haritadaki bir sınır poligonuna yakınlaştırmak için map.fitBounds() işlevine iletebileceğiniz bir görüntü alanı döndürebilir. Aşağıdaki örnekte, bir görüntü alanı almak için Coğrafi Kodlama hizmetinin kullanılması ve ardından map.fitBounds() çağrılması gösterilmektedir:

// Set up the geocoder.
geocoder = new google.maps.Geocoder();

...

// Call Geocoding API and zoom to the resulting bounds.
function zoomToPolygon(placeid) {
    geocoder
        .geocode({ placeId: placeid })
        .then(({ results }) => {
            map.fitBounds(results[0].geometry.viewport, 155);
        })
        .catch((e) => {
            console.log('Geocoder failed due to: ' + e)
        });
}

Ters coğrafi kodlama kullanma

Tersine coğrafi kodlama, yer kimliklerini bulmak için kullanılabilir. Aşağıdaki coğrafi kodlama hizmeti işlevi örneği, belirtilen enlem/boylam koordinatlarındaki tüm adres bileşenlerinin yer kimliklerini döndürür:

// Set up the geocoder.
geocoder = new google.maps.Geocoder();

...

// Call Geocoding API.
function getPlaceIds(latLng) {
    geocoder
        .geocode({ latLng })
        .then(({ results }) => {
            console.log('Geocoding result:');
            console.log(results[0]);
            console.log(results[0].place_id);
            console.log(results[0].address_components);
        })
        .catch((e) => {
            console.log('Geocoder failed due to: ' + e)
        });
}

Bu, eşdeğer ters coğrafi kodlama web hizmeti çağrısıdır:

https://maps.googleapis.com/maps/api/geocode/json?key="YOUR_API_KEY"&latlng=41.864182,-87.676930

Belirtilen konumda aşağıdaki türlerden en az birinin adres bileşenini almak için bileşen filtrelemeyle ters coğrafi kodlamayı kullanmak istiyorsanız:

  • administrativeArea
  • country
  • locality
  • postalCode

Bir sonraki örnek işlevde, coğrafi kodlama hizmetinin kullanılması, belirtilen konumdaki tüm adres bileşenlerini yalnızca locality türü için almak üzere ters coğrafi kodlama ile bileşen kısıtlamaları eklenmesi gösterilmektedir:

// Set up the geocoder.
geocoder = new google.maps.Geocoder();

...

function getPlaceIdWithRestrictions(latLng) {
    geocoder
        .geocode({ latLng,
            componentRestrictions: {
              country: "US",
              locality: "chicago",
            },
        })
        .then(({ results }) => {
            console.log('Geocoding result with restriction:');
            console.log(results[0]);
            console.log(results[0].place_id);
            console.log(results[0].address_components);
            console.log(results[0].address_components[1].types[0]);
            console.log(results[0].address_components[1].long_name);
        })
        .catch((e) => {
            console.log('getPlaceId Geocoder failed due to: ' + e)
        });
}

Bu, eşdeğer ters coğrafi kodlama web hizmeti çağrısıdır:

https://maps.googleapis.com/maps/api/geocode/json?key="YOUR_API_KEY"&latlng=41.864182,-87.676930&result_type=locality