Sytuacja kobiet w IT w 2024 roku
26.02.20195 min
Iwona Jóźwiak
Divante

Iwona JóźwiakSenior Magento DeveloperDivante

Prezentacja punktów na Mapie Google z użyciem Fusion Tables

Zobacz, jak wykorzystać zasoby Fusion Tables, do stworzenia prezentacji punktów partnerskich na Mapie Google.

Prezentacja punktów na Mapie Google z użyciem Fusion Tables

Nowe technologie nie zawsze stanowią największe wyzwanie dla dewelopera. Czasem zaspokojenie potrzeb biznesu bywa zdecydowanie ciekawsze. I właśnie takim zadaniem okazał się jeden z naszych ostatnich projektów. Naszym celem było stworzenie modułu mapy partnerskiej z możliwością zaznaczenia obszaru działania partnera, jeśli pracował on w terenie. Zasięg zaznaczenia miał odpowiadać powiatowi, w którym znajduje się punkt partnerski. I tu pojawiło się pierwsze wyzwanie. O ile samo zaznaczenie punktów, rodzajów i kolorów na mapie jest rzeczą totalnie banalną i znaną praktycznie każdemu, obrysowanie powiatów okazało się przeprawą porównywalną momentami z wejściem na K2 zimą. Serio, nie żartuję.

Nie ulegało wątpliwości, że aby wyświetlić jakiś kształt na mapie i wypełnić go kolorem, trzeba znać koordynaty punktów, wyznaczających jego obrys. Początkowo, wydawało mi się, że pozyskiwanie takiej bazy administracyjnej Polski nie sprawi żadnych problemów. Przy tworzeniu takiego rozwiązania dla biznesu okazało się jednak, że zdobycie danych było prawie niemożliwe. Większość baz dostępnych w sieci była niekompletna, ponadto nie zawierały koordynatów dla Google Maps. Rozważałam zaznaczenie na mapie promienia działań partnera, jednak narysowanie koła wydawało się rozwiązaniem zbyt banalnym i mało ambitnym. Wiedziałam również, że serwis Mapy Online pięknie prezentuje na mapie Polski wszystkie powiaty. Musiało być to więc możliwe do realizacji.

Fusion Tables i baza powiatów

Studiując dokumentację Google API, znalazłam ciekawe narzędzie, jakim jest Fusion Tables. Jest to eksperymentalny web service, oddany do użytku w 2009 roku przez Alon Halevy i Rebecca Shapley.

Możliwości, jakie daje Fusion Tables, znacznie przewyższyły moje potrzeby, ale o tym za chwilę. W zasobach publicznych znalazłam listę powiatów.

Jeśli wejdziecie na kartę “Map of geometry”, zobaczycie zaznaczone wszystkie powiaty.

Pierwszym, dość oczywistym pytaniem, które nasunęło mi się na myśl to: Czy można zaznaczyć tylko jeden konkretny powiat?

Otóż tak - umożliwia to przycisk “Filter”, znajdujący się poniżej głównych zakładek. Dzięki tej funkcji możemy wybrać pole “iip_identy” oraz konkretne ID wiersza, a następnie wybrać interesujący nas powiat.

Fusion Tables - asynchroniczne zapytania do zasobu

W sercu zapłonęła nadzieja! Dalsze studium dokumentacji Fusion Tables pokazało, że dane te można bardzo łatwo przenieść na mapę.

Źródło: Google Developers

Wszystko to dzięki możliwości tworzenia zdalnych zapytań do zasobu Fusion Tables.

Jeśli nadamy naszej tabeli uprawnienia do połączeń za pomocą API, będziemy mogli nasze kwerendy sprawdzić za pomocą narzędzia Query: sql.

I tak dla kwerendy:

SELECT * FROM 1KxVV0wQXhxhMScSDuqr-0Ebf0YEt4m4xzVplKd4


w odpowiedzi otrzymujemy JSON’a":

{
  "kind": "fusiontables#sqlresponse",
  "columns": [
    "Product",
    "Inventory"
  ],
  "rows": [
    [
      "Amber Bead",
      "1251500558"
    ],
    [
      "Black Shoes",
      "356"
    ],
    [
      "White Shoes",
      "100"
    ]
  ]
}


Jeżeli nasza tabela jest publiczna, możemy również wykorzystać przeglądarkę, odpytując Google w  podobny sposób.

Oczywiście powyższy przykład pochodzi z dokumentacji Fusion Tables, ponieważ jest on publicznie dostępny. Nic jednak nie stoi na przeszkodzie, by pobrać z własnej tabeli, do której mamy dostęp, kolumny z koordynatami za pomocą zapytania łudząco przypominającego kwerendy sql.

Powiązanie zasobu Fusion Tables z mapą partnerską na sklepie

Moim celem było jednak przeniesienie konkretnej puli koordynatów na mapę Partnerów w formie kształtu. Aby to zrobić, musiałam nałożyć nową warstwę (layer) na już istniejącą mapę.

var $this.layer = new google.maps.FusionTablesLayer({
   query: {
       select: 'geometry',
       from: '[ID MOJEGO ZASOBU]',
       where: "iip_identy = '[ID MOJEGO PUNKTU]"
   },
   clickable: 0, // wyłącza klikalność layera
   suppressInfoWindows: false, // wyłącza popup po kliknięciu
   styles: [{
       polygonOptions: {
           fillColor: '#D1D1D1', // background wartstwy
           fillOpacity: 0.6 // przezroczystość warstwy
       }
   }]
});

$this.layer.setMap($this.map);


W celu przekazania wartości iip_identy dodałam wszystkie powiaty do bazy Magento. Dzięki temu, podczas dodawania kolejnego Punktu Partnerskiego, wartość ta od razu przypisuje się do rekordu. Po kliknięciu w punkt, skrypty asynchronicznie odpytują zasób fusion tables o koordynaty, a następnie wykonuje się nałożenie warstwy na mapie, prezentującej obszar działania Partnera.

Fusion Tables to coś więcej niż tylko tabele i mapy

Jak już wcześniej wspominałam, narzędzie to ma wiele możliwości. Dzięki temu, że usługa pracuje w chmurze, umożliwia między innymi:

  • udostępnianie danych tabelarycznych (arkusze kalkulacyjne, CSV, KML) w przestrzeni prywatnej i publicznej
  • prowadzenie dyskusji na temat zagregowanych danych oraz sposobów ich prezentacji
  • wizualizację zagregowanych danych na mapach Google
  • tworzenie zestawień za pomocą różnego rodzaju wykresów i diagramów
  • integrację z urządzeniami mobilnymi
  • zaznaczanie zakresu uprawnień do zgromadzonych danych za pomocą Google Drive SDK


Najwspanialsze jest to, że wszystkie te techniki można używać jednocześnie, a wyniki mogą być prezentowane dynamicznie na podstawie zebranych danych w zasobach Fusion Tables. Dodatkowo, nad zasobami może pracować wielu użytkowników jednocześnie.

Więcej przykładów można zobaczyć tutaj.

Zalety i ograniczenia Fusion Tables

Dzięki Fusion Tables jesteśmy w stanie prezentować zagregowane dane w bardzo ciekawy i przystępny sposób. Najważniejsze korzyści, o których warto wspomnieć to:

  • możliwość prezentacji dynamicznie wybranych danych na stronie www
  • możliwość łączenia kilku tabel bądź ich części i tworzenia na ich podstawie zestawień i widoków
  • kompatybilność z Google Chart Tools, Google Apps Script, Fusion Tables Layer i Google Maps
  • API umożliwiające pobieranie i manipulowanie zagregowanymi danymi (insert/update/delete)
  • możliwość tworzenia własnych layoutów i styli


Usługa ta ma jednak swoje ograniczenia:

  • przesyłanie plików do 250MB,
  • 1,000 kolumn w tabeli z wagą 1MB na wiersz.
  • przedstawianie maksymalnie 350 000 punktów na mapie.
  • ograniczenie 1GB per konto Google

Koniec Fusion Tables jest bliski :-(

Moim zdaniem warto jest poznać to narzędzie, chociażby po to, by zobaczyć, jak przejrzyście można zaprezentować zagregowane dane na potrzeby serwisu www lub prezentacji. Ponadto zabawa Fusion Tables pozwala lepiej poznać Google Console, które przydaje się również w przypadku używania innych narzędzi Google. Dzięki udostępnionemu API możemy zgłębić tajniki Google Maps i zacząć wykorzystywać je do czegoś więcej, niż tylko wskazania lokalizacji jednego lub kilku punktów. Dla wielu deweloperów Google Maps jest tylko usługą służącą do prezentacji miejsc na mapie. Natomiast w rzeczywistości jest to bardzo potężne narzędzie, które z powodzeniem może służyć do działań analitycznych.

Niestety smutna wiadomość na koniec jest taka, że 3 grudnia tego roku, nastąpi planowane wyłączenie tej usługi. Wygaszanie rozpocznie się jednak już od sierpnia tego roku. Jest ona jednak tak bardzo rozbudowana i użyteczna, że nie sądzę, by Google docelowo zlikwidowało to narzędzie. Wypatruję już informacji o następcy / nowej wersji tego web service’u, a tymczasem przede mną nowe wyzwanie, by po dwóch latach tak zrefaktoryzować mapę, żeby nie utraciła swojej funkcjonalności :)

<p>Loading...</p>