25
SVEUC ˇ ILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA ZAVRŠNI RAD br. 4783 GeoJSON shema adapter za Apache Calcite Natko Bišćan Zagreb, lipanj 2017.

GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

SVEUC ILIŠTE U ZAGREBU

FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA

ZAVRŠNI RAD br. 4783

GeoJSON shema adapter za Apache Calcite

Natko Bišćan

Zagreb, lipanj 2017.

Page 2: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za
Page 3: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

iii

Prazna stranica

Page 4: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

iv

SADRŽAJ

Sadržaj

1. Uvod ................................................................................................................................ 5

2. Apache Calcite............................................................................................................... 6

3. Struktura sustava ...................................................................................................... 7

4. Dijagrami razreda ..................................................................................................... 8

5. GeoTools i Java Topology Suite .......................................................................... 10

6. GeoJSON .................................................................................................................... 11

7. GeoJSON Shema Adapter .................................................................................... 13

8. Instalacija i upute za korištenje................................................................................ 19

9. OpenStreetMap ........................................................................................................ 21

10. Zaključak ................................................................................................................... 22

Page 5: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

5

1. Uvod

U okviru završnog rada razvijen je GeoJSON shema adapter za Apache Calcite. Apache

Calcite je okvir za izgradnju baza podataka i sustava za upravljanje bazama podataka.

Utemeljen je na relacijskom modelu podataka, te ne posjeduje potporu za geoprostorne

tipove podataka. Stoga je i cilj ovoga završnog rada integracija geoprostornih tipova

podataka u Apache Calcite, jer su isti neophodni za funkcioniranje GeoJSON adaptera.

GeoJSON adapter proširuje Apache Calcite funkcionalnost u smislu čitanja geoprostornih

podataka u GeoJSON format, te postavljanja SQL upita nad njima. GeoJSON shema

adapter implementiran je uporabom programskih komponenti i alata utemeljenim na

principima otvorenog kôda.

Page 6: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

6

2. Apache Calcite Apache Calcite [1] sustav je za izgradnju relacijskih baza podataka i sustava za upravljanje bazama podataka. Sadrži mnoge značajke tipičnog sustava za upravljanje bazama, no ističe se sljedećim svojstvima:

• pohrana podataka,

• algoritmi za obradu podataka

• repozitorij za metapodatke.

Odličan je izbor za posredovanje između aplikacije i jedne ili više lokacije za pohranu podataka. Također je i jednostavan za korištenje i idealno je rješenje za izgradnju baze podataka: samo dodajte podatke. Sam sustav još uvijek je u izradi, no sljedeće funkcionalnosti su u potpunosti kompletirane:

i. Parser za upite, validator i optimizator (princip rada je detaljno opisan u

navesti broj I naziv odjeljka rada)

ii. Podrška za čitanje modela u JSON formatu

iii. Mnoge standardne funkcije i agregatne funkcije

iv. Linq4j frontend i JDBC backend

v. SQL naredbe: SELECT, FROM, JOIN, WHERE, GROUP BY, agregatne funkcije,

HAVING, ORDER BY, podupiti itd.

vi. Adapteri: Cassandra, CSV, Druid, JDBC, MongoDB, Pig, Spark, Splunk, itd.

Nažalost, Calcite ne podupire izgradnju sustava s geoprostornim domenama atributa.

Page 7: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

7

3. Struktura sustava

GeoJSON adapter je Maven podprojekt Calcite-a. Sastoji se od 16 razreda, sqlline.bat skripte i testnih shema i tablica. Prva skupina razreda kreira sheme GeoJSONSchema i GeoJSONSchemaFactory. GeoJSONSchemaFactory implementira Calcite sučelje ShemaFactory te kreira novi primjerak GeoJSONSchema, čitajući prethodno JSON vrijednosti directory i flavor navedene u model.json datoteci. Njegova metoda create() vraća novu GeoJSONSchemu s argumentima directory i flavor. GeoJSONSchema nasljeđuje razred AbstractSchema, zadužena je za definiranje tablica iz sheme (no podaci su ovdje i dalje u String formatu). Sljedeća skupina razreda odnosi se na kreiranje samih tablica u shemi. Prvi je apstraktan razred GeoJSONTable koja nasljeđuje AbstractTable. Služi ostalim Table razredima da je implementiraju po potrebi, ovisno o flavor atributu tablice. Ti razredi su GeoJSONScannableTable, GeoJSONFilterableTable i GeoJSONTranslatableTable. U okviru ovog završnog rada, korišten je samo ScannableTable. Ona sadrži metodu scan() i vraća novi GeoJSONEnumerator. U ovoj skupini bitno je napomenuti i GeoJSONTableScan i GeoJSONTableFactory razrede. GeoJSONTableFactory koristi se za kreiranje GeoJSONTable te omogućuje kreiranje gotove tablice u model.json shema datoteci. Svrha GeoJSONEnumerator je pretvorba svakog string sadržanog u .geojson datoteci, u objekt pripadajućeg tipa. Za tu namjenu on koristi svoj apstraktan statički ugnježdeni razred RowConverter. RowConverter koristi enumeraciju GeoJSONFieldType kako bi provjerio odgovara li tip naveden u .geojson datoteci podržanom tipu iz GeoJSONFieldType enumeracije.

Page 8: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

8

4. Dijagrami razreda

Page 9: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

9

Page 10: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

10

5. GeoTools i Java Topology Suite GeoTools [2] je besplatni geoinformacijski alat za razvoj geoprostornih aplikacija, utemeljen na OGC [3] specifikacijama. GeoTools je napisan u programskom jeziku Java i konstantno je u razvoju. Neka od svojstva GeoTools alata uključuju:

• sučelje za prostorne koncepte i strukture podataka

• atribute

• prostorne i vremenske filtre koji zadovoljavaju OGC specifikaciju

• JTS [4] biblioteku korištenu u ovome projektu.

JTS Topology Suite biblioteka je također napisana u Javi, otvorenog je kôda, i omogućuje programerima korištenje objektnih modela za Euklidsku planarnu linearnu geometriju, zajedno s najbitnijim geometrijskim funkcijama. U okviru ovoga završnog rada, JTS je bio ključan za kreiranje geoprostornih atributa kod kreiranja tablica. GeoTools je uključen u Calcite Maven projekt na sljedeći način:

Slika 5.1. - Dependecies za GeoTools

Preko GeoTools zavisnosti moguć je pristup JTS geoprostornim tipovima potrebnim za projekt. Oni su uključeni u enumeraciju mogućih tipova atributa.

Page 11: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

11

6. GeoJSON U projektu je implementiran i GeoJSON parser. GeoJSON je format za kodiranje geografskih struktura podataka, baziran na JSON-u [5] i podržava sljedeće tipove geoprostornih podataka: Point, LineString, Polygon, MultiPoint, MultiLineString i MultiPolygon. Objekti s geoprostornim atributima su tzv. feature objekti. U okviru ovoga završnog raa korišteni su geoprostorni tipovi podataka Point, LineString i Polygon:

Slika 6.1. - GeoJSON tipovi

Bitna pravila kod kreiranja objekata su da LineString mora sadržavati barem 2 točke, dok Polygon mora biti zatvoreni LineString s barem 4 točke, pri ćemu mora počinjati i završavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za parsiranje tablice kreirane u GeoJSON formatu korištena je org.json Java biblioteka. Parser je prilagođen prepoznavanju geoprostornih tipova kako bi sustav kasnije mogao kreirati objekte tih tipova. Primjer parsiranja Point objekta:

Page 12: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

12

Slika 6.2. - GeoJSON parser

Page 13: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

13

7. GeoJSON Shema Adapter

Na početku je potrebno ručno kreirati shemu. Za demonstraciju rada cijelog sustava koristit će se testna shema naziva GEO. Shema sadrži 2 tablice: BUILDINGS i ENTRANCES, koje predstavljaju zgrade i ulaze zgrada u Zagrebu (podaci o koordinatama preuzeti su s OpenStreetMap servisa ).

Slika 7.1. - GEO shema

U shemi je potrebno definirati ime, tip, tvornicu (razred koji je ujedno i dio projekta) i direktorij u kojem se nalaze tablice s podacima zapisane u GeoJSON formatu. GeoJSONSchemaFactory stvara primjerak sheme i prenosi joj kao argumente direktorij s definiranim podacima, te flavor koji može biti TRANSLATABLE, SCANNABLE i FILTERABLE. Nama će poslužiti zadani, SCANNABLE tip.

Page 14: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

14

Slika 7.2. - Create metoda

Svrha sheme je da kreira listu tablica, koje smo definirali u zadanom direktoriju. GeoJSONSchema stvara primjerke GeoJSONTable tablica. Shema skenira direktorij i traži .geojson datoteke. Datoteke u okviru ovog završnog rada se nalazi u target/test-classes/geo direktoriju te se tako kreiraju tablice BUILDINGS i ENTRANCES. Postoji i mogućnost kreiranja virtualnih tablica (pogleda). Pogled izgleda kao tablica nad kojom je izveden upit, međutim ona ne sprema nikakve podatke. Primjer sheme koja definira virtualnu tablicu:

Slika 7.3. - Primjer view sheme

Vrijednost type označuje tablicu virtualnom, a sql upit nad glavnom tablicom.

Page 15: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

15

Primjer upita nad izgrađenim pogledom:

Slika 7.4. - Upit nad pogledom

Dodatne mogućnost je i kreiranje vlastite tablice izvan sheme. Nakon kreiranja sheme i čitanja tablica, potrebno je pročitati podatke zapisane u tablicama u GeoJSON formatu kako bi Calcite mogao kreirati bazu. Iz tog razloga implementiran je GeoJSON parser. Prvo je potrebno detektirati tipove atributa definiranih u tablici, pri čemu se mora voditi računa o vrijednosti type. Za primjer ćemo prikazati samo parser geoprostornih tipova.

Slika 7.5. - Dio parsera za otkrivanje tipova

Nakon toga na red dolaze podaci. Pokazat ćemo primjer za Polygon: provjerava se vrijednost type, potom se u JSON polje spremaju sve koordinate, odnosno skup točaka koje čine poligon. Iz zapisa je potrebno izvući vrijednosti X i Y koordinata i spremiti ih u format poznat GeoTools alatu, kako bismo te objekte mogli kreirati u samoj bazi podataka.

Page 16: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

16

Slika 7.6. - Primjer parsiranja poligona

Potom je potrebno detektirati i pročitati ostale tipove i podatke zadane .geojson datotekom. Podržani tipovi podataka zapisani su u enumeraciji GeoJSONFieldType.

Slika 7.7. - Podržani tipovi u enumeraciji GeoJSONFieldType

Većina tipova definirana je u org.apache.calcite.linq4j.tree.Primitive razredu, dok su geoprostorni tipovi uključeni iz prethodno spomenute JTS biblioteke. Međutim podaci su još uvijek tipa String. Stoga je potrebno parsirati sve podatke i kreirati objekte određenih tipova. Za jednostavne tipove to izgleda ovako:

Page 17: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

17

Slika 7.8. - Definiranje jednostavnih tipova

Za složene, geoprostorne tipove, potrebno je izraditi jednostavan parser koji će koristeći razred GeometryFactory kreirati geoprostorne objekte primjerice:

Slika 7.9.- Definiranje geoprostornih tipova

Prilikom ispisa rezultata upita nad bazom, tj. tablicama s geoprostornim tipovima

Page 18: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

18

podataka, možemo uočiti kako je format ispisa tih tipova istovjetan well-known text [6] formatu: SELECT entrance FROM entrances;

Slika 7.10. – Rezultat upita

Page 19: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

19

8. Instalacija i upute za korištenje Korištenje Apache Calcite-a demonstrirano je preko sqlline.bat skripte. Za Maven [7] projekt poput Calcite-a dovoljno je dodati samo sqlline Maven zavisnost. Sqlline dodatak korišten je i za demonstraciju GeoJSON [8] adaptera. Za instalaciju je potrebna Java verzija 1.7+, Git i Maven verzije 3.2.1+. Za početak, potrebno je preuzeti Calcite projekt s GitHuba [9]: $ git clone https://github.com/apache/calcite.git

Nakon toga potrebno je pozicionirati se u Calcite direktorij i provesti Maven instalaciju projekta: $ cd calcite

$ mvn install -DskipTests -Dcheckstyle.skip=true

Nakon uspješne instalacije, potrebno je pozicionirati se u GeoJSON projekt i pokrenuti skriptu: $ cd example/geojson $ ./sqlline

(Ukoliko se koristi Windows sustav, naredba je sqlline.bat) Po pokretanju skripte potrebno je uspostaviti vezu s modelom

Slika 8.1. - Pokretanje skripte

Pokrenimo upit za metapodacima !tables:

Slika 8.1. - tables naredba

Postoje i slični upiti za metapodacima poput !columns i !describe .

Page 20: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

20

Korištenjem naredbe !describe na testnoj tablici ZGB primjećujemo izvore tipova podataka (primjerice za izvor geoprostornog tipa Polygon korišten je JTS vanjski projekt o kojem će detaljnije biti riječi u … navesti poglavlje)

Slika 8.3. - describe naredba

Tablice TEST i ZGB baziraju se na TEST.geojson i ZGB.geojson datotekama u tables/test-classes direktoriju. Nakon uspješne instalacije, moguće je testirati nekoliko upita:

Slika 8.2. -Primjer SELECT naredbe

Slika 8.3. - Drugi primjer SELECT naredbe

Slika 8.4. - SELECT WHERE naredba

Slika 8.5. - SELECT JOIN naredba

Page 21: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

21

9. OpenStreetMap

OpenStreetMap [10] je projekt virtualne zajednice s ciljem stvaranja slobodne, svima dostupne karte koju svatko može sam i dorađivati. Karte, odnosno kartografski podaci na OpenStreetMap projektu su doprinosi suradnika, a uglavnom nastaju korištenjem GPS uređaja, fotografiranjemS iz zraka, iz drugih slobodnih izvora ili jednostavno poznavanjem zemljišta, odnosno naselja. OpenStreetMap je korišten u ovom radu kao izvor geoprostornih objekata, tj. zgrada tipa Polygon, i ulaza u zgrade, tipa Point.

Slika 9.1. - OpenStreetMap primjer

Page 22: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

22

10. Zaključak

Apache Calcite utemeljen je na relacijskom modelu podataka, te ne posjeduje podršku za geoprostorne tipove podataka, niti adaptere koji manipuliraju istima. Stoga je glavni rezultat ovog završnog rada uspješno impementiran GeoJSON Adapter za Apache Calcite sustav, te uspješno integrirani geoprostorni tipovi podataka. GeoJSON adapter uspješno obavlja svoju zadaću i kompatibilan je s ostatkom sustava. GeoJSON Adapter proširuje skup postojećih adaptera Calcite sustava. GeoJOSN adapter olakšava korisniku kreiranje sheme, tako što korisnik napiše (ili uveze iz nekog drugog sustava) shemu u GeoJSON formatu i proslijedi je Calcite sustavu, koji kreira shemu, odgovatrajuće tablice popuni podacima, bez potrebe za korištenjem SQL ili bilo kojeg drugog programskog jezika od strane korisnika. Korisniku je tako omogućeno upravljanje geoprostornim podacima u Apache Calcite sustavu.

Page 23: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

23

SAŽETAK

U okviru završnog rada izrađen je GeoJSON adapter kao proširenje Apache Calcite-a, okvira za izgradnju baza podataka i sustava za upravljanje bazama podataka. Apache Calcite utemeljen je na relacijskom modelu podataka, pa je prvi korak izgradnje bio kreiranje potpore za geoprostorne podatake. Potom je izrađen GeoJSON parser koji korisniku omogućuje jednostavno kreiranje čitave baza podataka u GeoJSON formatu. Koristeći sqlline skriptu, korisniku je omogućeno stvaranje jednostavnih iili složenih upita nad bazom. Pri izradi sustava korišteni su Java Topology Suite, OpenStreetMap, GeoTools i Maven.

The GeoJSON adapter was created as an extension for Apache Calcite, a database management system and a dynamic data management framework. Apache Calcite is based on a relational data model, so the first step in development was to create support for geospatial data. Afterwards, a GeoJSON parser was created, which allows user to easily create an entire database in GeoJSON format. Using the sqlline script, user can easily create simple or complex database queries. While developing the system, Java Topology Suite, OpenStreetMap, GeoTools, and Maven were used.

Page 24: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

24

KLJUČNE RIJEČI

GeoJSON;Apache Calcite;Point;LineString;Polygon;OpenStreetMap;JTS;SUBP;baza podataka;shema;Maven;geoprostorni tipovi podataka;SQL;

GeoJSON;Apache Calcite;Point;LineString;Polygon;OpenStreetMap;JTS;DBMS;database;schema;Maven;geospatial datatypes;SQL;

Page 25: GeoJSON shema adapter za Apache Calcitezavršavati istom točkom. Kod definicije Polygon, točke moraju poštovati pravilo desne ruke (smjer obrnut od smjera kazaljke na satu). Za

25

LITERATURA

[1] Apache Calcite: https://calcite.apache.org [2] GeoTools: http://geotools.org [3] OGC: http://www.opengeospatial.org/standards [4] Java Topology Suite: https://en.wikipedia.org/wiki/JTS_Topology_Suite [5] JSON: https://en.wikipedia.org/wiki/JSON [6] Well-known text: https://en.wikipedia.org/wiki/Well-known_text [7] Maven: https://maven.apache.org [8] GeoJSON: http://geojson.org [9] GitHub: https://github.com [10] OpenStreetMap: https://www.openstreetmap.org