Pogosta vprašanja

Iz SDMS
Redakcija dne 10:00, 1. maj 2006 od Janez Trtnik (pogovor | prispevki)
(prim) ← Starejša redakcija | poglejte trenutno redakcijo (prim) | Novejša redakcija → (prim)
Jump to navigationJump to search

Vsebina

Kako poravnavam vrednosti iz dveh različnih polj levo in desno ?

Potrebujete dve temi iz iste podatkovne plasti. Prva izpisuje prvo polje, poravnava levo, druga izpisuje drugo polje, poravnava desno.

Želim, da je napis na poliliniji obrnjen v smeri polilinije. Kako ?

Za pravilno izvedbo spodnje funkcije, mora imeti polilinija vnesen centroid. Za ta centroid se izračuna projekcijska točka centroida na polilinijo in kot je smer stranice, na kateri leži projekcijska točka. Funkcija izvede tudi zasuk kota, tako da je napis vedno obrnjen navzgor.

V nek modul dodamo funkcijo

Function GetAngleFromPline (R As TRecord) As Float
Dim P As TPointArray, I As Long, O As Float
Result = 0
If R.TopologyType = ttPolyline Then
  P = R.PointArray
  P.ProjectionPoint (R.y, R.x, I, O)
  If I < P.Count - 1 Then
    Result = RadToDeg (Angle (P.y(I+1)-P.y(I), P.x(I+1)-P.x(I)))
  Else
    Result = RadToDeg (Angle (P.y(I)-P.y(I-1), P.x(I)-P.x(I-1)))
  EndIf
  P.Destroy
  // Zasuk kota, tako da je napis vedno obrnjen navzgor
  If Result >= 90 Then
    If Result <= 270 Then
      Result = Result + 180
    EndIF
  EndIF
EndIf
EndFunction

V temi Napis, Lastnost Kot, dodamo pod Zahtevnejše naslednji zapis: GetAngleFromPline (curRec)

Kako izvedem oštevilčevanje strani v poročilu ?

V poročilo dodate kontrolo tipa Formula. Nato v rubriko formula vpišite:

  • Za tekočo stran - IntToStr (CurRep.PageCurrent)
  • Za število vseh strani - IntToStr (CurRep.PageCount)

Primer: "Stran: " + IntToStr (CurRep.PageCurrent) + ' / ' + IntToStr (CurRep.PageCount)

Kako filtriraš po dveh poljih v večkratnem nizu podatkov?

Ker pogoj ([a1].AsLines Like 'inz') And ([a2].AsLines Like 'varno*') ne zagotavlja, da sta podatka v istem nizu, lahko to rešimo na naslednji način.

V nek modul dodamo proceduro

Function IsInMultipleDaS (AsLin1, AsLin2, Cond1, Cond2 As String) As Boolean
Dim Sl1, Sl2 As TStringList
Dim I As Long
Sl1 = CreateStringList
Sl2 = CreateStringList
Sl1.Text = AsLin1
Sl2.Text = AsLin2
Result = False
If Sl1.Count = Sl2.Count Then
  For I = 0 To Sl1.Count - 1
    If Sl1.Strings (I) Like Cond1 Then
      If Sl2.Strings (I) Like Cond2 Then
        Result = True
        Break
      EndIf
    EndIf
  Next
EndIf
Sl1.Destroy
Sl2.Destroy
EndFunction

V filtru pa kličemo to proceduro.

IsInMultipleDaS ([a1].AsLines, [a2].AsLines, 'inz','varno*')

Filter po končanem filtriranju NE odpre Maske. Zakaj?

Ni vedno obvezno da se rezultat filtra demonstrira v Maski. Npr: Če v neko temo v rubriko Pogoj zapišete Filtered, potem se bo po končanem filtru in osvežitvi ekrana izrisali samo filtrirani zapisi.

Rešitev v tem primeru: uporabljate funkcije iz menija Analiza, kjer se po končanem filtriranju še odpre maska s seznamom filtriranih podatkov, ali pa po filtru, nad temo kliknite na desno tipko na miški in izberite Maska

Kje se briše kakšna od nastavitev za filter, masko,... ?

V editorju podatkovne plasti, v posamezni rubriki podobjekta (Filter, sort, maska, poročilo, uvoz, izvoz). Na levi strani je seznam vseh prednastavljenih nastavitev. Označite in brišite.

Ali je možno določiti pogoj npr. 200m levo od polilinije (enostranski buffer) ?

Ne, ker je v GIS-u oziroma v realnem svetu leva stran relativna, pač glede na izhodišče in smer gledanja. Lahko pa si s pomočjo urejevalnika geometrije, izdelate ustrezen poligon (buffer), ki vam služi kot omejitev prostorske lokacije.

Kako spreminjam vrstni red izrisa na karto ?

Teme se izrisujejo po vrstnem redu, tako kot so v tematiki postavljene.Če temo 'primete in držite' z miško, jo lahko premikate po listi. Na ta način spreminjate vrstni red izrisa tem.

Kako spreminjam velikost pisave glede na trenutno merilo ?

Velikost pisave je možno spreminjati samo za TrueType pisave. Enota velikosti je v cm. Za Skalarno spreminjanje velikosti pisave uporabljajte funkcijo AtScale (Merilo, velikost)

Primer: AtScale (1000,0.5)- pomeni da bo v merilu 1:1000 velikost pisave 0.5 cm

Topološki editor: Zakaj se poligon selektira le, ko klinkeš na rob (mejo oz črto) ?

Pri vstopu v Topološki editor se vse entitete (grafične) razbijejo na polilinije in točke. Polilinije predstavljajo vektorje, točke pa centroide s podatki in vse dvojne linije, se pobrišejo, torej topološki editor je klasičen (pravilen) način editiranja topologije. Ko se zapušča topološki editor, se na podlagi centroidov in vektorjev, ki so okoli centroida, kreira poligon. Vse entitete, ki niso bile uporabljene pri kreiranju poligonov (BUILD), so pozabljene, zato je zelo pomembno da se predhodno kontrolirajo topološke napake. Za detajle glej Topologija na splošno.

Analize, poišči največjo vrednost v poligonski plasti: Cur.RecY ali X vrne napako !

Napaka je v sintaksi. Pravilno CurRec.Y in CurRec.X

  • Če dvokliknete na CurRec.Y ali CurRec.X, se ime samo prenese v SQL polje
  • CurRec.Y in CurRec.X predstavljata 'centroid' za dani zapis
  • CurRec.MinY pa najmanjši Y točke na poliliniji/poligonu
  • CurRec.MinX pa najmanjši X točke na poliliniji/poligonu
  • CurRec.MinZ pa najmanjši Z točke na poliliniji/poligonu
  • ....
  • ....

Vendar, ne glede na to se še vedno ne da poiskati največje ali najmanjše vrednosti za katerikoli CurRec. v Filtru Lahko pa se to stori na naslednji način:

  • V Urejevalniku za Plast dodajte polje Npr CentroidY, tipa Številka, Formula CurRec.Y
  • V aplikaciji izvedite filter, nato v Maski izvedite sort po tem polju in prvi je najmanjši, zadnji največji, ali obratno, odvisno od načina sortiranja.
  • Tako za vsa CurRec. polja.

Ali lahko ponovno začnem z risanjem (nadaljevanjem risanja) istega poligona?

Opis problema: Rišem zelo velik poligon. Prekinem risanje in ga v bistvu zaključim. Ali lahko ponovno začnem z risanjem nadaljevanjem risanja) istega poligona?

Ne. Lahko pa se:

  • a. naknadno dodaja posamezne točke v poligon, ali
  • b. naredi še en (ali več) poligon, ki natanko meji na prvega, in se jih nato združi (izbrana) v enega z gumbom MRG, ali pa
  • c. dela v topološkem načinu Topologija na splošno.

Kako iščem (filtriram, analiziram,...) po polju tipa datum?

Opis problema: V podatkovni plasti se nahaja polje tipa datum (Datum/Čas), v katerega so bili vneseni datumi. Želimo poiskati vse zapise, ki so bili zapisani od določenega datuma dalje.

Za pravilno izvajanje razmerij po datumih se mora datum v filter funkciji opredeliti kot številčna vrednost, in datum je potrebno pisati v obliki kot je opredeljeno v področnih nastavitvah (Regional Settings). Prav tako morate pri vnosu datuma vnašati separator, ki je naveden v področnih nastavitvah. Primer:

[Datum popisa].AsNumber > StrToDate ("16.04.98")

Vseeno je ali napišete leto z dvema mestoma ali štirimi (98 ali 1998). Prav tako lahko pri samem vnosu vtipkate samo dan, separator in mesec (16.4), leto pa se bo samodejno dodalo, ko boste zapustili polje.

Kako najhitreje popravim/spremenim vektorski del poligonov (npr. meje občin)?

Opis problema: V obstoječi bazi podatkov (npr. Meje občin) bi rad spremenil nekaj mej med občinami.

Za hitro in enostavno urejanje poligonske strukture uporabljamo procedure modula Topološko urejanje, kjer si določite del ali celotno bazo za urejanje. Sistem vam poligonsko strukturo razbije na polilinije in točke, ki jih lahko popravljate/spreminjate/brišete, z GEDIT ([Ime plasti].GEDIT) Za detajle glej (Urejanje vektorskih podatkov). Po končanem editiranju nazaj zgradite poligonsko strukturo, z novimi podatki. Za detajle glej (Topologija na splošno).

Kako obstoječi bazi podatkov dodam nove podatke?

Opis problema: imate struktuirane podatke v ASCII obliki, ki se nanašajo na posamezna naselja. Identifikator sta šifra občine in šifra naselja. Podatki imajo naslednjo obliko - ŠifraObčine;ŠifraNaselja;DATA1;DATA2;DATA3

Postopek dela: Za obstoječo bazo naselij izvedete Podvoji v raziskovalcu (Raziskovalec), brišete odvečna polja (in s tem podatke), dodate nova polja (DATA1, DATA2 in DATA3) glej (Podatkovne plasti). Tako dobimo novo plast, ki jo imenujmo npr. NEWDATA. V aplikaciji izvedete nad to plastjo (NEWDATA) import podatkov (glej Uvoz), tako da za polja ŠifraObčine in ŠifraNaselje vključite opcijo Povezava - Da. Procedura bo za vsak ASCII zapis (record) na podlagi podatka ŠifraObčine in ŠifraNaselja preverila ali ima enak zapis v bazi NEWDATA, in če je ta zapis enkraten. Če so ti pogoji izpolnjeni se uvoženi podatki dodajo obstoječi bazi NEWDATA.

Kako izrisujem na ekran dve ali več vrednosti?

Enostavno, tako da 'seštevate' polja med sabo ali pišete vsako polje v svojo vrstico z ukazom Line.

Primer 1:

  • [Ime Obcine] + " - " + [Sifra obcine] - nam bo izpisovalo npr Ajdovščina - 1.

Primer 2:

  • [Ime Obcine] + Line + [Sifra obcine] - nam bo izpisovalo prvo vrstico Ajdovščina, v drugo 1.

Opomba: Rezultat 'seštevanja' izpisa je vedno besedilo, tako da mora biti [Sifra obcine].AsString, in ne [Sifra obcine].AsNumber

Kako si kreiram dvojnik baze podatkov?

V raziskovalcu, v objektu Podatkovne plasti, označite želeno podatkovno plast (layer) in po kliku na desno tipko na miški izberite opcijo Podvoji. Kreirala se vam bo enaka struktura z vsemi podatki. OPOZORILO: Ker v sistemu ni dovoljeno podvajanje dolgih in kratkih imen (Preveri napake), morate spremenite ime in drugo ime nove ali stare baze podatkov, kar storite tako, da po kliku na desno tipko na miški izberete opcijo Lastnosti.

Kako poiščem dvojnike v bazi podatkov?

Uporabite proceduro FindDuplicates (Layer), ki vam poišče podvojene zapise v celoti ali po izbranih poljih. Dvojnike vam procedura zapiše v dialog, iz katerega jih lahko odstranite.

Kako pridobim podatke v dialogu iz drugih plasti (npr: Ime občine)?

V dialog (za kreiranje dialoga glej Maska) dodajte gumb in v lastnost Ukaz zapišite proceduro GetFromLayer z naslednjo sintakso:

Dim L as Tlayer
L = CurLyr
GetFromLayer (L, "IMEOBC", [NOBC], "OB_IME")
  • L - Tekoči layer - konstanta
  • "IMEOBC" - ime ali drugo ime polja v katerega naj se zapiše dobljena vrednost
  • [NOBC] - Ime plasti, v kateri naj se išče podatke
  • "OB_IME" - Ime polja v plasti [NOBC], iz katerega se bo prevzelo podatek

Procedura išče podatke na podlagi dvoklika centroida trenutnega zapisa, kar pomeni, da če išče podatke v poligonu, ki se odziva na dvoklik, iz točkovne plasti, pa podatek, ki je na tej lokaciji in se odziva na dvoklik. Pred izvedbo te funkcije morate imeti v maski vnesen podatek o centroidu. Če procedura najde več kot en podatek, potem morate ustrezen podatek izbrati iz seznama.

Kako brišem podatkovno plast?

V raziskovalcu markirajte želeno plast, pritisnite tipko Briši ali po kliku na desno tipko na miški izberite Briši. Če plast vsebuje podatke, izbirate med naslednjimi možnostmi:

  • Briši - plast s podatki
  • Briši - plast brez podatkov
  • Briši - samo podatke

OPOZORILO: Po izvedbi brisanja ni možno povrniti zbrisane elemente.

Za detajle glej (Brisanje podatkovne plasti).

Kako prepišem del podatkov v novo podatkovno plast?

Uporabite proceduro MakeNewLayer, ki vam filtrirane podatke zapiše v novo podatkovno plast. Za detajle glej EPRESS aplikacija - Zapiši v novo plast.

Kako grafično prikažem filtrirane podatke?

Filtrirane podatke lahko grafično ločite od ostalih z lastnostjo Filtered. Primer: Tema: Simbol, lastnost: Barva

If Filtered Then Result = Red Else Result = Green EndIF

Kaj je narobe v opredelitvi Result = Transparent?

Nastavitev pogojnega izrisa npr.:

  • NAROBE:
Select Case [Vrednost Polja].AsNumber
  Case 1 Result = Transparent
  CaseElse Result = Opaque
EndSelect
  • PRAVILNO:
Select Case [Vrednost Polja].AsNumber
  Case 1 Result = TMTransparent
  CaseElse Result = TMOpaque
EndSelect

Obrazložitev:TMTransparent in TMOpaque sta konstantne variable za opredelitev načina izrisa, tako kot je konstantna variable Red za rdečo barvo. Več o konstantnih spremenljivkah glej SDMS.HLP - Constants.

Kako sumiram podatke znotraj poligonov?

Uporabite proceduro SumData, ki vam sešteva številčna polja v opredeljeni podatkovni plasti znotraj izbrane poligonske podatkovni plasti po posameznih poligonih. Rezultat je nova podatkovna plast sumarnikov in poligonov.

Kako si konstruiram Grid?

Gridno mrežo si lahko konstruirate s proceduro MakeGridLayer, na podlagi točkovne baze podatkov (npr Gospodinjstev). Procedura vam sešteva vsa številčna polja znotraj predhodno opredeljenega gridnega polja, in vam kreira nov layer.

Kako dodam novo entiteto (napis, simbol,...) da se bo izrisala na ekran?

V aplikaciji v Tematiki (desna stran), pritisnite desno tipko na miški in izberite Dodaj temo. Za detajle glej Tematika.

Če pa želite v obstoječo tematiko dodati teme iz druge tematike, potem pritisnite desno tipko na miški in izberite Dodaj tematiko. Iz seznama izberite ustrezno tematiko in iz seznama tem v tematiki ustrezno (eno, več ali vse) temo.

Kako izrišem celoten objekt (npr. meja) občine v Poročilu?

V kontrolo Ob izrisu, za karto vpišite naslednjo proceduro

Border = True
BorderColor = Black
Window (CurRec.MinY-100, CurRec.MinX-100, CurRec.MaxY+100, CurRec.MaxX+100)

Kako zapišem vsebino CD-ja z rastri, zapisanega na GURS-u?

Za samodejni zapis rastrskih kart iz GURS - CD-ja, potrebujete naslednje: Mapo Plasti Rastri GURS, Tabele za rastre in Modul Rastri, s proceduro UvozRastrovGURS. Modul mora biti definiran v Ob zagonu polju v aplikaciji. Vstavite CD v CD-ROM in v aplikacijo dodajte tematiko Rastri GURS, nato

  • Poženite proceduro SetGursRootPath - ki vam nastavi izhodiščni direktorij za GURS skenograme. To proceduro izvedete samo enkrat, da nastavite globalno začetno pot do skenogramov, oziroma vsakič, ko se ta pot spremeni.
  • Poženite proceduro UvozRastrovGURS: Procedura vam po celotnem CD-ju poišče vse rastre in jih zapiše v ustrezen layer.

Za uvoz posameznega rastra, po uporabite proceduro RasImp

Za uvoz TIF skenogramov, ki imajo TFW spremljajoče datoteke uporabite proceduro UvozRastrovTifTfw

Lahko pa tudi v aplikaciji v GEditu (Urejanje vektorskih podatkov) vnesete grafično entiteto Raster in definirate Name (ime rastra).

Za tipe rastrov glej Strukture rasterskih formatov.

Kako spremenim barvo ozadja?

Vsakič, ko odprete določeno aplikacijo, je konstantna barva ozadja bela. Če to želite spremeniti lahko to naredite na tri načine.

  • 1. uporabite ukaz ViewEdit, (Nastavitve Ekrana) v aplikaciji, kjer lahko spreminjate barvo ozadja, grid in okvir. Lahko pa uporabite tudi naslednjo proceduro (Oza3dje)
Dim C As Long
C = Red
If InputColor ("Izberi barvo ozadja!", C) Then
 BackgroundColor = C
 Redraw
EndIf
  • 2. Če želite da se vam pri odprtju aplikacije ozadje obarva v želeni barvi (npr. Črni), potem v Ob Zagonu polje v editorju aplikacije (glej Aplikacije) zapišete BackGroundColor = Black
  • 3. Če želite da je barva ozadja enaka pri vstopu v aplikacijo, kot barva ozadja, ko ste aplikacijo nazadnje zapustili, potem v (Aplikacije) v Ob Zagonu polju, kličite AutoSaveScreen modul ModuleList.Add ([AutoSaveScreen]).

Ali ste vedeli, da lahko pri grafičnih izrisih kombinirate različne baze podatkov med seboj!

Primer: Zanima vas število prebivalcev v krogu 1 km pri Poslovni dejavnosti Gostinstvo. V temi tipa Zapis za plast Poslovni register nastavite naslednje vrednosti

  • If: [Panoga] = 'GOSTINSTVO'
  • Besedilo: FloatToStr (SumRecCircle (CurRec, [GOSP97], 'Število prebivalcev', "[Sifra obcine] = 99", 1000))

Funkcija SumRecCircle sešteva iz baze Gospodinstev polje Število prebivalcev s prostorsko omejitvijo kroga z radijem 1000 m, če je panoga Gostinjstvo. Podobne procedure so še SumRecPoly, SumRecRing, SumRecPolyLine.

Obrazložitev

CurRec - tekoči record [GOSP97] - plast iz katere se dela sumarnik Število prebivalcev - ime polja, za katerega se naj vrši sumiranje "[Sifra obcine] = 99" - SQL pogoj 1000 - Radij

Primeri:

  • SumRecPoly (currec, [PR97], 'Zaposleni po agenciji', "[Panoga] = 'GOSTINSTVO' ") - Število zaposlenih v dejavnosti Gostinstvo v poligonu
  • SumRecPolyline (currec, [PR97], 'Zaposleni po agenciji', "[Panoga] = 'GOSTINSTVO' ", 200) - Število zaposlenih v dejavnosti Gostinstvo v 200m pasu polilinije
  • SumRecRing (currec, [PR97], 'Zaposleni po agenciji', "[Panoga] = 'GOSTINSTVO' ", 1000, 2000) - Število zaposlenih v dejavnosti Gostinstvo v kolobarju 1000-2000m
  • CountRecPoly (currec, [PR97], "[Panoga] = 'GOSTINSTVO' ") - Število firm, ki se ukvarjajo z panogo Gostinstvo v poligonu.

OPOMBA: Te procedure izvajajo sumarnike s kombinacijo dveh plasti, in pri večjih bazah podatkov so temu ustrezno hitre. Za gornje primere velja, da jih je smiselno izvajati na prostoru občin ali manjšem.

Prav tako lahko vse izračunane vrednosti funkcij SumRecPoly, SumRecPolyLine, SumRecRing, SumRecCircle in CountRecPoly trajno zapišete v izbrano plast. s funkcijo WriteRezSumRecFun.

Postopek je sledeč:

  • Najprej morate v plasti v katero želite zapisati rezultate funkcije dodati novo polje (glej Podatkovne plasti). Nato v aplikaciji pritisnete SpaceBar, da dobite ukazno vrstico (Ukazna vrstica). Vtipkajte ukaz WriteRezSumRecFun. Izberite plast, in polje, ki ste ga dodali v to plast. Nato opredelite Filtrirne pogoje (prostorske in SQL), z Izvedi potrdite filtrirne pogoje, z Prekini, prekinete nabor. Program vam ponudi eno od sintaks procedur, ki jo morate popraviti (Vpišite PRAVILNO sintakso procedure (glej zgoraj)). GlobVarF in GlobCurRec sta konstanti in ju ne spreminjate, obvezno pa morate popravit ali pustiti samo narekovaje za 'SQL izraz' Če je procedura pravilno napisana, se vam rezultat procedure zapisuje v izbrano polje.

Procedura z podobno funkcijo je tudi ReadFromPolygone.

Ali ste vedeli, da lahko večje baze podatkov oziroma filtrirane podatke zapišete v novo podatkovno plast!

S tem si iz večje baze podatkov izločite samo tiste podatke, ki so predmet vašega zanimanja, in s tem pohitrite nadaljnje analize. Za izvedbo uporabite proceduro MakeNewLayer (Zapiši v novo Plast). Za detajle glej EPRESS aplikacija

Ali ste vedeli, da lahko temi spremenite ime drugo ime in komentar!

To lahko storite v Tematika, ali v aplikaciji, v Tematiki kliknite na desno tipko, in izberite urejanje teme, kjer spremenite ime elementa tematike, v rubriki Ime. S tem si lahko natančno definirate, kaj vsebuje določena tema, in kaj prikazuje.

Ali ste vedeli, da lahko izvedete rekapitulacijo po prostorskih entitetah!

Za detajle glej Aplikacija EPRESS, Rekapitulacija.