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 anlayıp planlamalarına ve fırtınalara hazırlanmalarına yardımcı olur. iş zekası haritaları kullanıcıların veri analizlerinden ayrıntılı bilgi edinmesine, telekomünikasyon haritaları ise sağlayıcıların sağlayıcıları anlamasına yardımcı olur. kapsam ve kalitedir.

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 - Tüm arka uç uygulama verileri ve hizmetleri de kapsar.
  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ı

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 için verileri uygulamanızda geoJSON nesne istemci tarafı olarak sunabilir ve deck.gl katmanıyla oluşturabilirsiniz.
    2. Verilerinizin boyutu 5 MB'tan büyükse ve verileriniz saatte en fazla bir kez güncelleniyorsa 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çimi
    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ştirme ve/veya toplama; kaynak dosya boyutunu küçültmek ve harita performansını iyileştirmek için karmaşık poligon geometrilerinde ST_Simplify gibi BigQuery işlevlerini kullanabilirsiniz.
  4. Döşeme
    1. Google Haritalar Veri Kümeleri API'si, bir web veya mobil Haritalar SDK'sı ile kullanmak ü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 öğesi, ör. Paddington Station
  4. railway türü, ör. ana, turizm, asker 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. Belgelerdeki ö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.

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: Veri kümeniz için harita uygulamanıza her zaman atıf 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.

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:

Katkıda bulunanlar

Ana yazarlar:

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