BigQuery ve Datasets API ile verilerinizi görselleştirme

Bu dokümanda, Google Cloud Platform BigQuery ve Google Haritalar Platformu Veri Kümeleri API'sinde 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ç filosu hareketlerinin 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 gezileri anlamalarına, planlamalarına ve fırtınalara hazırlanmalarına yardımcı olur; iş zekası haritaları kullanıcıların veri analizlerinden elde edilen analizleri keşfetmelerine yardımcı olur ve telekomünikasyon haritaları kullanıcıların sağlayıcılarının belirli bir hizmet alanındaki kapsamını ve kalitesini anlamalarına yardımcı olur.

Ancak uygulama geliştiricilerin, performanslı ve mükemmel bir kullanıcı deneyimi sunan büyük harita veri 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 verilerle performanslı olan 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, bu iki bileşenin büyük bir veri görselleştirme uygulaması oluşturmak için 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ştirme oluşturmak için dikkate alınması gereken çeşitli tasarım noktaları 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 geçmeden önce kaynak dosyasındaki geometri verilerini budamayı veya basitleştirmeyi düşünebilirsiniz (Aşağıdaki Verileri Budama 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 Datasets API spesifikasyonuna göre geçerli sütun adları, veri türleri ve GeoJSON nesnesi türleriyle 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 Well-Known Text (WKT) biçiminde geometriyi CSV'den içe aktarmayı destekler.
    4. Verilerinizin geçerli geometri ve veri türlerine sahip olup olmadığını kontrol edin. Örneğin, GeoJSON, WGS84 koordinat sisteminde, geometri sarma sırası 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. Karo oluşturma
    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'ı kullanarak Open Street Map (OSM) verilerinden Londra'daki tüm demiryollarını görselleştiren bir web uygulaması oluşturmak için referans mimariyi 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) verilerinin tamamını içerir. amenity, road ve landuse gibi sorgulanabilir tüm özellikleri OSM Wiki'de keşfedin.

SQL kullanarak tabloyu sorgulamak için Cloud Shell'i 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 CSV dosyasına aktarmak için Cloud Shell'de bq extract 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 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 kullanıcı arayüzünde ö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, veri kümesiyle bir harita kimliği ve stil ilişkilendirebilirsiniz. Buradan, haritanızın görünümünü ve tarzını özelleştirmek için Bulut Tabanlı Harita Stilleri'ni de uygulayabilirsiniz.

5. adım: İstemci uygulaması 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 ayrıntılı bilgi için Veri kümeleriyle veri odaklı stil oluşturma kılavuzunu inceleyin.

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ümanlar'daki örnekleri inceleyin. Aşağıda, bu örnek için "feature_type" özelliğine göre nokta ve çizgi özelliği 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, Google Cloud ve Google Haritalar Platformu'nu kullanan büyük bir veri görselleştirme uygulamasının referans mimarisini ve örnek uygulamasını ele aldık. Bu referans mimariyi kullanarak, GCP BigQuery'deki herhangi bir veri kümesinden Google Haritalar Veri Kümeleri API'yi kullanarak herhangi bir cihazda yüksek performanslı konum verisi görselleştirme uygulamaları oluşturabilirsiniz.

Sonraki İşlemler

Daha fazla bilgi:

Katkıda bulunanlar

Başlıca yazarlar:

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