Upload
voquynh
View
240
Download
2
Embed Size (px)
Citation preview
Sveuciliste u Zagrebu
Geodetski fakultet
Implementacija GIS funkcionalnosti u CADokruzenju koristeci modul otvorenog koda
FDO
Frane Glasinovic
8. rujna 2010.
Pod punom moralnom odgovornoscu izjavljujem da sam ovaj rad izra-dio samostalno iskljucivo na temelju vlastitog znanja, uz pomoc mentora tenavedene literature.
Sazetak
Koristenje dosadasnjih specijaliziranih geoinformatickih programskih aplika-
cija kao sto je AutoCAD Map, nekada nisu dovoljna za prikazivanje, obradu
ili analiziranje prostornih podataka. Prosirivanjem funkcionalnosti AutoCAD-
a mozemo omoguciti da program radi tocno ono sto mi zelimo. U ovom radu
pokusati cu prikazat neke od funkcionalnosti prosirenja AutoCAD Map pro-
gramskog paketa na projektu katastra vodova plinovoda u gradu Samobor.
U prvom dijelu objasnit cu opisati projekt na kojem se rad temelji te kako
se uopce doslo do ideje prosirenja AutoCAD Map-a. Objasnjene su aplika-
cije: AutoCAD Map, MS SQL Server Spatial, .NET i FDO.
U drugom dijelu opisan je teorijski dio projekta svih koristenih aplikacija
i metoda koji su pridonijeli stvaranju sustava.
U posljednjem dijelu naglasak je stavljen na programiranje u .NET-u i
implementaciji aplikacija u CAD okruzenju.
Kljucne rijeci: CAD, GIS, FDO, .NET, Autodesk Map 3D
Apstract
The usage of current geoinformatic software such as AutoCAD is someti-
mes not sufficient for displaying, processing or the analysis of spatial data.
Through the expansion of AutoCAD functions, we can enable the software
to perform the necessary tasks. In this paper I will try to present some of
the functions of AutoCAD Map software expansion as applied to Samobor
city gasworks cadastre.
In the first section I will outline the project on which the paper is based,
as well as how the idea of developing Autodesk Map application came about.
I will explain the following applications: Autodesk Map, MS SQL, Server
Spatial, .NET and FDO.
The second section addresses the theoretical part of the project, used sof-
tware and methods that contributed to the development of the system.
In the final part the focus is on .NET programming and the implementa-
tion of applications in CAD.
Keywords: CAD, GIS, FDO, .NET, AutoCAD Map 3D
Sadrzaj
1 Uvod 4
1.1 Vektorski i rasterski tip podatka . . . . . . . . . . . . . . . . . 5
1.2 Softverska i GIS rjesenja . . . . . . . . . . . . . . . . . . . . . 8
1.2.1 GIS Cloud . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2.2 ArcGIS Server . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 O projektu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4 Programska podrska . . . . . . . . . . . . . . . . . . . . . . . 12
1.4.1 Microsoft Windows . . . . . . . . . . . . . . . . . . . . 12
1.4.2 Autodesk Map 3D . . . . . . . . . . . . . . . . . . . . 12
1.4.3 .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.4.4 Microsoft Visual Studio 2008 Express . . . . . . . . . . 14
1.4.5 Autodesk Map API . . . . . . . . . . . . . . . . . . . . 15
1.4.6 Microsoft SQL Server 2008 Express . . . . . . . . . . . 17
2 Teorijski dio 22
2.1 Prostorne baze podataka . . . . . . . . . . . . . . . . . . . . . 22
2.1.1 Vrste prostornih tipova podataka . . . . . . . . . . . . 23
2.1.2 Geografski tip podatka . . . . . . . . . . . . . . . . . . 23
2.1.3 Geometrijski tip podatka . . . . . . . . . . . . . . . . . 24
2.1.4 Jedinice mjerenja . . . . . . . . . . . . . . . . . . . . . 25
2.1.5 Spatial reference ID - SRID . . . . . . . . . . . . . . . 25
2.2 Client - server model . . . . . . . . . . . . . . . . . . . . . . . 26
2.3 VPN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.4 FDO API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.5 Struktura vektorskih podataka u CAD i GIS okruzenju . . . . 31
2.6 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1
3 Prakticni dio 38
3.1 Implementacija sustava . . . . . . . . . . . . . . . . . . . . . . 38
3.2 Ulazni podaci . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.3 Unos u bazu podataka . . . . . . . . . . . . . . . . . . . . . . 40
3.4 Stilovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.5 Aplikacije u CAD okruzenju . . . . . . . . . . . . . . . . . . . 46
3.6 Struktura programa za aplikaciju projekta . . . . . . . . . . . 49
4 Zakljucak 58
5 Dodaci 59
2
Popis slika
1 Tip podatka . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Usporedba vektorskog i rasterskog tipa podatka . . . . . . . . 7
3 Prikaz GIS Cloud-a Ltd [2010a] . . . . . . . . . . . . . . . . . 9
4 ArcGIS Explorer Online . . . . . . . . . . . . . . . . . . . . . 10
5 Plinska mreza sa popratnim prikljuccima . . . . . . . . . . . . 11
6 Visual Studio Express okruzenje . . . . . . . . . . . . . . . . . 15
7 Primjer jedne relacije . . . . . . . . . . . . . . . . . . . . . . . 18
8 Geografski tip podatka . . . . . . . . . . . . . . . . . . . . . . 24
9 Geometrijski tip podatka . . . . . . . . . . . . . . . . . . . . . 25
10 Princip rada client-server modela . . . . . . . . . . . . . . . . 27
11 Princip rada VPN mreze . . . . . . . . . . . . . . . . . . . . . 28
12 FDO logo organizacije OSGeo [2010] . . . . . . . . . . . . . . 29
13 Usporedba modela podataka . . . . . . . . . . . . . . . . . . . 33
14 Program za ciscenje crteza . . . . . . . . . . . . . . . . . . . . 40
15 Program za stvaranje topologije . . . . . . . . . . . . . . . . . 41
16 Prikaz Task Panel-a . . . . . . . . . . . . . . . . . . . . . . . . 42
17 Dostupni servisi . . . . . . . . . . . . . . . . . . . . . . . . . . 43
18 Program Bulk Copy . . . . . . . . . . . . . . . . . . . . . . . . 44
19 Nestilizirani podaci . . . . . . . . . . . . . . . . . . . . . . . . 45
20 Prikaz tablice Data Table . . . . . . . . . . . . . . . . . . . . 45
21 Izgled aplikacije . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3
1 Uvod
Prostorne informacije poprimaju sve vecu vaznost u danasnje vrijeme. Zelimo
znati gdje se sto nalazi u bilo kojem trenutku i, ako je moguce, bilo gdje. Teh-
nologija danas nam to i omogucava: samo je potrebno odrediti koje cemo od
rjesenja upotrijebiti za postizanje zeljenog nam cilja.
Geoinformacijski sustav (GIS) je sustav za pohranu, vizualizaciju, obradu
i analiziranje prostornih podataka. Omogucuje nam da na jednom central-
nom mjestu pohranimo podatke, a obradujemo na drugom. Najrasirenija
uporaba sustava je vizualiziranje podataka. Karta koja je pohranjena u
nekom GIS sustavu, automatski postaje neka vrsta ”pametne” karte koja
omogucuje korisnikovu interakciju, stvaranje upita, analiziranje prostornih
informacija, uredivanje podataka pa i stvaranje novih karata na temelju prek-
lapanja istih podrucja razlicitih izvora zanimanja. Pomocu svih tih prednosti
koje nude geoinformacijski sustavi, informacije se mogu koristiti za znans-
tvena istrazivanja, predvidanja katastrofa, upravljanje zemljistima, izradom
karata itd.
Temelj svakog geoinformacijskog sustava su podaci koji se prikupljaju
razlicitim metodama. Oni ovise o tocnosti koju korisnik sustava zahtijeva.
Jedan od pogresnih nacina, koji se kod nas dosta koristi, je digitaliziranje
starih planova. Takvi podaci vec u sebi sadrze pogresku zbog starosti plana
koji je bio podlozan usuhu i rastegu papira. Ulazeci takvim podacima u GIS
aplikacije, ne smijemo ocekivati nista tocnije i kvalitetnije informacije. Po-
datke u GIS softver mozemo unijeti i prebacivanje podataka sa geodetski ins-
trumenata ili globalnih pozicijskih sustava (GPS). Dakako najjednostavniji
nacin za dobivanje karata velikih podrucja je aviofotogrametrijskim nacinom
4
prikupljanja podataka. To mogu biti digitalne ortofoto snimke ili pak neke
specijalizirane snimke termalnih podrucja koje nam mogu kasnije, prilikom
analiziranja, posluziti.
Vec danas mogu se naci razlicita softverska rjesenja, bila to komercijalna
ili besplatna rjesenja. Jedno od najpoznatije i prilicno skupo rjesenje je ESRI
softverska kompanija. Oni nude klijentska, serverska i mobilna GIS rjesenja.
Kako su komercijalna rjesenja, prilicno skupa rjesenja, vecina korisnika se
okrece besplatnim ili otvorenim rjesenjima1. Open-source zajednica sastoji
se od tisuce programera koji svakodnevno unaprijeduju kod te se tako postizu
zadovoljavajuca rjesenja za jednostavne pa i napredne geoinformacijske sus-
tave.
1.1 Vektorski i rasterski tip podatka
Temelj svakog vektorskog tipa podatka je tocka. Razliciti objekti mogu se
prikazati povezivanjem tocaka pomocu linija, dok se povrsine prikazuju kao
skup povezanih linija, tzv. poligoni.
1eng. open-source
5
(a)Tocka
(b) Linija (c) Poligon
Slika 1: Tip podatka
Prednosti:
• jednostavnije povezivanje sa drugim izvorima vektorskih podataka
• zauzima manje prostora na mediju
• jednostavnije za upisivati, modificirati i odrzavati
• mogucnost izvrsavanja GIS upita
Nedostaci:
• neprikladno za prikazivanje kontinuiranih objekata
• svaki objekt mora biti zasebno pohranjen
• zahtjevno za prikazivanje velikog broja podataka
Rasterski podaci sastoje se od tzv. piksela koji su smjesteni u retke i stupce
celija u kojoj svaka pojedina celija ima odredenu vrijednost. Sto je gustoca
celija veca, moci ce se za isto podrucje dodijeliti vise atributa. Najcesce
svaka celija predstavlja odredenu zemaljsku jedinicu u prirodi. Rasterski po-
daci cesto predstavljaju sliku koju osim boje svakog piksela, moze sadrzavati
6
neku drugu vrijednost, klasifikaciju zemljista, kolicina oborina, nagib terena
itd.
Prednosti:
• pogodno za prikazivanje kontinuiranih objekata
• jednostavnije za analizirati
• preglednije
Nedostaci:
• ne sadrzava informacije o projekciji
• kvaliteta podataka ovisi o gustoci piksela
• zauzima vise prostora na mediju od vektorskih podataka
Slika 2: Usporedba vektorskog i rasterskog tipa podatka
7
1.2 Softverska i GIS rjesenja
Kada govorimo o GIS rjesenjima, ne govorimo samo o rjesenjima koja su za-
sebna za neki odredeni program, oni se mogu naci kao desktop aplikacije, web
aplikacije ili cloud aplikacije. Desktop rjesenja su specijalizirane GIS aplika-
cije koje posjedujemo na racunalu, a podaci se mogu nalaziti lokalno ili na
nekim udaljenim serverima. Da ne ostanu ograniceni na samo jedno racunalo
i jednog korisnika, omogucuje nam WEB GIS. Prednost ovakvog rjesenja je
to sto je on neovisan o hardveru i softveru koji je potreban na racunalu, vec
nam je dostatan samo web preglednik u kojem se cijela aplikacija nalazi, a
svi podaci nalaze se na internetu.
WEB GIS mozemo podijeliti u tri osnovne skupine:
• aplikacije sa staticnim kartama
• aplikacije sa dinamicnim kartama koja mogu prikazivati razlicita po-
drucja zanimanja
• aplikacije sa dinamicnim kartama na kojima se mogu izvrsavati od jed-
nostavnih atributivnih upita do slozenijih geometrijskih
Novina medu internet tehnologijama je takozvani cloud-computing ili u slo-
bodnom prijevodu, racunala u oblacima. Cloud-computing je vrsta sistem-
ske arhitekture bazirana na udaljenim racunalima na internetu. Korisnik se
pomocu internet preglednika spaja na servis iza kojeg se nalazi ogroman broj
racunala koje korisnik koristi za svoje potrebe. Mogucnosti koje su koris-
niku dostupne u desktop aplikacijama, omogucene su mu u cloud aplikaciji.
Prednost ovakvog modela je sto korisnik vise ne mora brinuti o softveru ili
hardveru koji se nalazi na tim racunalima, ne mora kupovati racunala, bri-
nuti se o sigurnosti, nadogradivati sustave, kupovati softver, jer mu je to sve
8
vec omoguceno. Te prednosti uvidjele su i tvrtke koje se bave GIS rjesenjima.
Servisi koje pruzaju uslugu cloud-gis su ArcGIS Server i GIS Cloud.
1.2.1 GIS Cloud
GIS Cloud je prva svjetska web i cloud bazirana platforma sa svim svojstvima
geografskog informacijskog sustava (GIS), a ima napredne mogucnosti kre-
iranja, uredivanja, uploadanja, dijeljenja, objavljivanja, procesuiranja i ana-
liziranja prostornih i atributnih podataka. Svrha GIS Cloud-a je da korisnik
uporabom aplikacije donese najbolje moguce odluke za poslovanje te da rijesi
problem i donese poboljsanje geoprocesiranjem i vizualizacijom podataka.
Slika 3: Prikaz GIS Cloud-a Ltd [2010a]
9
1.2.2 ArcGIS Server
U nadolazecim mjesecima tvrtka ESRI najavila je cloud gis rjesenje koje
ce biti bazirano na vec postojecem softveru ArcGIS Server koristeci Amazon
cloud. Postojece rjesenje ArcGIS Explorer Online nudi samo osnovne funkcije
pregledavanja karte.
Slika 4: ArcGIS Explorer Online
1.3 O projektu
Dosadasnje stanje katastra vodova evidentiralo se u CAD okruzenju sto je
rezultiralo nekonzistenciji i redundanciji podataka, tj. ono nije odgovaralo
stvarnoj slici na terenu. Shvativsi problem, krenulo se u poboljsanje sustava,
ali tako da se zadrzi dosadasnje poznato CAD okruzenje sa mogucnostima
GIS funkcionalnosti. Zadrzavajuci poznato CAD okruzenje, odluceno je ka-
tastar voditi u AutoCAD Map 3D programu koji u izvornom obliku podrzava
10
spajanje na MS SQL Server bazu podataka. AutoCAD Map 3D je jedna od
rijetkih aplikacija na trzistu koja ima sve funkcionalnosti CAD okruzenja s
dodacima GIS aplikacija te omogucava direktan pristup svim geoprostornim
podacima koji se nalaze u razlicitim izvorima. Za to je zasluzan FDO2, tehno-
logija zasnovana na otvorenom kodu koja nam omogucava spajanje programa
na razlicite baze podataka, datoteke te servise na internetu. Osim spajanja,
olaksano je i rukovanje podacima. FDO ima mogucnost dodavati, uredivati,
brisati pa cak i raditi jednostavne upite na podacima. Povezivanjem Auto-
CAD Map-a uz pomoc FDO modula, dobivamo samo rudimentalan prikaz
linijskih i tockastih objekata. Stiliziranjem linija i popratnih plinskih obje-
kata, moguce je sto vjernije pokazati stvarnu sliku terena.
Slika 5: Plinska mreza sa popratnim prikljuccima
2Feature Data Object
11
1.4 Programska podrska
Softverska rjesenja koja su bila potrebna za provodenje zahtjeva katastra
vodova plinovoda:
• Microsoft Windows XP
• Autodesk Map 3D 2010
• Microsoft SQL Server 2008 Express
• .NET 3.5
• Microsoft Visual Studio 2008 Express
• Autodesk Map 3D API
• FDO
1.4.1 Microsoft Windows
U ovom slucaju nismo mogli koristiti ni jedan drugi operativni sustav osim
Microsoft Windows-a iz razloga sto aplikacija AutoCAD ne radi ni na jed-
noj drugoj platformi. Microsoft Windows je jedan od najrasprostranjenijih
operativnih sustava za siri krug korisnika te je zato i odabran.
1.4.2 Autodesk Map 3D
AutoCAD Map 3D je vektorski program za precizno kartiranje i GIS ana-
lize. Sadrzi sve funkcionalnosti AutoCAD-a i GIS alate potrebne za izradu
karata i geografskih informacija. Postoje ugradeni alati za spajanje na uda-
ljene baze podataka, njihovo manipuliranje te izvrsavanje prostornih upita
na prostornim podacima. Izrada karata olaksana je alatima za vizualizaciju
i stiliziranje. Postoji vise od 3000 globalnih koordinatnih sustava cime se
12
omogucava jednostavnije transformiranje koordinata izmedu sustava. Veliki
broj podrzanih rasterskih i vektorskih podataka olaksava razmjenu crteza
izmedu svih poznatijih aplikacija.
1.4.3 .NET
Najvazniji dio .NET-a je .NET Framework. Jednostavno receno, to je skup
programa za izradu ili nadogradivanje operativnoga sustava, prvenstveno
Windows-a. U paketu se nalaze sve gotove klase kojima se ubrzava izrada i
razvoj aplikacija svih vrsta i oblika. Srce samog .NET-a je CLR3 koji ima
ulogu izvrsavanja koda. Aplikacije za .NET platformu mogu se pisati u bilo
kojem poznatom jeziku: C#, J#, C++, Visual Basic ili JScript. Instrukcije
pisane u ostalim jezicima se pomocu Microsoftovog kompajlera izvrsavaju u
jezik koji je poznat CLR-u kako bi ga mogao izvrsiti. .NET se moze podijeliti
na tri osnovna dijela: osnovne klase, Web Forme, Web Servise i Windows
Forme.
Osnovne klase4 sadrze sve funkcije i naredbe potrebne u programiranju (funk-
cije za transformaciju teksta, ispisivanje teksta, hvatanje unosa sa tipkovnice,
mrezna komunikacija itd.). Nadogradnja osnovnoj klasi sadrzi set klasa za
komunikaciju sa bazama podataka (ADO.NET) te manipulaciju XML dato-
tekama. ADO.NET je skup programskih klasa za pristup i manipuliranje
relacijskim bazama podataka.
Web Forme su dio skupa klasa koji se naziva ASP.NET. ASP.NET je skup
gotovih klasa za izradu dinamicnih web aplikacija. On kombinira standardni
HTML kod i .NET, a to omogucava jednostavniju izradu web aplikacije sa
svim mogucnostima koje nudi .NET Framework.
Web Servis je standard za komunikaciju izmedu aplikacija pomocu SOAP
3Common Language Runtime4Base Class Library
13
poruka prenosenih Web-om. Prednost web servisa je integracija razlicitih
sustava i aplikacija putem standardiziranog nacina komunikacije. Web ser-
visi omogucuju prijenos informacija putem interneta udaljenim programima.
Windows Forms je skup klasa za izradu grafickih aplikacija na racunalima sa
Windows operativnim sustavom. Sadrzi gotove klase sto uvelike pojednos-
tavljuje izradu aplikacija i skracuje vrijeme programiranja.
1.4.4 Microsoft Visual Studio 2008 Express
Nezaobilazni program za programiranje u .NET-u je Microsoft Visual Studio
Express. Visual Studio Express je besplatno razvojno okruzenje za programi-
ranje svih vrsta aplikacija u .NET-u. Ideja Visual Studija je bila ujediniti sve
alate za programiranje na jednome mjestu te programiranje podici na visu
razinu. Visual Studio omogucava razvoj grafickih i konzolnih aplikacija te
izradu Windows Forma, web stranica i web servisa na platformama: Micro-
soft Windows, Windows Mobile, Windows CE, .NET Framework i Microsoft
Silverlight. Visual Studio Express sastoji se od uredivaca teksta, programa
za pronalazak gresaka5, dizajnera i ostalih alata koji pomazu jednostavnijem
razvoju aplikacija.
5eng. debugger
14
Slika 6: Visual Studio Express okruzenje
1.4.5 Autodesk Map API
API6 je sucelje pomocu kojeg jedan program komunicira s drugim. AutoCAD
Map API je skup klasa i metoda kojim se upravlja AutoCAD Map nared-
bama iz nekog drugog programa. Programe Autodesk-a mozemo prosiriti na
vise nacina: ObjectARX7 i VLISP8. ObjectARX je programsko okruzenje u
kojem mozemo prosiriti AutoCAD programe u objektno orijentiranom C++,
C# ili VB.NET programskom jeziku. ObjectARX nam omogucava direktan
pristup svim dijelovima otvorene arhitekture AutoCAD-a te takoder pristup
bazi objekata, grafickom sustavu te svim fundamentalnim naredbama. Pr-
6Application Programming Interface7AutoCAD Runtime Extension8Visual Lisp
15
vobitno je Map API bio napisan u Autodesk-ovom primarnom programskom
okruzenju prosirenja ObjectARX-u, ali se sad postepeno ”prepisuje” kako bi
radio i na .NET platformi. Bas zbog toga je nacin programiranja otezan u
.NET-u jer je potrebno poznavati razlicite nazive klasa kao i metode progra-
miranja u oba jezika. VLISP je modifikacija Lisp programskog jezika koja
upravlja AutoCAD-ovim objektima. Razlika izmedu VLISP-a i ObjectARX-
a je sto je VLISP interpretacijski programski jezik, tj. ne pretvara se u izvrsni
kod nego se izvrsava liniju po liniju. VLISP je najvise pogodan za razvijanje
manjih i jednostavnijih aplikacija. .
Primjer programa u VLISP-u:
1 (defun c : rad2txt ( )
2 ( s e tq ent ( car ( e n t s e l ) )
3 rad iu s ( cdr ( assoc 40 ( entget ent ) ) )
4 ( print ( s t r c a t ( ”Radius kruzn i ce ” rad iu s ) ) ) ) )
Primjer istog programa u .NET-u:
1 using Autodesk .AutoCAD. A p p l i c a t i o n S e r v i c e s ;
2 using Autodesk .AutoCAD. DatabaseServ ices ;
3 using Autodesk .AutoCAD. EditorInput ;
4 using Autodesk .AutoCAD. Runtime ;
5 namespace rad2txt {
6 public class Class1 {
7 [ CommandMethod( ” kruzn ica ” ) ]
8 public void program ( ) {
9 Document doc = Appl i ca t ion . DocumentManager .
MdiActiveDocument ;
16
10 Database db = doc . Database ;
11 Editor ed = doc . Editor ;
12 PromptEntityOptions peo = new
PromptEntityOptions ( ”Odaberi kruznicu : ” ) ;
13 PromptEntityResult per = ed . GetEntity ( peo ) ;
14 using ( Transact ion t rans = db .
TransactionManager . Star tTransact ion ( ) ){
15 DBObject obj = trans . GetObject ( per .
ObjectId , OpenMode . ForRead ) ;
16 C i r c l e krug = obj as C i r c l e ;
17 ed . WriteMessage ( ”Radius kruzn i c e ” +
krug . Radius . ToString ( ) ) ;
18 }}}}
1.4.6 Microsoft SQL Server 2008 Express
Microsoft SQL Server Express je besplatna relacijska baza podataka koja
upite temelji na Transact SQL jeziku (T-SQL), sto znaci da osim standard-
nih naredbi koje pruza SQL jezik sadrzi i mogucnost programiranja funkcija.
U ranijim verzijama SQL Server-a nije postojalo prosirenje na prostorne po-
datke, dok je od 2008 verzije to omoguceno. U prijasnjim verzijama bilo je
potrebno prosiriti bazu podataka kako bi postala prostorna. To je dovodilo
do nestabilnosti u radu jer prosirenje nije bilo u skladu sa standardima te
nije bilo izvorno podrzana od strane Microsofta.
Osnova svakog relacijskog pristupa su prikazivanje podataka pomocu rela-
cija. Relacije su podaci spremljeni u obliku tablica. Tablica je skup poda-
taka formiranih u obliku stupaca (atributa) i redaka (n-torki) za koje vrijede
17
pravila:
• tip podatka je isti za sve vrijednosti unutar jednog atributa
• svaka vrijednost je neovisna o drugim vrijednostima u tablici
• unutar jedne n-torke ne smije postojati dvije iste vrijednosti
• redosljed vrijednosti u relaciji je nebitan
• imena atributa moraju biti razlicita
• imena atributa u razlicitim relacijama mogu biti identicna ali ne postoje
dvije relacije, unutar baze, sa identicnim imenom
Relacije najcesce opisuju neki objekt koji je podrucje interesa. Objekt je
entitet iz stvarnog svijeta o kojem se informacije skupljaju i obraduju.
Atributi su svojstva koja neki objekt moze poprimiti iz realnog svijeta. Svaki
objekt sadrzi barem jedan atribut. Domena atributa je skup svih vrijednosti
koje atribut moze poprimiti.
Slika 7: Primjer jedne relacije
18
Prilikom modeliranja baze podataka moramo se pridrzavati nekih svojstava
kako bi se osigurala konzistencija. Neka od ogranicenja su:
• kljuc9
• cjelovitost entiteta10
• referencijalna cjelovitost11
U svakoj tablici, jedan atribut mora biti tzv. primarni kljuc. Primarni kljuc
je jedinstvena vrijednost koja jednoznacno odreduje pojavljivanje svake n-
torke. Primarni kljuc je najcesce brojcana vrijednost koja se pojavljuje samo
jednom u relaciji.
Strani kljuc je primarni kljuc u drugoj relaciji. Veza izmedu dvije relacije
uspostavlja se povezivanjem primarnog i stranog kljuca. Strani kljuc mora
biti istog tipa podatka kao i primarni kljuc kako bi se veza mogla uspostaviti.
Cjelovitost entiteta je svojstvo koje ogranicava pojavljivanje primarnog kljuca
kao null vrijednost.
Referencijalna cjelovitost je svojstvo koje govori da primarni kljuc jedne re-
lacije mora imati odgovarajuce vrijednosti stranog kljuca druge relacije.
Primjer jednostavne SQL naredbe:
1 select ∗ from pl inovod
9eng. key10eng. entity integrity11eng. referential integrity
19
Jedna od mogucnosti T-SQL su stored procedures. Stored procedures je grupa
T-SQL naredbi slozena u jednu metodu. Ona nam omogucuje da napisemo
vlastite procedure koje ce izvrsavati odredene radnje nad podacima. Stored
procedures vracaju rezultat na cetiri nacina:
• brojcanu vrijednosti ili rezultat u obliku cursor varijable (cursors su
skup rezultata koji dohvacaju pojedinacne redke)
• kodove koji su uvijek brojcane vrijednosti
• grupu rezultata za svaku pojedinu SELECT naredbu unutar procedure
• globalni cursor koji moze biti referenciran izvan procedure
Prednosti procedura:
• SQL Server pretvara procedure u izvrsni kod sto povecava brzinu izvrsavanja
prilikom visestrukog pozivanja funkcije
• smanjuje kolicinu prometa mreze izmedu klijenta i posluzitelja
• visekorisnicko izvrsavanje procedura
Struktura procedura je slicna strukturi metoda u programskim jezicima. Pro-
cedura moze primati argumente prilikom pozivanja procedura te moze, ali
ne mora vracati vrijednosti kao rezultat. Procedure mogu sadrzavati logicke
provjere i petlje.
20
Primjer jednostavne procedure:
1 create procedure sp Pr ikazPl inovoda
2 as
3 select ∗ from pl inovod
Pokretanjem predhodnog primjera, u bazu se sprema procedura pod nazivom
sp PrikazPlinovoda. Da bi smo pokrenuli proceduru, koristimo naredbu:
1 exec sp Pr ikazPl inovoda
Primjer koristen u projektu:
1 create procedure [ dbo ] . [ sp GetTable ] ( @table varchar (10)
)
2 as
3 d e c l a r e @sqlcommand nvarchar (400) ;
4
5 set @sqlcommand =
6 case
7 when @table = ’ dubine ’ then
8 ’ s e l e c t ID , DUBINE, ROTATION, geom . STAsText ( ) AS geom
FROM dbo . ’ + @table
9 when ( @table = ’ kape ’ or @table = ’ zasun ’ ) then
10 ’ s e l e c t ID , ROTATION, geom . STAsText ( ) AS geom FROM
dbo . ’ + @table
11 . . .
12 end
Procedura sp GetTable uzima kao argument ime tablice, koji je tipa varchar,
te vraca vrijednosti tablice odredene logickom petljom na temelju ulaznog
parametra. Procedura je koristena zbog prikazivanja geometrije koja je u
21
bazi spremljena u binarnom obliku. Metoda STAsText() vraca tekstualni
oblik koordinata objekta.
Primjer rezultata vracenog STAsText() metodom:
1 LINESTRING(−122.360 47 .656 , −122.343 47 .656)
2 Teorijski dio
2.1 Prostorne baze podataka
Prostorne baze podataka su baze optimizirane za pohranjivanje i izvrsavanje
upita na prostornim podacima, ukljucujuci tocke, linije i poligone. Baze po-
dataka pohranjuju razlicite vrste numerickih i tekstualnih tipova podataka
dok prostorne baze sadrze poseban dodatak za analiziranje prostornih po-
dataka najcesce nazvanih geometrija. Open Geospatial Consortium (OGC)
izradio je Simple Feature specifikaciju i skupinu standarda za dodavanje pros-
tornih funkcionalnosti bazama podataka.
Vecina baza podataka koristi indekse za brze pretrazivanje vrijednosti. Ti
indeksi nisu optimirani za rad na prostornim podacima te se zbog prostornih
podataka uvodi prostorni indeks.
Popis podrzanih prostornih upita podrzanih od strane OGC-a:
• prostorna mjerenja: izracunavanje prostorne udaljenosti izmedu tocaka,
povrsina, izracunavanje duljina polilinija itd.
• prostorne funkcije: modeliranje postojecih objekata u svrhu izrade no-
vih
22
• prostorne predikcije: mogucnost predvidanja kretanja pojava i sl.
• konstrukcijske funkcije: upisivanje novih objekata pomocu SQL upita
• informacijske funkcije: ispisivanje informacija lokacije centra kruznice,
koordinate centroida itd.
2.1.1 Vrste prostornih tipova podataka
Osim uobicajenih vrsta tipova podataka, prostorne baze podrzavaju jos dvije
Tablica 1: Vrste prostornih tipova podataka
Tip podatka Uporabageografski geografske vektorske prostorne podatkegeometrijski prostorne podatke u ravnini
Slicnosti:
• mogu prikazati prostorne informacije pomocu tocaka, linija i poligona
• spremaju se u istom binarnom formatu
• koriste objektno-orijentirane metode temeljene na .NET Framework-u
• implementiraju prostorne iste prostorne metode za analiziranje i izracunavanje
2.1.2 Geografski tip podatka
Najvaznija karakteristika geografskog tipa podatka jest sto se bazira na za-
krivljenosti Zemlje. Ovaj tip podatka pogodan je za izracunavanje i anali-
ziranje prostornih podataka velikih podrucja gdje zakrivljenost Zemlje ima
23
Tablica 2: Razlicitost tipova podataka
Svojstvo geometrijski tip geografski tipOblik Zemlje Ravna OkruglaKoordinatni sustav Projekcija GeografskiZapis koordinate (x,y) geografska sirina i
duzinaJedinice mjerenja Jedinice koordinata x i y Definirano u
sys.spatial reference systems
SRID Nije proveden ProvedenPocetna vrijednost SRID 0 4326 (WGS 84)Limitacija Nema Objekt ne moze biti
veci od polutke
utjecaj na krajnji rezultat. Svaka linija povucena izmedu dvije tocke je us-
tvari dio glavne kruznice.
Slika 8: Geografski tip podatka
2.1.3 Geometrijski tip podatka
Za razliku od geografskog tipa podatka, geometrijski podaci baziraju se na
koordinatama u ravnini koristeci pravila kartezijevog koordinatnog sustava.
24
Slika 9: Geometrijski tip podatka
2.1.4 Jedinice mjerenja
Geografski tip podatka zapisuje se u obliku geografske duzine i sirine, mjerene
u stupnjevima. Ovakav tip oznacavanja pogodan je za prikazivanje tocaka
ali ne i za prikazivanje udaljenosti izmedu tocaka na povrsini.
Geometrijski tip podatka koristi pravila ortogonalnih udaljenosti od ishodista
koordinatnog sustava duz definirane osi. Rezultat je prikazan u jedinicama
u kojima je definiran koordinatni sustav.
2.1.5 Spatial reference ID - SRID
Vazna stvar prilikom upisivanja geografskih i geometrijskih podataka je do-
djeljivanje pripadajuceg SRID broja. SRID je jedinstven broj koji se koristi
za raspoznavanje razlicitih projekcija koordinatnih sustava. Svaki proizvodac
prostornih baza podataka koristi vlastitu bazu projekcija i identicne SRID
brojeve zbog lakseg koristenja. Svako mjerenje i racunanje podataka izracunato
je u skladu sa SRID brojem, tj. obzirom na projekciju u kojoj se podaci na-
laze.
Primjer definiranja WGS84 projekcije - SRID 4326
25
EOGCS[”WGS 84”,
DATUM[”WGS 1984”,
SPHEROID[”WGS 84”,6378137,298.257223563,
AUTHORITY[”EPSG”,”7030”]],
AUTHORITY[”EPSG”,”6326”]],
PRIMEM[”Greenwich”,0,
AUTHORITY[”EPSG”,”8901”]],
UNIT[”degree”,0.01745329251994328,
AUTHORITY[”EPSG”,”9122”]],
AUTHORITY[”EPSG”,”4326”]]
2.2 Client - server model
Sustav katastra vodova namijenjen je da bude dostupan vecem broju koris-
nika s ovlastenim pristupom. Zbog toga se podaci spremaju na posluzitelje.
Posluzitelji su racunala, najcesce spojena na mrezu, u kojima su pohranjeni
podaci i koji omogucuju funkcioniranje mreze, a korisnici su ti koji se po
potrebi prikljucuju na posluzitelj i koriste podatke i usluge. Komunikacija
koja se ostvaruje prilikom pristupa podacima s klijentskog racunala prema
posluzitelju odvija se prema sljedecoj shemi:
26
Slika 10: Princip rada client-server modela
Kod ovakvog modela rada, postoji podjela poslova izmedu klijentskog
racunala i posluzitelja. Klijentsko racunalo salje zahtjev i prima obradene
podatke dok posluzitelj prima zahtjeve od klijentskih racunala, obraduje ih i
salje ih natrag prema klijentu. Iz navedenoga se moze zakljuciti da su klijent-
ska racunala znatno jednostavnija i slabija nego posluziteljska. Prednosti koje
ovakav model ima su sto se sva ulaganja moraju usmjeriti u posluziteljska
racunala dok su za korisnicka ulaganja minimalna. Medutim, nedostatak
je sto veza izmedu racunala zahtjeva odrzavanje. Najcesce su podaci po-
hranjeni na posluzitelju koji se nalazi na udaljenoj lokaciji, te su time vise
izlozeni neovlastenom pristupu drugih korisnika.
2.3 VPN
VPN12 je vrsta sigurnog povezivanja racunala u virtualne privatne mreze
preko javne mrezne infrastrukture. Dodjeljivanjem racunala u VPN mrezu
omogucujemo povezivanje udaljenih korisnika koji se mogu nalaziti na razlicitim
geografskim lokacijama, te se oni ponasaju kao da su u lokalnoj mrezi. Pred-
nost VPN-a jest zasnivanje na implementiranim mreznim infrastrukturama,
12Virtual Private Network
27
te tada nije potrebno nikakvo dodatno povezivanje. Iako sav promet putuje
preko javne mreze, interneta, vidljiv je samo ogranicenom broju korisnika
koji su za to ovlasteni. Temelj VPN je sifriranje podataka te autentikacija
korisnika.
Prednost VPN-a pred ostalim vrstama privatnog povezivanja jest koristenje
Slika 11: Princip rada VPN mreze
vec postojece infrastrukture, tj. nije potrebno iznajmljivati privatne linije
ako kvaliteta i propusnost nisu previse znacajni. Jedini nedostatak je sto
moze doci do prekida internet veze ili moguceg kasnjenja paketa.
Osvrnemo li se malo na nas projekt, podacima katastra vodova pristupaju
samo ovlastene osobe koje nisu uvijek u mogucnosti biti blizu posluziteljima
te je odabir VPN mreze prijeko potreban. Podaci ce biti dostupni samo
odredenom broju korisnika koji mogu manipulirati podacima i koristiti os-
tale servise koji se nalaze na posluziteljima preko sigurne i sifrirane mrezne
infrastrukture.
28
2.4 FDO API
Slika 12: FDO logo organizacijeOSGeo [2010]
FDO13 API je vrsta programske
podrske za manipuliranje, definira-
nje i analiziranje prostornih poda-
taka koji ne ovise o mediju u kojem
se nalaze. On kao takav ne postoji
kao zasebna aplikacija nego se ukom-
ponira u razlicite programe koje zele
pristupati podacima na jednostav-
niji i standardiziran nacin. Zbog
svoje jednostavnosti i rasirenosti, FDO podrzava veliki broj pruzatelja usluga
na razlicite servise, a samim time podrzava razlicite vrsta podataka koje su
smjestene u bazama podataka ili kao specificne datoteke.
Poceci FDO-a datiraju od tvrtke Autodesk; njima je bio potreban jedan
unificirani alat koji ce imati mogucnost spajanja na razlicite vrste servisa i
manipulacije podacima, ali tako da se istovremeno mogu zadovoljiti zahtjevi
ostalih aplikacija.
Pocetne mogucnosti FDO-a:
• minimalno podrzavanje OGC Simple Feature geometrijskog tipa po-
datka
• podrzava spajanje na Oracle Spatial bazu podataka i vrsi manipulaciju
podacima smjestenim u SHP datotekama
• mogucnost da se u FDO API kodu za svaki pojedini pruzatelj servisa
13Feature Data Object
29
implementira zasebni modul
• omogucenje lakog dodavanja novih naredbi za manipuliranje podacima
Prva verzija FDO-a pojavila se izlaskom AutoCAD Map 2005 verzije. Od
pruzitelja servisa, sadrzavao je spajanje na Oracle bazu i na SDF datoteke
(Autodeskova verzija datoteke za spremanje geoprostornih podataka). Od
pocetka izlazenja FDO je bio pod licencom Autodeska. Izlaskom MapGuide-
a, servisa za objavljivanje prostornih podataka na internetu, FDO postaje
dio open source zajednice.
Do danasnjeg dana, mnoge aplikacije u sebi sadrzavaju implementiran FDO
kod kao dio svojih programa. Neka od poduzeca koja koriste FDO kod su:
Autodesk, MapGuide Open Source, FDO Toolbox, Save Software (FME).
Tablica 3: Prikaz mogucnosti FDO-a
Mogucnost OpisConnection Spajanje na bazu podataka ili datotekuDatastore Stvaranje, brisanje i listanje baza podatakaSelect Odabiranje objekata pomocu filteraInsert Stvaranje novih objekata u baziUpdate Modificiranje postojecih objekata u baziDelete Brisanje objekata u baziSQL Command Mogucnost izvrsavanja SQL naredbiTransaction Podrzava transakcije (begin, commit, rollback)
Ulaskom u Open Source zajednicu, izvorni kod postao je otvoren sto je
omogucilo mnogim programerima diljem svijeta da sudjeluju u njegovom ra-
zvitku. Sve brze su izlazile nove verzije programa, a istodobno se i FDO poceo
brze razvijati. Danas FDO podrzava vise od 10 usluznih servisa. Podrzani
30
usluzni servisi: ArcSDE, MySQL, SDF, SHP, ODBC, WFS, WMS, GDAL,
OGR i Oracle
2.5 Struktura vektorskih podataka u CAD i GIS okruzenju
Vektor je skup od dvije tocke, odredene koordinatama, povezan linijom koja
ima svoju orijentaciju i smjer. Geometrijski objekti se u CAD i GIS okruzenju
prikazuju uz pomoc tocaka, linija i poligona. Sve izvedenice objekata se iz-
vode uz pomoc ta tri osnova oblika. Kako cemo objekte smjestiti u prostor i
medusobno ih povezati, ovisi o topoloskom modelu kojeg koristimo.
CAD14 programi su kompjuterski alati koji pomazu inzenjerima, arhitek-
tima i ostalim profesionalnim dizajnerima. AutoCAD kao CAD program
moze operirati s velikim brojem podataka. Objekti koji se nalaze u CAD
okruzenju nemaju svojstvo ovisnosti o drugim objektima u prostoru. Orga-
nizacija geometrijskih objekata u CAD programima je najcesce uredena po
tzv. spageti modelu.
Spageti model je nacin organiziranja geometrijskih objekata u prostornoj
bazi ili datoteci. Podaci smjesteni u prostoru na taj nacin ne ovise jedan
o drugom. Ne postoji nacin na koji se dva objekta mogu povezati jedan sa
drugim, tj. to su topoloski neuredeni podaci. Uredujemo li katastar u ovak-
vom modelu, suociti cemo se s problemom redundancije podataka. Granice
susjednih parcela najcesce ce biti predstavljene dvostrukim ”istim” linijama
zbog razlicitosti izvora podataka dok linije koje se presijecaju ne moraju
imati zapisanu tocku presjecista. Prednost spageti modela je prvenstveno
jednostavnost dodavanja novih objekata. Poznat primjer upotrebe ovakvog
14Computer-Aided Design
31
modela je OpenGIS Simple Feature specifikacija. Medutim, nedostatak je
sto podaci uredeni na ovaj nacin nemaju mogucnost prostornih upita kao sto
su sadrzavanje, susjedstvo i blizina.
Za razliku od spageti modela koji se koristi u CAD okruzenjima, u GIS
okruzenju su podaci malo uredeniji. Topoloski model je skup pravila koji
definiraju veze izmedu prostornih podataka te definiraju relacije izmedu oso-
bina prostora. Osobina podataka je sto se veze ne mijenjaju uslijed tran-
sformacija, oni su neovisni o koordinatnom sustavu i mjernim jedinicama.
Topologija se sastoji od granicenja, sadrzavanja i povezivanja. Granicenje je
osobina kad dva susjedna poligona dijele istu granicu, a sadrzavanje je kad se
jedan poligon nalazi unutar drugog poligona, dok je povezivanje osobina li-
nija tako da tvore mrezu puteva. Za razliku od spageti modela u topoloskom
se nece dogoditi redundancija podataka u zapisu. Objekt koji se dijeli sa
nekim drugim objektom, npr. granica posjeda, u zapisu se pojavljuje samo
jednom, sto bitno smanjuje velicinu zapisa, pogotovo ako govorimo o veli-
kima kolicina podataka.
Prilikom dodavanja podataka u GIS okruzenje, posebnu pozornost treba
obratiti na ocuvanje topologije. Podaci moraju ostati konzistentni kako bi se
veze objekta sacuvale. Kako bi se postiglo ocuvanje veza potrebno je prilikom
svakog dodavanja objekta koji se vezuje na postojece objekte postivati pra-
vila topoloskog modela. Npr. ako povezujemo prikljucke na postojeci vod,
potrebno ga je prekinuti na tom dijelu. Svaka linija na presjecistu mora imati
cvor, te svaka linija mora biti jedinstvena i neprekinuta od jednog cvora do
drugog. Na takvim uredenim podacima moguce je raditi slozene analize kao
sto je prikazivanje podrucja koje ce biti zahvaceno prilikom puknuca voda,
32
(a) Spageti model (b) Topoloski model
Slika 13: Usporedba modela podataka
planiranja postavljanja vodovoda i sl.
2.6 XML
XML15 je ”jezik” za jednostavno oznacavanje podataka. Nastao je prvens-
tveno namjerom da se na jednostavan i unificirani nacin opisuju podaci koji
ce biti citljivi ljudima i programima koji citaju obicne tekstualne datoteke.
Struktura XML-a je da se svaki podataka uokviruje ”trokutastim zagradama”
(<>) u koju se upisuju nazivi (tzv. tagovi) koji ga poblize objasnjavaju. Sin-
taksa je prilicno slicna HTML jeziku, ali se nikako ne moze reci da su iste.
Razlika izmedu ta dva jezika jest sto nazive oznaka u XML-u mozemo pro-
izvoljno odabrati dok su u HTML-u ti nazivi vec predodredeni.
Primjer XML dokumenta:
1 <?xml version=” 1 .0 ” encoding=” utf−8”?>
2 <LineSymbolization2D>
3 <LineSty l e>So l i d</ L ineSty l e>
4 <Thickness>0 .0</ Thickness>
15EXtensible Markup Language
33
5 <Color>FF7DC473</ Color>
6 <Unit>Centimeters</Unit>
7 <SizeContext>DeviceUnits</ SizeContext>
8 </ LineSymbolization2D>
XML dokument se sastoji od dva dijela: zaglavlja (prologa) i tijela.
1 <?xml version=” 1 .0 ” encoding=” utf−8”?>
U zaglavlju dokumenta navodi se specifikacija xml dokumenta prema kojoj
je dokument izraden, u ovom slucaju to je ”1.0” verzija. Drugi dio zaglavlja
moze se izostaviti ako tijelo dokumenta ne sadrzava nikakve druge znakove
osim engleske abecede, u protivnom je potrebno napisati specifikaciju prema
kojoj ce se znakovi dekodirati.
1 <LineSymbolization2D>
2 . . .
3 </ LineSymbolization2D>
Svako tijelo dokumenta mora imati jedan korijenski element koji sadrzava
sve ostale elemente.
1 <LineSty l e>So l i d</ L ineSty l e>
Elementi opisuju odredeni sadrzaj u XML dokumentu te moraju biti obu-
hvaceni XML oznakama. Sadrzaj mora biti okruzen s lijeve i desne strane
pocetnom i zavrsnom oznakom.
Pocetna oznaka je:
1 <LineSty l e>
,dok je zavrsna ista kao i pocetna, samo sto pocinje sa kosom crtom ”\”
34
1 <\LineSty l e>
Elementi u XML dokumentu su strukturirani u odnosu roditelj-dijete16 ili
kao sestrinski17. Odnos roditelj-dijete je hijerarhijskog tipa te se moze pro-
tezati beskonacno sve dok se postuju pravila smjestanja elemenata.
Roditelj-dijete odnos:
1 <LineRule>
2 <LegendLabel></LegendLabel>
3 <LineSymbolization2D>
4 <LineSty l e>So l i d</ L ineSty l e>
5 <Thickness>0 .0</ Thickness>
6 <Color>FF7DC473</ Color>
7 <Unit>Centimeters</Unit>
8 <SizeContext>DeviceUnits</ SizeContext>
9 </ LineSymbolization2D>
10 </ LineRule>
Sestrinski odnos:
1 <LineSty l e>So l i d</ L ineSty l e>
2 <Thickness>0 .0</ Thickness>
XML atributi poblize opisuju elemente u kojem se nalaze. Najcesce oznacavaju
kako se koji element mora prikazati. Sastoje se od naziva atributa i njegove
vrijednosti koja se stavlja pod navodne znakove. Atributi se upisuju samo
u pocetne elemente te ih se moze navesti proizvoljan broj puta odvojenih
razmakom.16eng. parent-child17eng. siblings
35
1 <TextStr ing f o n t f a c e=” Ar ia l ” f o n t s i z e=”10”>
Promjer voda</ TextStr ing>
Prednosti:
• razumljivo covjeku i racunalu
• XML je obicna tekstualna datoteka te je time citljiva na svim platforma
te nisu potrebni nikakvi dodatni programi kako bi se datoteka otvorila
• podrzavanje sirokog skupa znakova tzv. Unicode kodnu stranicu
• proizvoljan odabir naziva
• medunarodno priznat format
Nedostaci:
• podaci mogu postati redundantni
• velicinom datoteke opada i kvaliteta citljivosti
• problem kod velikih datoteka postaju nazivi elemenata, oni moraju
dovoljno precizno opisati svaki pojedini element sto dovodi do dugackih
naziva, a tako i nepreglednost
Formati koji su izvedeni na temelju XML specifikacija, a specijalizirani su
za prikazivanje tocaka, linija i poligona (geometrijskih objekata) su KML i
GML. Sintaksa KML i GML prati XML, ali nazivi oznaka nisu proizvoljni
nego su strogo odredeni specifikacijom (kako bi programi koji citaju formate
znali razlikovati geometrijske tipove podataka).
36
Primjer KML datoteke:
1 <?xml version=” 1 .0 ” encoding=”UTF−8”?>
2 <kml xmlns=” ht tp : //www. openg i s . net /kml /2 .2 ”>
3 <Placemark>
4 <name>Pr ik l j u cak</name>
5 <d e s c r i p t i o n>
6 P l i n s k i p r i k l j u c a k
7 </ d e s c r i p t i o n>
8 <Point>
9 <coo rd ina t e s>−122.082 ,37.421 ,0</ coo rd ina t e s>
10 </ Point>
11 </Placemark>
12 </kml>
Primjer GML datoteke:
1 <?xml version=” 1 .0 ” encoding=”UTF−8”?>
2 <Cijev>
3 <dubina>1 .45</dubina>
4 <promjer>160</ promjer>
5 <gml :centerL ineOf>
6 <gml :L ineSt r ing>
7 <gml:pos>100 200</ gml:pos>
8 <gml:pos>200 200</ gml:pos>
9 </ gml :L ineSt r ing>
10 </ gml :centerL ineOf>
11 </ Ci jev>
37
3 Prakticni dio
3.1 Implementacija sustava
Katastar vodova prvenstveno je namijenjen ogranicenom broju korisnika koji
imaju ovlastenja za pristup podacima. Podaci prvenstveno sluze kao eviden-
cija tvrtkama za isporuku energetskih dobara. Dosadasnja evidencija je bila
nepregledna i neprakticna za koristenje te podaci nisu bili konzistentni niti u
skladu sa stanjem koje se nalazilo na terenu. Sa povecanjem podataka, sus-
tav je bilo teze odrzavati. Dosadasnji nacin strukturiranja podataka nije bio
u skladu sa pravilima topoloskog modela te zbog toga nikakve GIS analize
nisu bile moguce.
Rekonstrukciju sustava trebalo je napraviti na svim segmentima sucelja i
podataka. Podaci nisu bili topoloski sredeni, a informacije o korisnicima su
se nalazile na drugom mjestu sto je dovodilo do redundancije podataka i ne-
povezanosti.
Sa svim GIS funkcionalnostima koje ce biti sadrzane u AutoCAD-u, dobiti ce
se potpuna mogucnost postavljanja jednostavnih i slozenih upita, podaci ce
biti pohranjeni na jednom mjestu, centralizirani, a time ce se izbjeci redun-
dancija. Svi podaci su pohranjeni u bazu podataka u pripadajucem koordi-
natnom sustavu, te smjesteni u razlicite tablice radi preglednosti. Centraliza-
cijom podataka na jednom mjestu dobili smo visekorisnicki pristup podacima.
Stvaranje ovakvog sustava zahtijeva veliku kolicinu znanja iz prostornih baza
podataka, strukturiranja vektorskih podataka i programiranja u .NET-u. Iz
tog razloga preporucljivo je stvaranje u timskom radu u kojem bi se svakom
38
pojedincu dodijelio dio zadatka sto bi optimiziralo utroseno vrijeme. Ovaj
rad ce pokazati da je i pojedinac u mogucnosti izvrsiti ovako kompleksnu
zadacu koja objedinjuje vjestine iz razlicitih geodetskih i tehnickih podrucja.
Prelaskom na CAD sa GIS funkcionalnostima, rad je pojednostavljen kreira-
njem aplikacije koja ujedinjuje sve potrebne radnje koje su potrebne prilikom
rada u vodenju evidencije katastra vodova. .
U sljedecim odlomcima opisani su postupci stvaranja takvog okruzenja.
3.2 Ulazni podaci
Ulazni podaci dobiveni su u obliku vektorskih podataka u AutoCAD-ovom
formatu dwg. Prije ubacivanja podataka u prostornu bazu, trebamo ih ”ocistiti”
kako bi se mogla napraviti topologija. Pojam ”ocistiti” podrazumijeva radnje
kao sto su: brisanje linija nulte duzine, brisanje identicnih linija, razdvajanje
objekata koji se sijeku itd.
Ovako sredeni podaci mogu ulaziti u proces provjere podataka za topologiju.
AutoCAD Map 3D za to ima ugradene alate. Procesom stvaranja topologije
program prolazi kroz sve elemente u crtezu provjeravajuci pravila topoloskog
modela podataka. Provjerenim elementima dodaju se novi atributi pomocu
kojih program provodi GIS analize i upite.
Podaci koji u sebi sadrzavaju topologiju ne mogu se direktno prebaciti iz
AutoCAD-a u prostornu bazu podataka. Crtez je potrebno spremiti u for-
mat koji pohranjuje veze izmedu objekata. Jedan od formata je i SDF. SDF
je datotecni format stvoren od strane Autodesk-a koji se ponasa kao pros-
torna baza podataka. Izvorno je podrzan od Autodesk GIS programa kao sto
39
Slika 14: Program za ciscenje crteza
su MapGuide i AutoCAD Map 3D. Trenutna verzija formata je SDF3 koja
se bazira na SQLite3 relacijskom sustavu za upravljanje bazama podataka.
SDF osim prostornih podataka sadrzi pripadajuce atribute te indekse za brze
pretrazivanje.
3.3 Unos u bazu podataka
Naredbom Bulk Copy moguce je prebaciti podatke iz jednog izvora podataka
u drugi. Prije nego pozovemo naredbu Bulk Copy, pomocu Task Panel-a spa-
jamo se na izvore na kojima cemo izvrsiti prebacivanje.
Svako povezivanje na bazu zahtjeva korisnicko ime, lozinku i lokaciju. Kada
se povezujemo na WMS i WFS servise potrebno je upisati web lokaciju, a
40
Slika 15: Program za stvaranje topologije
za povezivanje na datotecne izvore lokaciju datoteke. Uspostavljanjem veze
na izvor moguce je izabrati pojedine slojeve koje zelimo prikazati na karti.
Ukoliko se radi o velikoj kolicini podataka ili zelimo prikazati samo odredeno
podrucje, koristiti cemo dodavanje sa upitom.
Kada smo spojeni na zeljene izvore podataka, pozivamo naredbu Bulk Copy.
41
Slika 16: Prikaz Task Panel-a
U prozoru Bulk Copy naredbe potrebno je odabrati atribute koje zelimo
kopirati u prostornu bazu podataka.
42
Slika 17: Dostupni servisi
3.4 Stilovi
Stiliziranjem uredujemo objekte na nacin kojim zelimo da se prikazu na karti.
Postoje razliciti nacini prikazivanja podataka: mozemo prikazati jednu vrstu
objekta na jednoj visini pogleda, a na drugoj drugi, povecavati ili smanjivati
velicinu objekta promjenom visine pogleda, prikazati tekst uz objekt itd.
Tockaste objekte zamjenjujemo blokovima. Blok je skupina geometrijskih
oblika grupiranih u jednu zasebnu cjelinu. Stiliziranje nam omogucuje da na
crtezu prikazemo atribute koji su vezani uz objekte. Svim tim nacinima pri-
kazivanja objekata doprinosimo kvalitetnijem i preglednijim prikazom karte.
Napomenimo da su podaci koji se prikazuju u crtezu samo reprezentacija
podataka iz baze i nisu sastavni dio crteza. Svako modificiranje objekata
reflektira se na podatke u bazi.
43
Slika 18: Program Bulk Copy
Svim atributima, osim koordinata objekta, mozemo pristupiti unutar apli-
kacije pozivanjem tablice Data Table. U tablici su sadrzani svi atributi,
slozeni po slojevima koji se nalaze u karti. Osim pregledavanja, moguce je
pretrazivati, izmjenjivati i brisati podatke. Odabirom retka u tablici (sto
oznacava jedan objekt), program ce izolirati objekt na karti kako bismo mo-
gli vidjeti gdje se on nalazi. Svi elementi koji se nalaze u AutoCAD crtezu
spremljeni su u privremenu memoriju koja se brisu nakon gasenja programa.
Spremanjem pojedinacnih slojeva kao layer datoteku, moguce je ucitati sve
prethodne radnje u jednom koraku. Layer datoteka je XML datoteka koja
44
Slika 19: Nestilizirani podaci
Slika 20: Prikaz tablice Data Table
sadrzi sve definicije o pojedinom sloju. Struktura je strogo odredena te se
ne mogu proizvoljno dodavati novi elementi. Imena elemenata su unaprijed
45
predodredena kako bi program mogao procitati datoteku. Osim definicije o
prikazu sloja, datoteka sadrzi i podatke o spajanju na servise. Najcesce se
mogu naci povjerljive informacije kao sto su lokacija posluzitelja, korisnicko
ime i lozinka. Ucitavanje layer datoteke vrsimo pomocu prethodno opisane
palete Task Panel.
Prilikom ubacivanja podataka moramo se pridrzavati topoloskih pravila kako
bi se ocuvala struktura podataka. Prostorna baza podataka prilikom upisa
podataka nije u mogucnosti provjeravati topologiju podataka novo nastalih
objekata, te smo primorani pridrzavati se nekoliko pravila:
3.5 Aplikacije u CAD okruzenju
Aplikacije kao sto su AutoCAD Map, pogotovo za rad u GIS okruzenju, nisu
jednostavne za koristenje obicnim korisnicima naviknutim na CAD. Potrebno
je odredeno iskustvo i shvacanje sto koja funkcija radi kako bi mogli postici
odredeni rezultat. Cesto se dogada da se odredeni broj naredbi stalno po-
navlja sto dovodi do gubitka vremena. Centraliziranjem funkcija na jedno
mjesto i automatiziranjem radnji postici ce se veca efikasnost u radu i sma-
njiti mogucnost pogreske. Automatizaciju cemo postici izradom programa
koji ce se povezivati s AutoCAD Map naredbama. Program moze biti vi-
zualnog ili linijskog karaktera. Linijski programi najcesce su jednostavniji
programi ponavljajucih radnji, bez puno dodatnog konfiguriranja. Vizualni
program mogu biti izradeni u skladu grafickog sucelja operativnoga sustava
ili se mogu pojaviti kao sastavni dio AutoCAD-a u obliku palete. Programi
se pokrecu pozivanjem imena naredbi u komandnoj liniji. Kao sto je prije
napomenuto, programi se izraduju u ObjectARX ili VLISP programskom
46
Tablica 4: Topoloska pravila
Opis Slika
Dvije linije istog sloja ne smiju sepreklapati
Linije istog sloja ne smiju se sjeci.U tocci presjecista, linije morajubiti razlomljene
Linije istog sloja moraju se spojitiu krajnjim tockama
Linije istog sloja moraju se dodiri-vati samo u krajnjim tockama
Linije istog sloja ne smiju sjecisame sebe
jeziku. U ovom radu koristiti ce se ObjectARX programsko rjesenje, tocnije
C# jezik. Aplikacije se razvijaju u programskom paketu Microsoft Visual
Studio Express. Da bismo mogli pozvati AutoCAD objekte i funkcije po-
trebno se u projektu referencirati na dvije datoteke, acmgd.dll i acdbmgd.dll.
Acmgd.dll je modul u kojem su opisane sve metode i klase koje se mogu
koristiti prilikom programiranja aplikacija za prosirenje AutoCAD-a. Acd-
47
bmgd.dll je modul slican prethodnom, ali se odnosi na klase i funkcije za
manipulaciju objektima koji se nalaze unutar baze AutoCAD crteza. DLL
datoteka se izraduje pretvaranjem izvornog koda u izvrsni. Prije samog po-
kretanja naredbe, aplikaciju je potrebno ucitati u program naredbom netload.
Primjer jednostavne AutoCAD aplikacije napisane u .NET-u:
1 using System ;
2 using Autodesk .AutoCAD. Runtime ;
3 using Autodesk .AutoCAD. EditorInput ;
4
5 public class Primjer {
6 Editor ed = Appl i ca t ion . DocumentManager .
MdiActiveDocument . Editor ;
7 [ CommandMethod( ” primjerPrograma ” ) ]
8 public void primjerPrograma ( )
9 {
10 ed . WriteMessage ( ” He l lo World ! ” ) ;
11 }
12 }
Pokretanjem naredbe ”primjerPrograma” iz komandne linije ispisati ce se
poruka ”Hello World!”.
1 [ CommandMethod( ” primjerPrograma ” ) ]
CommandMethod je tzv. atribut metode. Atribut oznacava metodu kao
izvrsnu sto znaci da se ona moze pozvati unutar AutoCAD-a.
48
1 ed . WriteMessage ( ” He l lo World ! ” ) ;
Na objektu Editor, koji je prethodno definiran kao ”ed”, pozivamo metodu
”WriteMessage” koja kao rezultat ispisuje tekst na ekranu u komandnoj liniji.
3.6 Struktura programa za aplikaciju projekta
AutoCAD crtez se ponasa kao baza podataka u koju se spremaju objekti.
Svako pristupanje ili modificiranje objekata provodi se uz pomoc transakcije.
Transakcija je skup operacija koji prevodi bazu podataka iz jednog konzis-
tentnog stanja u drugo konzistentno stanje. Sustav za upravljanje bazom
podataka mora zadovoljiti cetiri tzv. ACID uvjeta da bi omogucio pravilan
rad s transakcijama:
• Atomicnost transakcije18: transakcije nije moguce dijeliti na ele-
mentarne transakcije
• Konzistentnost19: baza podataka uvijek mora zadrzati konzistentno
stanje
• Izolacija20: dok transakcija nije izvrsena, njezine operacije ne utjecu
na druge, istodobno izvrsavane transkacije
• Trajnost21: nakon sto je transakcija izvrsena, promjene ostaju trajno
pohranjene
18eng. Atomicity19eng. Consistency20eng. Isolation21eng. Durability
49
Primjer transakcije:
1 using ( Transact ion t rans = db . TransactionManager .
Star tTransact ion ( ) ){
2 . . .
3 t rans . Commit ( ) ;
4 }
Svaki put kad se objekt Transaction instancira, mora se na kraju opera-
cije ”unistiti” pomocu naredbe Dispose() ili koristenjem naredbe using koja
automatski na kraju unistava objekt. Ako su svi uvjeti uspjesnosti operacija
nad crtezom zadovoljeni, sve promjene potvrdujemo naredbom Commit(), u
suprotnom nikakve promjene nece biti pohranjene. Dogodi li se slucaj da
zelimo povuci sve operacije koje smo uputili na izvrsavanje, pozvat cemo na-
redbu RollBack().
Primjer dodavanja linije u crtez:
1 using ( Transact ion acTrans = acCurDb . TransactionManager
. Star tTransact ion ( ) ){
2 . . .
3 BlockTableRecord acBlkTblRec ;
4 acBlkTblRec = acTrans . GetObject ( acBlkTbl [
BlockTableRecord . ModelSpace ] ,
5 OpenMode . ForWrite ) as
BlockTableRecord ;
6 Line acLine = new Line (new Point3d (5 , 5 , 0) ,
7 new Point3d (12 , 3 , 0) ) ;
8 acBlkTblRec . AppendEntity ( acLine ) ;
9 acTrans . AddNewlyCreatedDBObject ( acLine , true ) ;
50
10 acTrans . Commit ( ) ;
11 }
• BlockTableRecord je objekt pomocu kojeg pristupamo svim objek-
tima u AutoCAD-u
• novi objekt stvaramo pomocu klase Line
• novonastalu liniju metodom AppendEntity() dodajemo u bazu poda-
taka crteza
• potvrdujemo upis objekta metodom AddNewlyCreatedDBObject()
• transakciju potvrdujemo metodom Commit()
Ucitavanje layer datoteke:
1 AcMapMap map = AcMapMap. GetCurrentMap ( ) ;
2 . . .
3 map . LoadLayer ( ” putanja datoteke ” ) ;
• AcMapMap je klasa koja pozivanjem njegovog konstrukora GetCur-
rentMap instancira objekt map koji sadrzi sve informacije i metode
trenutne karte
• map.LoadLayer je metoda objekta map koja ucitava slojeve koji su
definirani u datotekama sa ekstenzijom layer
Ucitavanjem slojeva na ovaj nacin, preko datoteke, dobijemo potpuno stilizi-
rane slojeve na karti. Oznacavanje pojedinog objekta moguce je dobiti prikaz
svih atributa povezanih s njim. Svaki objekt ima identifikacijski atribut (ID)
pomocu kojeg se razlikuje od ostalih objekata u istom sloju.
51
1 PromptSe lect ionResult psr = doc . Editor . GetSe l e c t i on ( ) ;
2 . . .
3 MgSelectionBase s e l e k c i j a = AcMapFeatureEntityService .
GetFeatures ( s s [ 0 ] . GetSubent i t i e s ( ) ) ;
4 . . .
5 MgFeatureReader reader = s e l e k c i j a . GetSe lec tedFeatures (
d e f i n i c i j a s l o j a , ime s l o j a , fa l se ) ;
6 . . .
7 while ( r eader . ReadNext ( ) )
8 reader . GetInt32 ( ”ID” ) ) ;
• PromptSelectionResult je klasa koja instancira objekt ”psr” koji od
korisnika zahtjeva odabiranje objekata na karti
• MgSelectionBase je klasa koja razabire samo jedan objekte iz prethodne
selekcije
• reader je objekt od klase MgFeatureReader kojim ucitavamo objekt
u reader pomocu kojeg mozemo procitati specificni atribut vezan uz
selektirani objekt; prilikom dohvacanja atributa, treba paziti na vrstu
podatka (najcesce metode su GetInt32, GetInt64 i GetString)
Atributne podatke mozemo pokazati i izvan AutoCAD okruzenja tako da
posaljemo upit u bazu i rezultate prikazemo u tablici. Upiti se mogu slati kao
SQL naredbe tj. SELECT naredbe ili zahtjev za izvrsavanje stored procedure-
a.
Primjer upitau obliku SELECT naredbe:
52
1 SqlConnect ion conn = new SqlConnect ion ( scb .
Connect ionStr ing )
2 {
3 conn . Open ( ) ;
4 SqlCommand cmd = new SqlCommand( ”dbo . sp GetTable ”
, conn )
5 {
6 cmd . CommandType = CommandType . StoredProcedure ;
7 cmd . Parameters . Add(new SqlParameter ( ” @table ” ,
imeS lo ja ) ) ;
8 . . .
9 conn . Close ( ) ;
• SqlConnection je klasa koja instancira objekt za spajanje na SQL bazu
te pritom kao argument uzima parametre za spajanje na bazu
• parametri se sastoje od korisnickog imena, lozinke, ime baze i lokacije
posluzitelja
• spajanje na bazu izvrsava se pozivanjem metode Open()
• zavrsetkom rada sa bazom, veza se mora zatvorit pozivanjem naredbe
Close()
• SqlCommand je klasa koja instancira objekta za izvrsavanje naredbi.
Argument konstruktora je ime stored procedure i objekt spajanja (conn)
• posebno se mora naglasiti da li se radi o pozivanju naredbe ili proce-
dure. Prima li procedura argumente, njih cemo dodati uz pomoc klase
SqlParameter
53
Primjer upita u obliku pozivanja stored procedure:
1 . . .
2 s t r i n g cmd UpisUBazu = Str ing . Format ( ”update [ { 0 } ] s e t
[ { 1 } ] = {2} where id = {3}” , t a b l i c a ,
p o l j e E d i t i r a n j e , v r i j e d n o s t P o l j a , id ) ;
3 using (SqlCommand cmd = new SqlCommand( cmd UpisUBazu ,
conn ) )
4 {
5 cmd . ExecuteNonQuery ( ) ;
6 }
7 . . .
8 conn . Close ( ) ;
• cmd UpisUBazu predstavlja naredbu koja ce se proslijediti kao upit u
bazu
• ako upit koji prosljedujemo ne vraca rezultat, kao u primjeru, koristi
se naredba ExecuteNonQuery() za izvrsavanje upita nad bazom
Korisnicima katastra osim pregledavanja podataka moraju biti omogucene
radnje kao sto su dodavanje, modificiranje i brisanje podataka. Dodavanje
se vrsi odabirom lokacije ili lokacija (ovisno o vrsti objekta) na kojim zelimo
dodati objekt.
Primjer dodavanje tockastog objekta:
1 I I n s e r t insertNaredba = conn . CreateCommand(CommandType .
CommandType Insert ) as I I n s e r t ;
2 . . .
54
3 FgfGeometryFactory f a c t o r y = new FgfGeometryFactory ( ) ;
4 pozTocke = f a c t o r y . CreatePositionXY ( tocka .X, tocka .Y) ;
5 I D i r e c t P o s i t i o n poz = I D i r e c t P o s i t i o n . Add( pozTocke ) ;
6 IPo int tocka = f a c t o r y . CreatePoint ( poz ) ;
7 DoubleValue r o t a c i j a F e a t u r e C l a s s = new DoubleValue (
r o t a c i j a ) ;
8 insertNaredba . PropertyValues . Add(new PropertyValue (
at r ibut , r o t a c i j a F e a t u r e C l a s s ) ) ;
9 GeometryValue geometr i j a = new GeometryValue ( f a c t o r y .
GetFgf ( tocka ) ) ;
10 insertNaredba . PropertyValues . Add(new PropertyValue ( ”
geom” , geometr i j a ) ) ;
11 insertNaredba . Execute ( ) ;
• IInsert je klasa pomocu koje vrsimo upisivanje objekta u bazu
• FgfGeometryFactory je klasa vrsi preoblikovanje koordinata objekta u
zapis razumljiv IDirectPosition klasi
• IDirectPosition je klasa pomocu koje se instancira objekt koji sadrzi
koordinate objekta koji zelimo upisati
• ako objekt osim geometrije (koordinate) sadrzi i druge atribute, njih
cemo dodati pomocu konstruktora PropertyValue pazeci pritom na vr-
stu tipa podatka
• dodavanje objekta vrsimo pozivanjem metode Execute nad objektom
IInsert klase
Modificiranje i brisanje objekta zahtijeva poznavanje njegovog identifikacij-
skog broja kako bismo ga mogli izolirati od ostalih objekata u sloju.
55
Primjer brisanja objekta:
1 IDe l e t e deleteNaredba = conn . CreateCommand(CommandType .
CommandType Delete ) as IDe l e t e ;
2 deleteNaredba . S e t F i l t e r ( ” ( ID = 45) ” ) ;
3 deleteNaredba . Execute ( ) ;
• IDelete je klasa pomocu koje brisemo objekte u bazi
• metoda SetFilter izolira specificni objekt pomocu njegovog identifika-
cijskog broja
• metodom Execute izvrsavamo brisanje objekta iz baze
Ponekad se na karti moze naci toliko slojeva da karta postaje nepregledna.
Iskljucivanjem vidljivosti nepotrebnih slojeva povecavamo preglednost karte.
1 MgLayerCol lect ion l a y e r s = map . GetLayers ( ) ;
2 . . .
3 l a y e r . S e t V i s i b l e ( fa l se ) ;
• MgLayerCollection je klasa koja sadrzi skup slojeva
• metoda SetVisible odreduje vidljivost pojedinacnog sloja
Odlucimo li se iz nekog razloga izbrisati slojeve tj. prekinuti veze sa bazom,
mozemo to uciniti na sljedeci nacin:
56
1 MgLayerCol lect ion l a y e r s = map . GetLayers ( ) ;
2 MgLayerBase l a y e r = l a y e r s [ 0 ] ;
3 l a y e r s . Remove( l a y e r ) ;
• metoda Remove() koju pozivamo na objektu layers brise pojedinacni
sloj iz skupa, a kao argument uzima definiciju jednog sloja
Pokretanje svake aplikacije pocinje njegovim ucitavanjem u AutoCAD Map.
Ucitavanje se izvodi pomocu prethodno spomenute naredbe netload. Jed-
nom kad se program ucita u program ne moze se ponovo ucitati za vrijeme
rada aplikacije ako je doslo do promjene u ucitanom programu. Nakon sto je
program ucitan, dijelovi programa se pozivaju upisivanjem nazivom metode
koje imaju atribut izvrsnog potprograma (atribut CommandMethod).
1 [ CommandMethod( ”program” ) ]
2 public void program ( )
3 . . .
4 FormaPrograma . Show ( ) ;
5 . . .
Pozivanjem naredbe ”energo” prikazuje se glavni program, paleta, u sklopu
programa Autodesk Map-a.
57
Slika 21: Izgled aplikacije
4 Zakljucak
Svjedoci smo naglog porasta prostornih informacija koje moramo pohraniti
kako bi sto lakse mogli shvatiti i iskoristiti prostor koji se nalazi oko nas. Poje-
dini GIS sustavi nam omogucuju da na jedno mjesto pohranimo podatke koje
kasnije mozemo lako dodavati, pretrazivati, modificirati i te na njima pro-
voditi analize. Prosirenjem AutoCAD-a GIS funkcionalnostima dobili smo
upotpunjeni sustav sa svim mogucnostima GIS i CAD aplikacije. Aplikacije
su dizajnirane u svrhu zadovoljenja najsireg kruga korisnika kako bi oni mo-
gli sto lakse postici zeljeni rezultat. Nekada implementirane funkcije unutar
gotovih aplikacija nisu dovoljne ili su komplicirane za koristenje te moramo
posezati za alatima za prosirenje. Iako prosirenja gotovih sustava zahtijevaju
dobro poznavanje odredenih programskih jezika i baza podataka, cjelokupan
trud moze uveliko ubrzati i pojednostaviti svakodnevne procese. Implemen-
tiranjem vlastitih programa u AutoCAD Map aplikaciju pojednostaviti cemo
proceduru dobivanja rezultata te pribliziti korisnike aplikaciji.
58
5 Dodaci
1 using System ;
2 using System . C o l l e c t i o n s ;
3 using OSGeo .FDO;
4 using OSGeo .FDO. Connections ;
5 using OSGeo .FDO. Commands ;
6 using OSGeo .FDO. Geometry ;
7 using OSGeo .FDO. C l i e n t S e r v i c e s ;
8 using OSGeo .FDO. Express ion ;
9 using OSGeo .FDO. Commands . Feature ;
10 using Autodesk .AutoCAD. Geometry ;
11 using Autodesk .AutoCAD. EditorInput ;
12 using Autodesk .AutoCAD. A p p l i c a t i o n S e r v i c e s ;
13 using OSGeo . MapGuide ;
14 using Autodesk . Gis .Map. Platform ;
15 using Autodesk . Gis .Map. Platform . Inte rop ;
16
17 namespace NoviEnergo
18 {
19 class J i g L i n i j e : DrawJig
20 {
21 public Point3dCo l l e c t i on ko lekc i jaTocaka = new Point3dCo l l e c t i on
( ) ;
22 private Point3dCo l l e c t i on tempKolekci ja = new Point3dCo l l e c t i on
( ) ;
23 public Point3d pocetnaTocka ;
24 public Point3d krajnjaTocka ;
25
26 public J i g L i n i j e ( Point3d pocTocka ) {
27 this . pocetnaTocka = pocTocka ;
28 this . ko l ekc i jaTocaka . Add( pocTocka ) ;
29 this . krajnjaTocka = pocTocka ;
59
30 }
31 protected o v e r r i d e bool WorldDraw( Autodesk .AutoCAD.
Graph i c s In t e r f a c e . WorldDraw draw ) {
32 tempKolekci ja . Clear ( ) ;
33 f o r each ( Point3d p in ko lekc i jaTocaka )
34 {
35 tempKolekci ja . Add(p) ;
36 }
37 tempKolekci ja . Add( krajnjaTocka ) ;
38 try
39 {
40 draw . Geometry . P o l y l i n e ( tempKolekcija , Vector3d . ZAxis , new IntPtr
(1 ) ) ;
41 }
42 catch ( System . Exception )
43 {
44 return fa l se ;
45 }
46 return true ;
47 }
48
49 protected o v e r r i d e SamplerStatus Sampler ( JigPrompts prompts )
50 {
51 JigPromptPointOptions j igOpt = new JigPromptPointOptions ( ”\
nOdaberi drugu tocku : ” ) ;
52 PromptPointResult r e s u l t = prompts . AcquirePoint ( j igOpt ) ;
53 i f ( r e s u l t . Status != PromptStatus .OK)
54 return SamplerStatus . Cancel ;
55 i f ( r e s u l t . Value . IsEqualTo ( ko l ekc i jaTocaka [ ko l ekc i jaTocaka . Count
− 1 ] ) )
56 return SamplerStatus . NoChange ;
57 krajnjaTocka = r e s u l t . Value ;
58 return SamplerStatus .OK;
60
59 }
60 }
61
62 class Manipulac i jaFeatureClassom
63 {
64 public enum Layer i
65 {
66 dubine ,
67 fasadni2 ,
68 kape ,
69 kond lonac ,
70 l u l e ,
71 redk se t ,
72 sed la ,
73 spo jn i c e ,
74 t komad ,
75 vodovi ,
76 za s t i tna ,
77 zasun
78 }
79 public enum T Komad Simboli : int{
80 T Simbol 1 = 1 ,
81 T Simbol 2 = 2 ,
82 T Simbol 3 = 3 ,
83 T Simbol 12 = 12 ,
84 T Simbol 13 = 13 ,
85 T Simbol 23 = 23 ,
86 T Simbol 4 = 4
87 }
88
89 public Hashtable S e l e k c i j a F e a t u r e C l a s s ( Layer i l a y e r ) {
90 Hashtable a t r i b u t i = new Hashtable ( ) ;
61
91 Document doc = Autodesk .AutoCAD. A p p l i c a t i o n S e r v i c e s . App l i ca t ion .
DocumentManager . MdiActiveDocument ;
92 MgSelectionBase s e l e k c i j a ;
93 MgFeatureService f e a t u r e s e r v i c e ;
94 s t r i n g schema ime ;
95 s t r i n g c l a s s i m e ;
96 MgClassDef in i t ion d e f i n i c i j a k l a s e ;
97 MgFeatureReader reader ;
98 PromptSelect ionOptions pso = new PromptSelect ionOptions ( ) ;
99 pso . S ingleOnly = true ;
100 pso . S ing l eP ickInSpace = true ;
101 PromptSe lect ionResult psr = doc . Editor . GetSe l e c t i on ( ) ;
102 i f ( psr . Status != PromptStatus .OK)
103 {
104 doc . Editor . WriteMessage ( ”\nPrekinuta a k c i j a ” ) ;
105 return n u l l ;
106 }
107 S e l e c t i o n S e t s s = psr . Value ;
108 i f ( AcMapFeatureEntityService . GetEntityType ( s s [ 0 ] . ObjectId ) ==
EntityType . BulkEntity )
109 {
110 s e l e k c i j a = AcMapFeatureEntityService . GetFeatures ( s s [ 0 ] .
GetSubent i t i e s ( ) ) ;
111 MgLayerBase l e r i = s e l e k c i j a . GetLayers ( ) [ 0 ] ;
112 f e a t u r e s e r v i c e = AcMapServiceFactory . GetServ ice ( MgServiceType .
FeatureServ i c e ) as MgFeatureService ;
113 schema ime = ”dbo” ;
114 c l a s s i m e = l e r i . FeatureClassName ;
115 d e f i n i c i j a k l a s e = f e a t u r e s e r v i c e . GetC la s sDe f in i t i on (new
MgResource Ident i f i e r ( l e r i . FeatureSourceId ) , schema ime ,
c l a s s i m e ) ;
116 reader = s e l e k c i j a . GetSe l ec tedFeatures ( l e r i , c l a s s ime , fa l se ) ;
117 while ( reader . ReadNext ( ) )
62
118 i f ( l a y e r . ToString ( ) . Equals ( ” f a s a d n i ” ) | | l a y e r . ToString ( ) .
Equals ( ” l u l e ” ) | | l a y e r . ToString ( ) . Equals ( ” kond lonac ” ) | |
l a y e r . ToString ( ) . Equals ( ” z a s t i t n a ” ) )
119 a t r i b u t i . Add( ”ID” , reader . GetInt32 ( ”ID” ) ) ;
120 else
121 i f ( l a y e r . ToString ( ) . Equals ( ” r e d k s e t ” ) | | l a y e r . ToString ( ) .
Equals ( ”kape” ) | | l a y e r . ToString ( ) . Equals ( ” s ed l a ” ) | | l a y e r .
ToString ( ) . Equals ( ” s p o j n i c e ” ) | | l a y e r . ToString ( ) . Equals ( ”
zasun ” ) )
122 {
123 a t r i b u t i . Add( ”ID” , reader . GetInt32 ( ”ID” ) ) ;
124 i f ( l a y e r . ToString ( ) . Equals ( ”kape” ) | | l a y e r . ToString ( ) . Equals ( ”
zasun ” ) )
125 a t r i b u t i . Add( ”ROTATION” , reader . GetDouble ( ”ROTATION” ) ) ;
126 else
127 a t r i b u t i . Add( ” ro t ” , r eader . GetDouble ( ” ro t ” ) ) ;
128 }
129 else
130 i f ( l a y e r . ToString ( ) . Equals ( ” vodovi ” ) )
131 {
132 a t r i b u t i . Add( ”ID” , reader . GetInt32 ( ”ID” ) ) ;
133 a t r i b u t i . Add( ” promjer ” , r eader . GetInt32 ( ” promjer ” ) ) ;
134 }
135 else
136 i f ( l a y e r . ToString ( ) . Equals ( ” dubine ” ) )
137 {
138 a t r i b u t i . Add( ”ID” , reader . GetInt32 ( ”ID” ) ) ;
139 a t r i b u t i . Add( ”DUBINE” , reader . GetDouble ( ”DUBINE” ) ) ;
140 a t r i b u t i . Add( ”ROTATION” , reader . GetDouble ( ”ROTATION” ) ) ;
141 }
142 else
143 i f ( l a y e r . ToString ( ) . Equals ( ”t komad” ) )
144 {
63
145 a t r i b u t i . Add( ”ID” , reader . GetInt32 ( ”ID” ) ) ;
146 a t r i b u t i . Add( ” ro t ” , r eader . GetDouble ( ” ro t ” ) ) ;
147 a t r i b u t i . Add( ” s imbol ” , r eader . GetInt64 ( ” s imbol ” ) ) ;
148 }
149 reader . Close ( ) ;
150 return a t r i b u t i ;
151 }
152 else
153 {
154 Autodesk .AutoCAD. A p p l i c a t i o n S e r v i c e s . App l i ca t ion . ShowAlertDialog
( ” Kr iv i ob jekt ” ) ;
155 return n u l l ;
156 }}
157
158 /// <summary>
159 /// Metoda za dodavanje fa sadn ih ormarica , l u l a ,
k onden zac i j s k i h lonaca i z a s t i t n i h l i n i j a
160 /// </summary>
161 /// <param name=”geom”>Geometrija</param>
162 public void DodavanjeFeatureClass ( Layer i f e a t u r e C l a s s ) {
163 s t r i n g featureClassName = ”dbo : ” + f e a t u r e C l a s s ;
164 I I n s e r t insertNaredba = conn . CreateCommand(CommandType .
CommandType Insert ) as I I n s e r t ;
165 insertNaredba . SetFeatureClassName ( featureClassName ) ;
166 FgfGeometryFactory f a c t o r y = new FgfGeometryFactory ( ) ;
167 i f ( f e a t u r e C l a s s . ToString ( ) . Equals ( ” z a s t i t n a ” ) )
168 {
169 I L i ne S t r i n g l i n i j a = f a c t o r y . CreateL ineStr ing ( pozKo lekc i j a ( r e f
f ac to ry , fa l se ) ) ;
170 GeometryValue geomValue = new GeometryValue ( f a c t o r y . GetFgf (
l i n i j a ) ) ;
171 insertNaredba . PropertyValues . Add(new PropertyValue ( ”geom” ,
geomValue ) ) ;
64
172 insertNaredba . Execute ( ) ;
173 }
174 else
175 {
176 I D i r e c t P o s i t i o n poz = pozKolekc i j a ( r e f f ac to ry , true ) [ 0 ] ;
177 IPoint tocka = f a c t o r y . CreatePoint ( poz ) ;
178 GeometryValue geomValue = new GeometryValue ( f a c t o r y . GetFgf ( tocka
) ) ;
179 insertNaredba . PropertyValues . Add(new PropertyValue ( ”geom” ,
geomValue ) ) ;
180 insertNaredba . Execute ( ) ;
181 }
182 RefreshLayer ( f e a t u r e C l a s s . ToString ( ) ) ;
183 }
184
185 /// <summary>
186 /// Metoda za e d i t i r a n j e fa sadn ih ormarica , l u l a ,
k onden zac i j s k i h lonaca i z a s t i t n i h l i n i j a
187 /// </summary>
188 /// <param name=”f ea t u r eC l a s s”></param>
189 /// <param name=”geom”></param>
190 public void Ed i t i r an j eFea tu r eC la s s ( Layer i f e a tu r eC la s s , s t r i n g
ID) {
191 s t r i n g f i l t e r = St r ing . Format ( ” ( ID = {0}) ” , ID) ;
192 s t r i n g featureClassName = ”dbo : ” + f e a t u r e C l a s s ;
193 IUpdate updateNaredba = conn . CreateCommand(CommandType .
CommandType Update ) as IUpdate ;
194 updateNaredba . SetFeatureClassName ( featureClassName ) ;
195 updateNaredba . S e t F i l t e r ( f i l t e r ) ;
196 FgfGeometryFactory f a c t o r y = new FgfGeometryFactory ( ) ;
197 i f ( f e a t u r e C l a s s . ToString ( ) . Equals ( ” z a s t i t n a ” ) )
198 {
65
199 I L i ne S t r i n g l i n i j a = f a c t o r y . CreateL ineStr ing ( pozKo lekc i j a ( r e f
f ac to ry , fa l se ) ) ;
200 GeometryValue geomValue = new GeometryValue ( f a c t o r y . GetFgf (
l i n i j a ) ) ;
201 updateNaredba . PropertyValues . Add(new PropertyValue ( ”geom” ,
geomValue ) ) ;
202 updateNaredba . Execute ( ) ;
203 }
204 else
205 {
206 I D i r e c t P o s i t i o n poz = pozKolekc i j a ( r e f f ac to ry , true ) [ 0 ] ;
207 IPoint tocka = f a c t o r y . CreatePoint ( poz ) ;
208 GeometryValue geomValue = new GeometryValue ( f a c t o r y . GetFgf ( tocka
) ) ;
209 updateNaredba . PropertyValues . Add(new PropertyValue ( ”geom” ,
geomValue ) ) ;
210
211 updateNaredba . Execute ( ) ;
212 }
213 RefreshLayer ( f e a t u r e C l a s s . ToString ( ) ) ;
214 }
215
216 /// <summary>
217 /// Br i san je f ea ture−a
218 /// </summary>
219 /// <param name=”ID”></param>
220 /// <param name=”f ea t u r eC l a s s”></param>
221 public void Br i san j eFeatureC la s s ( Layer i f e a tu r eC la s s , s t r i n g ID)
{
222 s t r i n g S f ea tu r eC la s s = f e a t u r e C l a s s . ToString ( ) ;
223 i f ( f e a t u r e C l a s s . Equals ( ”t komad” ) ) S f ea tu r eC la s s = ”t−komad” ;
224 s t r i n g featureClassName = ”dbo : ” + S f ea tu r eC la s s ;
225 s t r i n g f i l t e r = St r ing . Format ( ” ( ID = {0}) ” , ID) ;
66
226 i f ( f e a t u r e C l a s s . Equals ( Layer i . f a sadn i2 ) )
227 f i l t e r = St r ing . Format ( ” ( i d f o = {0}) ” , ID) ;
228 IDe l e t e deleteNaredba = conn . CreateCommand(CommandType .
CommandType Delete ) as IDe l e t e ;
229 deleteNaredba . SetFeatureClassName ( featureClassName ) ;
230 deleteNaredba . S e t F i l t e r ( f i l t e r ) ;
231 deleteNaredba . Execute ( ) ;
232 RefreshLayer ( S f ea tu r eC la s s ) ;
233 }
234
235 private D i r e c t P o s i t i o n C o l l e c t i o n pozKolekc i j a ( r e f
FgfGeometryFactory fac tory , bool tockas t iOb jek t ) {
236 D i r e c t P o s i t i o n C o l l e c t i o n pozKolekc i j a = new
D i r e c t P o s i t i o n C o l l e c t i o n ( ) ;
237 I D i r e c t P o s i t i o n pozTocke ;
238 Point3d tocka = new Point3d ( ) ;
239 i f ( tockas t iOb j ek t )
240 {
241 PromptPointOptions promptaZaLokFeatureObjekta = new
PromptPointOptions ( ”\nOdaberi l o k a c i j u : ” ) ;
242 PromptPointResult rezPromptaZaLokFeatureObjekta = ed . GetPoint (
promptaZaLokFeatureObjekta ) ;
243 i f ( rezPromptaZaLokFeatureObjekta . Status != PromptStatus .OK)
244 return pozKolekc i j a ;
245 tocka = rezPromptaZaLokFeatureObjekta . Value ;
246 pozTocke = f a c t o r y . CreatePositionXY ( tocka .X, tocka .Y) ;
247 pozKo lekc i j a . Add( pozTocke ) ;
248 return pozKolekc i j a ;
249 }
250 else
251 {
252 PromptPointOptions promptPoint = new PromptPointOptions ( ”Odaberi
tocku : ” ) ;
67
253 PromptPointResult rezPrompta = ed . GetPoint ( promptPoint ) ;
254 i f ( rezPrompta . Status != PromptStatus .OK)
255 return pozKolekc i j a ;
256 pozKo lekc i j a . Add( f a c t o r y . CreatePositionXY ( rezPrompta . Value .X,
rezPrompta . Value .Y) ) ;
257 J i g L i n i j e j i g L i n i j e = new J i g L i n i j e ( rezPrompta . Value ) ;
258 while ( true )
259 {
260 PromptPointResult r e s = ed . Drag ( j i g L i n i j e ) as PromptPointResult ;
261 i f ( r e s . Status != PromptStatus .OK)
262 break ;
263 j i g L i n i j e . ko l ekc i jaTocaka . Add( r e s . Value ) ;
264 tocka = r e s . Value ;
265 pozTocke = f a c t o r y . CreatePositionXY ( tocka .X, tocka .Y) ;
266 pozKo lekc i j a . Add( pozTocke ) ;
267 }
268 return pozKolekc i j a ;
269 }}
270
271 public stat ic void RefreshLayer ( s t r i n g l e r )
272 {
273 Document doc = Appl i ca t ion . DocumentManager . MdiActiveDocument ;
274 doc . Editor . Regen ( ) ;
275 using ( DocumentLock docLock = doc . LockDocument ( ) ) {
276 AcMapMap map = AcMapMap. GetCurrentMap ( ) ;
277 MgLayerCol lect ion l a y e r s = map . GetLayers ( ) ;
278 fo r each ( MgLayerBase l a y e r in l a y e r s ) {
279 i f ( l a y e r .Name . Equals ( l e r ) )
280 {
281 l a y e r . ForceRefresh ( ) ;
282 break ;
283 }}}}}}
68
Literatura
Autodesk. Autocad map 3d user guide.
http://docs.autodesk.com/MAP/2011/ENU/AutoCADap3D 2011 HTML
Help/indexUsersGuideHTML.html?url=./filesUsersGuideHTML/
WS1a9193826455f5ff5f7e8f111d4851871-5a8d.htm,topicNumber=
UsersGuideHTMLd0e59670, 8 2010a.
Autodesk. Objectarc. http://usa.autodesk.com/adsk/servlet/index?site
ID=123112&id=773204, 8 2010b.
Autodesk. Visual lisp. http://usa.autodesk.com/adsk/servlet/index?site
ID=123112&id=770237, 8 2010c.
Blog. Data model. http://masumbillah.tripod.com/thesis/013.htm, 8 2010a.
Blog. Cad and gis. http://cadngis.blogspot.com/2010/07/making-design-
data-gis-ready.html, 8 2010b.
Omnisdata Ltd. Gis cloud. http://www.giscloud.com/login, 8 2010a.
Omnisdata Ltd. Gis cloud. http://www.giscloud.com/about/, 8 2010b.
Microsoft. Sql stored procedures. http://msdn.microsoft.com/en-
us/library/aa174792(SQL.80).aspx, 8 2010.
OSGeo. Osgeo fdo. http://fdo.osgeo.org/, 8 2010.
Recro. Autocad map 3d. http://www.recro.hr/Hrvatski/Principali/
Autodesk/Pages/AutoCADMap3D.aspx, 8 2010.
Wikipedia. Api. http://en.wikipedia.org/wiki/Application programming interface,
8 2010a.
69
Wikipedia. Client - server model. http://en.wikipedia.org/wiki/Client-
server model, 8 2010b.
Wikipedia. Cloud computing. http://simple.wikipedia.org/wiki/Cloud computing,
8 2010c.
Wikipedia. .net. http://en.wikipedia.org/wiki/.NET Framework, 8 2010d.
Wikipedia. Ekstranet. http://hr.wikipedia.org/wiki/Ekstranet, 8 2010e.
Wikipedia. List of gis software. http://en.wikipedia.org/wiki/List of geographic
information systems software, 8 2010f.
Wikipedia. Gis applications. http://en.wikipedia.org/wiki/GIS software, 8
2010g.
Wikipedia. Lisp. http://en.wikipedia.org/wiki/Lisp (programming
language), 8 2010h.
Wikipedia. Nosql. http://en.wikipedia.org/wiki/NoSQL, 8 2010i.
Wikipedia. Spatial database. http://en.wikipedia.org/wiki/Spatial database,
8 2010j.
Wikipedia. Stored procedure. http://en.wikipedia.org/wiki/Stored procedure,
8 2010k.
Wikipedia. Virtual private network. http://en.wikipedia.org/wiki/Virtual
private network, 8 2010l.
Wikipedia. Visual studio. http://en.wikipedia.org/wiki/Visual Studio, 8
2010m.
70
Wikipedia. Web mapping. http://en.wikipedia.org/wiki/Web mapping, 8
2010n.
Wikipedia. Xml. http://en.wikipedia.org/wiki/XML, 8 2010o.
71