BigQuery ve Datasets API ile verilerinizi görselleştirme

Bu belgede, Google Cloud Platform BigQuery ve Google Haritalar Platformu Veri Kümeleri API'sinde konum verileriyle harita verisi görselleştirmeleri oluşturma (ör. açık belediye verilerini analiz etme, telekomünikasyon kapsam haritası oluşturma veya mobil araç filosu hareketlerinin izlerini görselleştirme) için bir referans mimari ve örnek verilmiştir.

Harita verilerini görselleştirme, kullanıcıların ilgisini çekmek ve konum verilerindeki mekansal bilgileri ortaya çıkarmak için güçlü araçlardır. Konum verileri nokta, çizgi veya poligon özellikleri olan 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 verilerin bellek istemci tarafına yüklenmesi gerekir. Bu, ilk harita yükleme sürelerinin yavaş olmasına neden olur. Görsel, bellek ve GPU kısıtlamaları olan düşük 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 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ştirmelerine sahip 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 uygulamanızın kullanıcı arayü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ı

⭐ 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 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 geoJSON nesne istemci tarafı olarak sunmayı ve deck.gl katmanıyla oluşturmayı göz önünde bulundurun.
    2. Verilerinizin boyutu 5 MB'tan büyükse ve veriler saatte bir defadan daha hızlı güncellenmiyorsa bu belgedeki Datasets API mimarisini inceleyin.
      1. Veri kümeleri 350 mb'ye kadar boyuta sahip dosyaları destekler.
      2. Verileriniz 350 MB'tan büyükse veri kümelerine iletmeden önce kaynak dosyadaki geometri verilerini sadeleştirmeyi veya basitleştirmeyi düşünün (aşağıdaki Veri Kısaltma bölümüne bakın).
  2. Şema ve biçim
    1. Verilerinizin her özellik için global olarak benzersiz bir kimlik özelliğine sahip olduğundan emin olun. Benzersiz kimlik, belirli bir özelliği seçip şekillendirmenize veya verileri görselleştirmek üzere bir özellikle birleştirmenize (ör. "tıklama" kullanıcı etkinliğinde seçili bir özelliğin stilini şekillendirmenize olanak tanır.)
    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'den kolayca veri kümeleri oluşturmak için SQL CSV dışa aktarma dosyasında 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 dosyadaki tüm geometrilerin geçerli olduğundan emin olmak için geojson-validate veya 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 bir özelliğe ait ek özellikleri benzersiz bir tanımlayıcı anahtarında birleştirebilirsiniz (örnek).
    2. Mümkün olduğunda özellik nesneleri için tam sayı veri türlerini kullanarak karo depolama alanını en aza indirin ve istemci uygulamasında blokların HTTPS üzerinden yüklenme performansını sürdürün.
    3. Çok karmaşık özellik geometrilerini basitleştirin ve/veya toplayın. Kaynak dosya boyutunu küçültmek ve harita performansını artırmak için karmaşık poligon geometrilerinde ST_Simplify gibi BigQuery işlevlerini kullanabilirsiniz.
  4. Karolara ayırma
    1. Google Haritalar Veri Kümeleri API'si, Maps JS API'de kullanılmak üzere kaynak veri dosyanızdan harita blokları oluşturur.
    2. Harita blokları, görsel uygulamaya veri yüklemek için daha verimli yöntemler sağlayan yakınlaştırma tabanlı bir dizine ekleme sistemidir.
    3. Harita parçaları, düşük yakınlaştırma düzeylerinde yoğun veya karmaşık özellikleri bırakabilir. Kullanıcı görüntüyü uzaklaştırarak bir eyalete ya da ülkeye (ör. z5-z12), şehir veya mahalleye yakınlaştırıldığında (ör. z13-z18) 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ı kurulumunuz olduğundan emin olun.

1. Adım - BigQuery'de veri sorgulama

BigQuery 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'i, bir sınırlayıcı kutu ve ST_Intersects() işlevi kullanılarak yalnızca Londra'ya filtrelenen tüm 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ırın ve 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 (ör. Paddington Station)
  4. railway türü (ör.ana, turizm, askeri vb.)
  5. Özelliğin wkt değeri - WKT biçimindeki 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 BigQuery'deki bir kontrol panelinde verilerinizi 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 bir veri kümesi oluşturun

Ardından, Google Cloud Storage'da (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'sini etkinleştirin ve API belgelerini inceleyin. Veri kümeleri API'sini uygulamanızın arka ucundaki mantıktan ç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 kullanabileceğiniz 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ğiyle ilişkilendirin

Veri kümeniz oluşturulduktan sonra, ilişkili bir Harita Stili ile bir Harita Kimliği oluşturabilirsiniz. Harita Stili düzenleyicisinde, harita kimliği 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 bir istemci tarafı veri görselleştirme uygulamasına ekleyebilirsiniz. Önceki adımda yer alan veri kümenizle ilişkilendirilmiş harita kimliğini kullanarak harita nesnenizi başlatın. Daha sonra Veri Kümesi katmanının stilini ve etkileşimini 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 olarak değiştirmek için etkinlik işleyiciler ekleyebilir ve daha fazlasını yapabilirsiniz. docs örneklere göz atın. Aşağıda, “feature_type” özelliğine dayanarak bu örnek için nokta ve çizgi özellik stilini oluşturmak üzere bir setStyle işlevi tanımlayacağız.

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 her zaman veri kümeniz için atıf eklemeyi unutmayın. OSM ilişkilendirmesi eklemek için OSM kurallarına uygun olarak belgelerde ilişkilendirme kodu örneğini uygulayın.

Tek sayfalık bir web uygulamasında başlatıldığında yukarıdaki kod, aşağıdaki harita verisi görselini sağlar:

londra demiryolu haritası

Buradan, özellikleri filtrelemek için mantık ekleyerek, kullanıcı etkileşimine göre stil ekleyerek ve uygulamanızın geri kalanıyla etkileşimde bulunarak 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 mimarisi kullanarak, GCP BigQuery'deki tüm verilerden Google Haritalar Veri Kümeleri API'sini kullanarak herhangi bir cihazda yüksek performans gösteren konum verisi görselleştirme uygulamaları oluşturabilirsiniz.

Sonraki İşlemler

Daha fazla bilgi:

Katılımcılar

Ana yazarlar:

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