Izvoz v XLSX: Razlika med redakcijama

Iz SDMS
Jump to navigationJump to search
(Nova stran z vsebino: == CRS*.XML (transformacije koordinatnih sistemov) == Transformacije koordinatnih sistemov so vgrajene v sam program. Parametri za Helmertovo 7-parametrsko transformacijo pa...)
 
m
Vrstica 1: Vrstica 1:
== CRS*.XML (transformacije koordinatnih sistemov) ==
+
== Prenos podatkov iz baze ==
Transformacije koordinatnih sistemov so vgrajene v sam program. Parametri za Helmertovo 7-parametrsko transformacijo pa se lahko podajo v XML datoteki.
 
=== Primer ===
 
 
<pre>
 
<pre>
<?xml version="1.0" encoding="windows-1250"?>
+
Sub TabelaXLS
<crs>
+
   Dim XLS As TXlsWriter, XLSF As TXlsField
   <projection>
+
   Dim L as TLayer
    <prcode>SI-D48</prcode>
 
    <transformation>
 
      <trcode>GURS-08</trcode>
 
      <trnote>Cela Slovenija (15-125cm)</trnote>
 
      <trtowgs>409.545, 72.164, 486.872, 3.085957, 5.469110, -11.020289, 17.919665</trtowgs>
 
      <trtocrs>-473.862, -124.587, -413.576, -4.730807, -2.380796, 11.786482, -10.645117</trtocrs>
 
      <trtest>SITRANET, 16, 0, 0, 46, 0, 0, 577825.261, 95579.074</trtest>
 
    </transformation>
 
   </projection>
 
</crs>
 
</pre>
 
  
== TMS*.XML (definicije tile map servisov) ==
+
   // inicializiramo writer in  prvi list
=== Primer ===
+
   XLS = CreateXlsWriter
<pre>
+
  XLS.AddSheet('List 1')
<?xml version="1.0" encoding="windows-1250"?>
 
<tms>
 
   <service>
 
    <code>OSM</code>
 
    <name>OSM - OpenStreetMap</name>
 
    <server>a.tile.openstreetmap.org</server>
 
    <server>b.tile.openstreetmap.org</server>
 
    <server>c.tile.openstreetmap.org</server>
 
    <levels>
 
      <codes>0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19</codes>
 
      <link>/%Z/%X/%Y.png</link>
 
    </levels>
 
    <format>png</format>
 
    <validity>7</validity>
 
   </service>
 
</tms>
 
</pre>
 
 
 
=== Parametri taga SERVICE ===
 
*CODE (1) - koda, ki naj bo unikatna in naj se nikoli ne spremeni
 
*NAME (1) - opisno ime, tudi unikatno, da se pri izbiri lahko ločijo med sabo
 
*CRS (0..1) - koda koordinatnega sistema, za kode poglej v CRS.XML (privzeto WGS-84)
 
*ORIGIN (0..1) - izhodišče sistema, TOP za levo-zgoraj ali BOTTOM za levo-spodaj (privzeto TOP)
 
*ORIGINX (0..1) - koordinata izhodišča sistema (levo) (privzeto 0)
 
*ORIGINY (0..1) - koordinata izhodišča sistema (zgoraj/spodaj) (privzeto 0)
 
*PIXELSIZE (0..1) - dimenzije piksla v metrih na prvem nivoju (privzeto 104857.6)
 
*TILESIZE (0..1) - dimenzija slike v pikslih (privzeto 256)
 
*FORMAT (1) - format slike, JPG, PNG ali TIF
 
*VALIDITY (0..1) - število dni do ponovnega preverjanja veljavnosti (privzeto 7)
 
*CHROMACOLORHEX (0..1) - barva, ki se naj spremeni v prozorno, npr. FFFFFE (privzeto 0)
 
*CHROMATOLERANCE (0..1) - toleranca, za prozornost, npr. 1 (privzeto 0)
 
*TOPLEVELINDEX (0..1) - index nivoja, na katerem se začnejo karte (če želimo ignorirati zgornje nivoje) (privzeto 0)
 
*SERVER (1..N) - naslovi strežnikov
 
*LEVELS (1..N) - definicije nivojev
 
 
 
=== Parametri taga LEVELS ===
 
*CODES (1) - seznam šifer nivojev, ločenih z vejico
 
*LINK (1) - povezava na sliko, kjer se % sekvence nadomeščajo z dejanskimi vrednosti
 
  
=== % sekvence ===
+
  // pripravimo definicijo stolpcev
*%Z se nadomesti s šifro nivoja
+
  XLS.Table.Clear                                          // prvi klic je opcijski, počisti definicijo stolpcev
*%X se nadomesti s horizontalnim indeksom slike
+
  XLSF = XLS.Table.AddCounter('Zap. št.')                  // zapisi bodo oštevilceni
*%Y se nadomesti z vertikalnim indeksom slike
+
  XLSF.FooterValue = 'Skupaj'                              // v footerju bo fiksen tekst
*%Q se nadomesti s quad-tree nazivom slike
+
  XLS.Table.AddFieldByName('Naslov polja', 'polje1')      // fiksno nastavimo ime stolpca
 +
  XLS.Table.AddFieldByName('', 'polje2')                  // ime stolpca je ime polja
 +
  XLSF = XLS.Table.AddFieldByName('Število', 'polje3')    // numerično polje
 +
  XLSF.FooterValue = xlscvAutoColSum                      // v footerju bo vsota stolpca
 +
  XLSF = XLS.Table.AddFormula('Vsota 3 in 4', 'IntToStr([polje3].AsNumber + [polje4].AsNumber)') // Basic formula
 +
  XLSF.FooterValue = xlscvAutoColSum                      // v footerju bo vsota stolpca
 +
  XLSF = XLS.Table.AddValue('Vsota levo', xlscvAutoRowSum) // v stolpcu bo vsota številk v vrstici
 +
  XLSF.FooterValue = xlscvAutoColSum                      // v footerju bo vsota stolpca
  
== CTR*.XML (definicije barvnih transformacij) ==
+
   // pripravimo podatke
=== Primer ===
+
   L = [Layer]
<pre>
+
   L.Filter.ExecuteSQL('[polje1] = 10')
<?xml version="1.0" encoding="windows-1250"?>
+
  L.Sort.Load('Default')
<cts>
+
  L.Sort.Execute
   <ct>
 
    <ctcode>1</ctcode>
 
    <ctname>Cyan, Orange - 8 Bands</ctname>
 
    <ctlinear>true</ctlinear>
 
    <ctshadow>NW</ctshadow>
 
    <ctpair>   0, 806000</ctpair>
 
    <ctpair> 100, 808000</ctpair>
 
    <ctpair> 200, A0A000</ctpair>
 
    <ctpair> 300, C0C000</ctpair>
 
    <ctpair> 400, F0F000</ctpair>
 
    <ctpair> 600, CAE8DD</ctpair>
 
    <ctpair> 800, 55AAFF</ctpair>
 
    <ctpair>1000, 4484DD</ctpair>
 
    <ctpair>1300, 337CCE</ctpair>
 
    <ctpair>1700, 2967AB</ctpair>
 
    <ctpair>2100, 1A416C</ctpair>
 
    <ctpair>2900, 4A484D</ctpair>
 
   </ct>
 
</cts>
 
</pre>
 
=== Parametri taga CT ===
 
*CTCODE (1) - koda barvne transformacije
 
*CTNAME (1) - opisno ime barvne transformacije
 
*CTLINEAR (0..1) - ali se vrednosti med dvema barvama linearno prelivajo (privzeto false)
 
*CTSHADOW (0..1) - smer osvetlitve za senčenje NW, N, NE, W, E, SW, S, SE (privzeto se ne senči)
 
*CTPAIR (1..N) - seznam parov vrednost,barva (primer 200,FF00FF)
 
  
== XML struktura piramide ==
+
  // zapišemo podatke po dani definiciji
=== Uporaba ===
+
  XLS.Table.AddRecordList('Naslov', L.FilteredRecords) // naslov je opcijski
'''PyramidBuildAll(Code As String)''' ponovno naloži XML datoteko, izdela vse nivoje in sestavi piramido.
 
  
=== Primer ===
+
   // nastavimo še robove celic
<pre>
+
   RoboviXLS(XLS)
<?xml version="1.0" encoding="windows-1250"?>
 
<store>
 
  <name>Ortofoto (GURS-50cm)</name>
 
   <tilesize>512</tilesize>
 
  <crs>SI-D48</crs>
 
   <format>jpg,75</format>
 
  <minscale>100</minscale>
 
  <sourcepath>D:\Podatki\Rasters\DOF-GURS\TM050</sourcepath>
 
  <targetpath>D:\Podatki\Rasters\DOF-GURS\TM050</targetpath>
 
  <level>
 
    <code>050x001</code>
 
    <pixelsize>0.50</pixelsize>
 
    <maxscale>5000</maxscale>
 
    <build>files,,,000000,FFFFFF,1</build>
 
  </level>
 
  <level>
 
    <code>050x002</code>
 
    <pixelsizemul>2</pixelsizemul>
 
    <maxscalemul>2</maxscalemul>
 
    <build>level</build>
 
  </level>
 
</store>
 
</pre>
 
  
=== Parametri taga STORE ===
+
  // dodamo nov list
 +
  XLS.AddSheet('List 2')
  
*NAME (1) - opisno ime, mora biti unikatno, da se pri izbiri lahko ločijo med sabo
+
  // pripravimo nove podatke
*CRS (1) - koda koordinatnega sistema, za kode poglej v CRS.XML (privzeto WGS-84), trenutno se še ne uporablja
+
  L = [Layer]
*TILESIZE (1) - velikost tilov v pikslih
+
  L.Filter.ExecuteSQL('[polje1] = 20')
*FORMAT (1) - format tilov, TG4, LZW ali JPG (ki ima lahko dodatno še kvaliteto 0-100)
+
  L.Sort.Load('Default')
*MINSCALE (0..1) - minimalno merilo, do katere se piramida izrisuje
+
  L.Sort.Execute
*COLOR (0..1) - barva za črnobele slike pri TG4, na primer FF00FF
+
 
*CHROMA (0..1) - barva in toleraca za prozornost, na primer FFFFFF,10
+
  // zapišemo podatke po dani definiciji
*SOURCEPATH (0..1) - predpona, ki se doda mapam vhodnih datotek za build
+
  XLS.Table.AddRecordList('Naslov', L.FilteredRecords) // naslov je opcijski
*TARGETPATH (0..1) - mapa, kamor se shranijo vmesni rezultati builda (nivoji)
 
*BUILDWINDOW (0..1) - okno, ki oklepa piramido, za optimizacijo builda (privzeto 250000,0,750000,250000)
 
*LEVEL (1..N) - definicije izdelave nivojev
 
  
=== Parametri taga LEVEL ===
+
  // nastavimo še robove celic
*CODE (1) - unikatna koda nivoja
+
  RoboviXLS(XLS)
*PIXELSIZE (0..1) - velikost piksla v metrih, obvezno podana na prvem nivoju; če ni podana, je dvojna vrednost prejšnjega nivoja
 
*PIXELSIZEMUL (0..1) - če je podan PIXELSIZE, se množi s to vrednostjo (privzeto 1)
 
*PIXELSIZEDIV (0..1) - če je podan PIXELSIZE, se deli s to vrednostjo (privzeto 1)
 
*MAXSCALE (0..1) - največje merilo izrisa tega nivoja, obvezno podana na prvem nivoju; če ni podana, je dvojna vrednost prejšnjega nivoja
 
*MAXSCALEMUL (0..1) - če je podan MAXSCALE, se množi s to vrednostjo (privzeto 1)
 
*PREPAINT (0..1) -
 
*BUILD (0..N) - navodila za kreiranje nivoja, obvezna na prvem nivoju (privzeto LEVEL)
 
  
=== Parametri taga BUILD ===
+
  // shranimo v file in sprostimo writer
Parametri so ločeni z vejico.  
+
  XLS.SaveToFile('c:\temp\test.xlsx')
*FILES,mapa,filter,barva,chroma,toleranca
+
  XLS.Destroy
**mapa (0..1) -
+
EndSub
**filter (0..1) -
 
**barva (0..1) -
 
**chroma (0..1) -
 
**toleranca (0..1) -
 
*LIST,seznam,barva,chroma,toleranca
 
**seznam (1) - ascii datoteka s seznamom kart
 
**barva (0..1) -
 
**chroma (0..1) -
 
**toleranca (0..1) -
 
*LEVEL,koda
 
**koda (0..1) - koda nivoja, iz katerega se reducira trenutni nivo (privzeto prejšnji nivo)
 
*GRID,grid,polje,transformacija
 
**grid (1) - ime xml datoteke z definicijo grida
 
**polje (1) - indeks polja iz grida, ki naj se uporabi
 
**transformacija (1) - koda barvne transformacije
 
*DRAW,tematika,ymin,xmin,ymax,xmax
 
**tematika (1) - ime tematike, ki naj se izriše
 
**ymin, xmin, ymax, xmax (1) - okno izrisa
 
  
== XML struktura grida ==
+
Sub RoboviXLS(XLS As TXlsWriter)
=== Primer ===
+
   XLS.SetBorders(XLS.Table.LeftTop.RelativeAddress(-1,0), XLS.Table.RightTop.RelativeAddress(-1,0), xlsbtAll, xlsbsMedium, xlsbsUnchanged, Black) // obroba naslova
<pre>
+
  XLS.SetBorders(XLS.Table.LeftTop.Address, XLS.Table.RightBottom.Address, xlsbtHor, xlsbsUnchanged, xlsbsThin, Black) // horizontalne črte jedra tabele
<?xml version="1.0" encoding="windows-1250"?>
+
   XLS.SetBorders(XLS.Table.LeftTop.Address, XLS.Table.RightTop.Address, xlsbtAll, xlsbsMedium, xlsbsUnchanged, Black) // obroba headerja
<grid>
+
  XLS.SetBorders(XLS.Table.LeftTop.Address, XLS.Table.RightBottom.Address, xlsbtAll, xlsbsMedium, xlsbsUnchanged, Black) // obroba tabele
  <Crs>SI-D48</Crs>
+
  XLS.SetBorders(XLS.Table.LeftBottom.Address, XLS.Table.RightBottom.Address, xlsbtAll, xlsbsMedium, xlsbsUnchanged, Black) // obroba footerja
  <OriginY>371200</OriginY>
+
EndSub
  <OriginX>25600</OriginX>
 
  <TileCountY>20</TileCountY>
 
  <TileCountX>14</TileCountX>
 
  <CellCountY>512</CellCountY>
 
  <CellCountX>512</CellCountX>
 
  <CellDimenY>25</CellDimenY>
 
   <CellDimenX>25</CellDimenX>
 
  <CellField>I02,100,-600</CellField>
 
  <CellField>I02,100,+300</CellField>
 
</Grid>
 
</pre>
 
=== Parametri taga GRID ===
 
*...
 
*...
 
=== Parametri taga CELLFIELD ===
 
*TIP (1): tip polja, ena od vrednosti: W01,W02,W04,I01,I02,I04,F04,F08
 
*FAKTOR (0..1): celoštevilčni množitelj vrednosti, za optimizacijo
 
*DELTA (0..1): celoštevilčni dodatek vrednosti, za optimizacijo
 
 
 
Interna vrednost polja se računa po formuli:
 
*interna vrednost = (realna vrednost + delta) * faktor
 
 
 
=== Primer grida za transformacijo koordinat ===
 
Primer XML datoteke (SI-D96;SI-D48):
 
<pre>
 
<?xml version="1.0" encoding="WINDOWS-1250"?>
 
<Grid>
 
<Crs>SI-D96</Crs>
 
<OriginY>370000</OriginY>
 
<OriginX>25000</OriginX>
 
<CellDimenY>500</CellDimenY>
 
<CellDimenX>500</CellDimenX>
 
<TileCountY>1</TileCountY>
 
<TileCountX>1</TileCountX>
 
<CellCountY>520</CellCountY>
 
<CellCountX>340</CellCountX>
 
<CellField>I02,1000,-370</CellField>
 
<CellField>I02,1000,+485</CellField>
 
</Grid>
 
 
 
</pre>
 
Procedura za izračun grida:
 
<pre>
 
Dim G As TGrid, IY, IX As Long, Y1, X1, X2, Y2 As Float
 
G = CreateGrid(ProgramPath + 'QTS;SI-D96;SI-D48.XML')
 
If Assigned(G) Then
 
   CRSToCRSParams('SI-D48', 'SI-D96')
 
  For IY = 0 To G.TileCountY * G.CellCountY - 1
 
    Y1 = G.OriginY + IY * G.CellDimenY + G.CellDimenY / 2
 
    For IX = 0 To G.TileCountX * G.CellCountX - 1
 
      X1 = G.OriginX + IX * G.CellDimenX + G.CellDimenX / 2
 
      CRSToCRS(Y1, X1, Y2, X2)
 
      G.CellValue(Y1, X1, 0) = Y2 - Y1
 
      G.CellValue(Y1, X1, 1) = X2 - X1
 
    Next
 
  Next
 
  G.Save
 
  G.Destroy
 
EndIf
 
 
</pre>
 
</pre>

Redakcija: 14:32, 11. marec 2021

Prenos podatkov iz baze

Sub TabelaXLS
  Dim XLS As TXlsWriter, XLSF As TXlsField
  Dim L as TLayer

  // inicializiramo writer in  prvi list
  XLS = CreateXlsWriter
  XLS.AddSheet('List 1')

  // pripravimo definicijo stolpcev
  XLS.Table.Clear                                          // prvi klic je opcijski, počisti definicijo stolpcev
  XLSF = XLS.Table.AddCounter('Zap. št.')                  // zapisi bodo oštevilceni
  XLSF.FooterValue = 'Skupaj'                              // v footerju bo fiksen tekst
  XLS.Table.AddFieldByName('Naslov polja', 'polje1')       // fiksno nastavimo ime stolpca
  XLS.Table.AddFieldByName('', 'polje2')                   // ime stolpca je ime polja
  XLSF = XLS.Table.AddFieldByName('Število', 'polje3')     // numerično polje
  XLSF.FooterValue = xlscvAutoColSum                       // v footerju bo vsota stolpca
  XLSF = XLS.Table.AddFormula('Vsota 3 in 4', 'IntToStr([polje3].AsNumber + [polje4].AsNumber)') // Basic formula
  XLSF.FooterValue = xlscvAutoColSum                       // v footerju bo vsota stolpca
  XLSF = XLS.Table.AddValue('Vsota levo', xlscvAutoRowSum) // v stolpcu bo vsota številk v vrstici
  XLSF.FooterValue = xlscvAutoColSum                       // v footerju bo vsota stolpca

  // pripravimo podatke
  L = [Layer]
  L.Filter.ExecuteSQL('[polje1] = 10')
  L.Sort.Load('Default')
  L.Sort.Execute

  // zapišemo podatke po dani definiciji
  XLS.Table.AddRecordList('Naslov', L.FilteredRecords) // naslov je opcijski

  // nastavimo še robove celic
  RoboviXLS(XLS)

  // dodamo nov list
  XLS.AddSheet('List 2')

  // pripravimo nove podatke
  L = [Layer]
  L.Filter.ExecuteSQL('[polje1] = 20')
  L.Sort.Load('Default')
  L.Sort.Execute
  
  // zapišemo podatke po dani definiciji
  XLS.Table.AddRecordList('Naslov', L.FilteredRecords) // naslov je opcijski

  // nastavimo še robove celic
  RoboviXLS(XLS)

  // shranimo v file in sprostimo writer
  XLS.SaveToFile('c:\temp\test.xlsx')
  XLS.Destroy
EndSub

Sub RoboviXLS(XLS As TXlsWriter)
  XLS.SetBorders(XLS.Table.LeftTop.RelativeAddress(-1,0), XLS.Table.RightTop.RelativeAddress(-1,0), xlsbtAll, xlsbsMedium, xlsbsUnchanged, Black) // obroba naslova
  XLS.SetBorders(XLS.Table.LeftTop.Address, XLS.Table.RightBottom.Address, xlsbtHor, xlsbsUnchanged, xlsbsThin, Black) // horizontalne črte jedra tabele
  XLS.SetBorders(XLS.Table.LeftTop.Address, XLS.Table.RightTop.Address, xlsbtAll, xlsbsMedium, xlsbsUnchanged, Black) // obroba headerja
  XLS.SetBorders(XLS.Table.LeftTop.Address, XLS.Table.RightBottom.Address, xlsbtAll, xlsbsMedium, xlsbsUnchanged, Black) // obroba tabele
  XLS.SetBorders(XLS.Table.LeftBottom.Address, XLS.Table.RightBottom.Address, xlsbtAll, xlsbsMedium, xlsbsUnchanged, Black) // obroba footerja
EndSub