BigQuery ve Datasets API ile verilerinizi görselleştirme

Bu belge, Google Cloud Platform BigQuery ve Google Haritalar Platformu Datasets API'deki konum verileriyle harita verisi görselleştirmeleri oluşturmak (ör. açık belediye verilerini analiz etmek, telekomünikasyon kapsam haritası oluşturmak veya mobil araç filosu hareketlerinin izlerini görselleştirmek) için bir referans mimari ve örnek sunar.

Harita verisi görselleştirmeleri, kullanıcılarla etkileşim kurmak ve konum verilerindeki uzamsal bilgileri 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 gezilerini anlamalarına, planlamalarına ve fırtınalara hazırlanmalarına yardımcı olur. İş zekası haritaları ise kullanıcıların veri analizlerinden bilgi elde etmelerine yardımcı olurken telekomünikasyon haritaları da kullanıcıların belirli bir hizmet bölgesindeki sağlayıcıların kapsamını ve kalitesini anlamasına yardımcı olur.

Ancak uygulama geliştiricilerin yüksek performanslı ve mükemmel bir kullanıcı deneyimi sunan büyük harita verisi görselleştirmeleri oluşturması zordur. Bellek istemcisi tarafında büyük verilerin yüklenmesi gerekir. Bu durum, ilk harita yükleme sürelerinin yavaşlamasına neden olur. Görsel, belleğe ve GPU kısıtlamalarına sahip eski teknoloji cep telefonları da dahil olmak üzere tüm cihazlarda iyi performans göstermelidir. Son olarak, geliştiricilerin taşınabilir, güvenilir ve büyük miktarda veri içeren yüksek performanslı 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 iki ana bileşen gerektirir.

  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 uygulamanızın kullanıcı arayü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şim kurduğunu gösteren bir sistem şeması yer almaktadır.

mimari şeması

⭐ Not: Haritalar Veri Kümeleri API'si GKST öncesi bir üründür. Ayrıntılı bilgi için Hizmet Şartları'nı inceleyin.

Tasarımla ilgili dikkat edilmesi gerekenler

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 canlı hava durumu radar tahmini gibi çok sık güncelleniyorsa verileri uygulamanızda geoJSON nesne istemci tarafı olarak sunmayı ve bir deck.gl katmanıyla oluşturmayı düşünün.
    2. Verileriniz 5 MB'tan büyükse ve saatte bir kezden daha hızlı güncellenmiyorsa bu belgedeki Datasets API mimarisini inceleyin.
      1. Veri kümeleri, en fazla 350 MB boyutundaki dosyaları destekler.
      2. Verileriniz 350 MB'tan büyükse, Veri Kümelerine geçirmeden önce kaynak dosyadaki geometri verilerini kısaltmayı veya basitleştirmeyi düşünebilirsiniz (aşağıdaki Veri Budama bölümüne bakın).
  2. Şema ve biçim
    1. Verilerinizde her özellik için genel olarak benzersiz bir kimlik mülkü bulunduğundan emin olun. Benzersiz kimlik, belirli bir özelliği seçip stilini belirlemenize ve görselleştirmek için verileri bir özellikle birleştirmenize olanak tanır. Örneğin, "tıklama" kullanıcı etkinliğinde seçili bir özelliğin stilini belirleyebilirsiniz.
    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. Veri kümelerini BigQuery'den 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 sarmalama düzeninde vb. olmalıdır.
    5. Kaynak dosyadaki tüm geometrilerin geçerli olduğundan emin olmak için geojson-validate gibi bir araç, kaynak dosyayı biçimler ya da koordinat sistemleri arasında dönüştürmek için ogr2ogr gibi bir araç kullanın.
  3. Veri ayıklama
    1. Özelliklerin sayısını en aza indirin. Çalışma zamanında benzersiz bir tanımlayıcı anahtarı kullanarak ek özellikleri bir özelliğe ekleyebilirsiniz (örnek).
    2. Karo depolama alanını en aza indirmek amacıyla, mümkün olduğunda mülk nesneleri için tam sayı veri türlerini kullanın. Böylece, istemci uygulamasında blokların HTTPS üzerinden yüklenme performansını koruyabilirsiniz.
    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 kullanabilirsiniz.
  4. Döşeme
    1. Google Haritalar Veri Kümeleri API'si, Haritalar JS API'sinde kullanmak üzere kaynak veri dosyanızdan harita desenleri oluşturur.
    2. Harita bölümleri, görsel bir uygulamaya veri yüklemek için daha etkili yollar sunan yakınlaştırma tabanlı bir dizine ekleme sistemidir.
    3. Harita desenleri, düşük zum düzeylerinde yoğun veya karmaşık özellikleri düşürebilir. Kullanıcının uzaklaştırarak bir eyalete veya ülkeye (ör. z5-z12) yakınlaşması, şehir veya mahalleye (ör. z13-z18) yakınlaştırıldığındakinden 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 mimariyi uygulayacağız.

Ön koşullar

  1. BigQuery Korumalı Alanı ve Cloud Console'a erişim
  2. GCP projeniz ve faturalandırma hesabı oluşturduğunuzdan emin olun.

1. Adım - BigQuery'de veri sorgulama

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

Tabloyu SQL kullanarak sorgulamak için Cloud Shell'i veya BigQuery Cloud Console'u(https://console.cloud.google.com) kullanın. Aşağıdaki kod bölmesi, bir sınırlayıcı kutu ve ST_Intersects() işlevi kullanılarak sadece Londra'ya giden demiryollarını sorgulamak için bq query komutunu kullanır.

Bu sorguyu Cloud Shell'den gerçekleştirmek için aşağıdaki kod snippet'ini çalıştırarak 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 şunu döndürür:

  1. her özellik osm_id için benzersiz bir tanımlayıcı
  2. feature_type ör.noktalar, çizgiler vb.
  3. Özelliğin name özelliği (ör. Paddington Station)
  4. railway türü (ör.ana, turizm, askeri vb.)
  5. Özelliğin wkt'i - 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'den kontrol panelinde hızlıca görselleştirebilirsiniz.

Tabloyu Google Cloud Storage paketindeki bir CSV dosyasına aktarmak için Cloud Shell'de bqextra 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 bir Veri Kümesi oluşturma

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'sini etkinleştirin ve API belgelerini 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ümeleri GUI'si bulunur.

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ği ile ilişkilendirme

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

5. Adım - İstemci uygulaması harita görselleştirmenizi oluşturun

Son olarak, Haritalar JS API'sini kullanarak veri kümesini istemci tarafı veri görselleştirme uygulamasına ekleyebilirsiniz. Önceki adımda bulunan veri kümenizle ilişkilendirilmiş matchID'yi kullanarak harita nesnenizi başlatın. Ardından, Veri Kümesi katmanınızın stilini ve etkileşim düzeyini ayarlayın. Daha fazla ayrıntı için Veri Kümeleri ile veriye dayalı stil kılavuzuna göz atın.

Maps JS API'yi kullanarak stili özelleştirebilir, stili dinamik bir şekilde değiştirmek için etkinlik işleyiciler ekleyebilir ve daha fazlasını yapabilirsiniz. docs örneklere bakın. Aşağıda, "feature_type" özelliğine dayanarak bu örnekte nokta ve çizgi özellik stilini oluşturmak için bir setStyle işlevi tanımlıyoruz.

Not - Maps JS API uygulamanız için v=beta kanalını kullandığınızdan emin olun.

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 veri kümeniz için her zaman ilişkilendirme eklediğinizden emin olun. OSM ilişkilendirmesi eklemek için OSM yönergelerine bağlı olarak dokümanlardaki 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 verileri görselini verir:

londra demiryolu haritası

Buradan, özellikleri filtrelemek için mantık ekleyerek, kullanıcı etkileşimine dayalı stil ekleyerek ve uygulamanızın geri kalanıyla etkileşimde bulunarak harita görselleştirmenizi setStyle() işlevinde genişletebilirsiniz.

Sonuç

Bu makalede, bir referans mimariyi ve Google Cloud ile Google Haritalar Platformu kullanılarak büyük bir veri görselleştirme uygulamasının örnek uygulamasını ele aldık. Bu referans mimarisinden yararlanarak Google Haritalar Veri Kümeleri API'sini kullanarak GCP BigQuery'deki herhangi bir cihazda yüksek performanslı verilerden yararlanarak konum verisi görselleştirme uygulamaları oluşturabilirsiniz.

Sonraki İşlemler

Daha fazla bilgi:

Katılımcılar

Baş yazarlar:

  • Ryan Baumann, Google Haritalar Platformu Çözümleri Mühendislik Yöneticisi