BigQuery ve Datasets API ile verilerinizi görselleştirme

Bu dokümanda, Google Cloud Platform BigQuery ve Google Haritalar Platformu Veri Kümeleri API'si'nde konum verileriyle harita verisi görselleştirmeleri oluşturmak için referans bir mimari ve örnek (ör. açık belediye verilerini analiz etme, telekomünikasyon kapsama haritası oluşturma veya mobil araç filosunun hareket izlerini görselleştirme) sağlanmaktadır.

Harita veri görselleştirmeleri, kullanıcılarla etkileşim kurmak ve konum verilerindeki mekansal analizleri ortaya çıkarmak için güçlü bir araçtır. Konum verileri, nokta, çizgi veya poligon özelliklerine sahip verilerdir. Örneğin, hava durumu haritaları tüketicilerin seyahatlerini anlamalarına, seyahat planlamalarına ve fırtınalara hazırlanmalarına yardımcı olurken, iş zekası haritaları kullanıcıların veri analizlerinden bilgi edinmesine ve telekomünikasyon haritaları, kullanıcıların belirli bir hizmet bölgesindeki sağlayıcılarının kapsamını ve kalitesini anlamalarına yardımcı olur.

Ancak, uygulama geliştiricilerin yüksek performans gösteren ve mükemmel bir kullanıcı deneyimi sunan büyük harita verisi görselleştirmeleri oluşturması zordur. Büyük veriler istemci tarafına belleğe yüklenmesi gerektiğinden, ilk harita yükleme süreleri yavaşlar. Görsel, bellek ve GPU kısıtlamaları olan düşük kaliteli cep telefonları da dahil olmak üzere tüm cihazlarda yüksek performanslı olmalıdır. Son olarak geliştiricilerin taşınabilir, güvenilir ve büyük verilerde yüksek performans gösteren büyük bir veri oluşturma kitaplığı seçmesi gerekir.

Referans Mimari

Büyük veri görselleştirmeleri içeren uygulamalar geliştirmek için iki ana bileşen gerekir.

  1. Müşteri arka ucu: İşleme ve depolama gibi tüm arka uç uygulama verileri ve hizmetleri.
  2. Müşteri istemcisi: Harita görselleştirme bileşeni içeren uygulama kullanıcı arayüzünüz.

Aşağıda, büyük bir veri görselleştirme uygulaması oluşturmak için bu iki bileşenin uygulama kullanıcısı, Google Cloud ve Google Haritalar Platformu ile nasıl etkileşime geçtiğini gösteren bir sistem şeması verilmiştir.

mimari şeması

Tasarımla ilgili dikkat edilmesi gereken noktalar

Google Cloud ve Google Haritalar Platformu'nu kullanarak yüksek performanslı bir veri görselleştirmesi oluşturmak için tasarımla ilgili dikkat edilmesi gereken birkaç nokta vardır.

  1. Kaynak veri boyutu ve güncelleme sıklığı.
    1. Geojson biçimindeki kaynak veriler 5 MB'tan küçükse veya çok sık güncelleniyorsa (ör. canlı hava durumu radar tahmini) verileri uygulamanızda istemci tarafında geojson nesnesi olarak sunmayı ve deck.gl katmanıyla oluşturmayı deneyin.
    2. Verilerinizin boyutu 5 MB'tan büyükse ve saatte en fazla bir kez güncelleniyorsa bu belgedeki Datasets API mimarisini kullanabilirsiniz.
      1. Veri kümeleri 350 MB'a kadar dosyaları destekler.
      2. Verileriniz 350 MB'tan büyükse veri kümelerine aktarmadan önce kaynak dosyasındaki geometri verilerini azaltmayı veya basitleştirmeyi düşünebilirsiniz (Aşağıdaki Verileri Azaltma bölümüne bakın).
  2. Şema ve biçim
    1. Verilerinizin her özellik için dünya genelinde benzersiz bir kimlik özelliğine sahip olduğundan emin olun. Tekil kimlik, belirli bir özelliği seçip biçimlendirmenize veya verileri bir özellikle birleştirerek görselleştirmenize olanak tanır. Örneğin, "tıklama" kullanıcı etkinliğinde seçili bir özelliğe stil uygulama.
    2. Verilerinizi geçerli sütun adları, veri türleri ve GeoJSON nesne türleriyle Datasets API spesifikasyonuna göre CSV veya GeoJSON olarak biçimlendirin.
    3. BigQuery'de veri kümelerini kolayca oluşturmak için SQL CSV dışa aktarma dosyanızda wkt adlı bir sütun oluşturun. Veri kümeleri, wkt adlı bir sütundan İyi Bilinen Metin (WKT) biçiminde bir CSV'den geometrinin içe aktarılmasını destekler.
    4. Verilerinizin geçerli geometri ve veri türleri olduğundan emin olun. Örneğin, GeoJSON, WGS84 koordinat sisteminde, geometrik sarma sırasında vb. olmalıdır.
    5. Bir kaynak dosyasındaki tüm geometrilerin geçerli olduğundan emin olmak için geojson-validate gibi bir araç veya bir kaynak dosyayı biçimler ya da koordinat sistemleri arasında dönüştürmek için ogr2ogr kullanın.
  3. Veri azaltma
    1. Özelliklerin özelliklerinin sayısını en aza indirin. Benzersiz tanımlayıcı anahtarında (örnek) çalışma zamanında bir özelliğe başka özellikler daha ekleyebilirsiniz.
    2. Mümkün olduğunda tesis nesneleri için tam sayı veri türleri kullanarak karo depolama alanını en aza indirin. Böylece karolar, istemci uygulamasında HTTPS üzerinden yüklenirken performanslı kalır.
    3. Çok karmaşık özellik geometrilerini basitleştirin ve/veya toplayın. Kaynak dosya boyutunu azaltmak ve harita performansını artırmak için karmaşık poligon geometrilerinde ST_Simplify gibi BigQuery işlevlerini kullanmayı düşünün.
  4. Karolara ayırma
    1. Google Haritalar Veri Kümeleri API'si, web veya mobil Haritalar SDK'sıyla kullanılmak üzere kaynak veri dosyanızdan harita karoları oluşturur.
    2. Harita karoları, görsel bir uygulamaya veri yüklemenin daha verimli yollarını sağlayan, yakınlaştırmaya dayalı bir dizine ekleme sistemidir.
    3. Harita parçaları, daha düşük yakınlaştırma düzeylerinde yoğun veya karmaşık özellikleri çıkarabilir. Kullanıcı bir eyalete veya ülkeye (ör. z5-z12) yakınlaştırdığında, bir şehre veya mahalleye (ör. z13-z18) yakınlaştırdığından farklı görünebilir.

Örnek - Londra'daki demiryolları

Bu örnekte, GCP ve Google Haritalar ile Londra'daki tüm demiryollarını Open Street Map (OSM) verilerinden görselleştiren bir web uygulaması oluşturmak için referans mimarisi uygulayacağız.

Ön koşullar

  1. BigQuery korumalı alanına ve Cloud Console'a erişim
  2. GCP projeniz ve faturalandırma hesabınız olduğundan emin olun.

1. Adım: BigQuery'de verileri sorgulayın

BigQuery'deki Herkese Açık Veri Kümeleri'ne gidin. "bigquery-public-data" veri kümesi ve geo_openstreetmap.planet_features tablosu, tüm olası özellikler dahil olmak üzere dünya genelindeki Open Street Map (OSM) verilerini içerir. OSM Wiki'de amenity, road ve landuse gibi sorgulanabilen tüm özellikleri keşfedin.

SQL kullanarak tabloyu sorgulamak için Cloud Shell veya BigQuery Cloud Console'u(https://console.cloud.google.com) kullanın. Aşağıdaki kod snippet'inde, bir sınırlayıcı kutu ve ST_Intersects() işlevi kullanılarak yalnızca Londra'ya göre filtrelenen tüm demiryollarını sorgulamak için bq query komutu kullanılmaktadır.

Bu sorguyu Cloud Shell'den gerçekleştirmek için aşağıdaki kod snippet'ini çalıştırın. Bu sırada ortamınızın proje kimliğini, veri kümesini ve tablo adını güncelleyin.

bq query --use_legacy_sql=false \
--destination_table PROJECTID:DATASET.TABLENAME \
--replace \
'SELECT
osm_id, 
feature_type,
(SELECT value
         FROM   unnest(all_tags)
         WHERE  KEY = "name") AS name,
(SELECT value
         FROM   unnest(all_tags)
         WHERE  KEY = "railway") AS railway,
geometry as wkt
FROM   bigquery-public-data.geo_openstreetmap.planet_features
WHERE ("railway") IN (SELECT key FROM unnest(all_tags)) 
    AND ST_Intersects(
    geometry,
ST_MakePolygon(ST_MakeLine(
      [ST_GeogPoint(-0.549370, 51.725346),
      ST_GeogPoint(-0.549370, 51.2529407),
      ST_GeogPoint(0.3110581, 51.25294),
      ST_GeogPoint(0.3110581, 51.725346),
      ST_GeogPoint(-0.549370, 51.725346)]
    ))
   )' 

Sorgu şu sonucu döndürür:

  1. Her özellik için benzersiz bir tanımlayıcı osm_id
  2. feature_type (ör.noktalar, çizgiler vb.)
  3. Özelliğin name değeri (ör. Paddington Station)
  4. railway türü (ör.ana, turizm, askeri vb.)
  5. Özelliğin wkt değeri: WKT biçiminde nokta, çizgi veya poligon geometrisi. WKT, BigQuery Coğrafya sütunlarının bir sorguda döndürdüğü standart veri biçimidir.

Not: Veri kümesi oluşturmadan önce sorgu sonuçlarınızı görsel olarak doğrulamak için Looker Studio'yu kullanarak verilerinizi BigQuery'deki bir kontrol panelinde hızlıca görselleştirebilirsiniz.

Tabloyu bir Google Cloud Storage paketindeki bir CSV dosyasına aktarmak için Cloud Shell'de bqExtract komutunu kullanın:

bq extract \
--destination_format "CSV" \
--field_delimiter "," \
--print_header=true \
PROJECTID:DATASET.TABLENAME \
gs://BUCKET/FILENAME.csv

Not: Verilerinizi düzenli olarak güncellemek için Cloud Scheduler'ı kullanarak her adımı otomatikleştirebilirsiniz.

2. Adım: CSV dosyanızdan veri kümesi oluşturun

Ardından, Google Cloud Storage'daki (GCS) sorgu çıkışından bir Google Haritalar Platformu veri kümesi oluşturun. Datasets API'yi kullanarak bir veri kümesi oluşturabilir ve ardından GCS'de barındırılan bir dosyadan veri kümenize veri yükleyebilirsiniz.

Başlamak için GCP projenizde Haritalar Veri Kümeleri API'yi etkinleştirin ve API dokümanlarını inceleyin. Uygulamanızın arka ucundaki mantıktan Datasets API'yi çağırmak için Python ve Node.js istemci kitaplıkları vardır. Ayrıca, Cloud Console'da veri kümelerini manuel olarak oluşturmak için bir veri kümesi kullanıcı arayüzü de vardır.

Veri kümesi yüklemeniz tamamlandıktan sonra veri kümenizi Veri Kümeleri GUI'sinde önizleyebilirsiniz.

Veri kümesi önizlemesi

4. Adım: Veri kümenizi bir harita kimliğiyle ilişkilendirin

Veri kümeniz oluşturulduktan sonra ilişkili bir harita stiliyle harita kimliği oluşturabilirsiniz. Harita Stili düzenleyicisinde, MapId ve stili Veri Kümesiyle ilişkilendirebilirsiniz. Haritanızın görünümünü ve tarzını özelleştirmek için Bulut Tabanlı Harita Stili'ni de uygulayabilirsiniz.

5. Adım - İstemci uygulama haritası görselleştirmenizi oluşturun

Son olarak, Haritalar JS API'yi kullanarak veri kümesini istemci taraflı bir veri görselleştirme uygulamasına ekleyebilirsiniz. Önceki adımdaki veri kümenizle ilişkili mapID'yi kullanarak harita nesnenizi başlatın. Ardından, veri kümesi katmanınızın stilini ve etkileşimini ayarlayın. Daha fazla bilgi için Veri kümeleriyle veri odaklı stil oluşturma kılavuzuna göz atın.

Haritalar JS API'yi kullanarak stili özelleştirebilir, stili dinamik olarak değiştirmek için etkinlik işleyiciler ekleyebilir ve daha fazlasını yapabilirsiniz. Dokümanlardaki örneklere bakın. Aşağıda, bu örnek için "feature_type" özelliğine göre nokta ve çizgi özellik stilini oluşturacak bir setStyle işlevi tanımlayacağız.

function setStyle(params) {
  const map.getDatasetFeatureLayer("your-dataset-id");
  const datasetFeature = params.feature;
  const type = datasetFeature.datasetAttributes["feature_type"];
if (type == "lines") {
           return {
             fillColor: "blue",
             strokeColor: "blue",
             fillOpacity: 0.5,
             strokeWeight: 1,
           }
         } else if (type == "points") {
           return {
             fillColor: "black",
             strokeColor: "black",
             strokeOpacity: 0.5,
             pointRadius: 2,
             fillOpacity: 0.5,
             strokeWeight: 1,
           }
     }
}

Not: Harita uygulamanıza her zaman veri kümenizin ilişkilendirmesini eklediğinizden emin olun. OSM ilişkilendirmesi eklemek için OSM yönergelerine uygun olarak belgelerdeki ilişkilendirme kodu örneğini uygulayın.

Yukarıdaki kod, tek sayfalık bir web uygulamasında başlatıldığında aşağıdaki harita verisi görselini oluşturur:

londra demiryolu haritası

Buradan, filtreleme özelliklerine mantık ekleyerek, kullanıcı etkileşimine göre stil ekleyerek ve uygulamanızın geri kalanıyla etkileşime geçerek setStyle() işlevinde harita görselleştirmenizi genişletebilirsiniz.

Sonuç

Bu makalede, referans mimarisi ve Google Cloud ve Google Haritalar Platformu kullanılarak büyük bir veri görselleştirme uygulamasının örnek uygulamasını ele aldık. Bu referans mimariyi kullanarak Google Maps Datasets API ile GCP BigQuery'deki tüm verilerden herhangi bir cihazda yüksek performans gösteren konum verisi görselleştirme uygulamaları oluşturabilirsiniz.

Sonraki İşlemler

Daha fazla bilgi:

Katkıda bulunanlar

Ana yazarlar:

  • Ryan Baumann, Google Haritalar Platformu Çözüm Mühendisliği Müdürü