Sınırlar için veri odaklı stil oluşturma ile birlikte Yerler API'lerini ve Coğrafi Kodlama'yı kullanma

Platform seçin: Android iOS JavaScript

Avrupa Ekonomik Alanı (AEA) geliştiricileri

Bölgeleri aramak ve yerler hakkında daha fazla bilgi edinmek için Maps JavaScript API'de Places API ve Geocoding API'yi kullanabilirsiniz. Coğrafi Kodlama API'si ve Places API, yer kimliklerini edinmek için güçlü ve kararlı alternatiflerdir. Yer kimliklerini zaten kullanıyorsanız bu kimlikleri, sınırlar için veriye dayalı stil oluşturma özelliğiyle kolayca yeniden kullanabilirsiniz.

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

Places API'yi 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)'yı kullanabilirsiniz. Yalnızca yer kimlikleri istemek için Metin Arama (Yeni) API'sinin kullanımı ücretsizdir. Daha fazla bilgi edinin.

Bu örnek haritada, Trinidad, CA için yer kimliği almak üzere searchByText isteğinde bulunma ve ardından sınıra stil uygulama 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;
    }
  };
}

Tam örnek kaynak kodunu görüntüleme

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 Places Autocomplete'i kullanma

Yerleri otomatik tamamlama widget'ı, kullanıcılarınızın bölgeleri aramasına olanak tanıyan kullanışlı bir yöntem sunar. Yalnızca bölgeleri döndürmek için Yerleri Otomatik Tamamlama widget'ını yapılandırmak üzere 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ölge için yer ayrıntılarını alma

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

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

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

Aşağıdaki örnek işlev, fetchFields() işlevini çağırarak place.geometry.viewport dahil olmak üzere yer ayrıntılarını alır, ardından map.fitBounds() işlevini çağırarak haritayı seçilen sınır poligonunda ortalar.

    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 data fields you want.
        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);
    }

Geocoding API'yi kullanma

Geocoding API, adresleri coğrafi koordinatlara ve coğrafi koordinatları adreslere dönüştürmenize olanak tanır. Aşağıdaki kullanımlar, sınırlar için veriye dayalı stil ile iyi bir şekilde birleştirilebilir:

  • Bir bölgenin görünüm alanını almak için coğrafi kodlamayı kullanın.
  • 1-4. idari bölgeler, yerleşim birimi 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 bir görünüm alanı döndürebilir. Bu görünüm alanını, haritada bir sınır çokgenini yakınlaştırmak için map.fitBounds() işlevine iletebilirsiniz. Aşağıdaki örnekte, bir görünüm alanı almak için Coğrafi Kodlama hizmetinin kullanılması ve ardından map.fitBounds() işlevinin ç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)
        });
}

Tersine coğrafi kodlamayı kullanma

Yer kimliklerini bulmak için tersine coğrafi kodlama kullanılabilir. Aşağıdaki örnek Geocoding service işlevi, 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)
        });
}

Aşağıda eşdeğer tersine coğrafi kodlama web hizmeti çağrısı verilmiştir:

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

Belirtilen konumda aşağıdaki türlerden bir veya daha fazlası için adres bileşenini almak üzere bileşen filtrelemeyle ters coğrafi kodlamayı kullanmak için:

  • administrativeArea
  • country
  • locality
  • postalCode

Aşağıdaki örnek işlevde, yalnızca locality türü için belirtilen konumdaki tüm adres bileşenlerini almak üzere ters coğrafi kodlamayla bileşen kısıtlamaları ekleyerek Coğrafi Kodlama hizmetinin nasıl kullanılacağı 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 tersine coğrafi kodlama web hizmeti çağrısıdır:

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