Mit dem Modul KMLOUT können Objekte in eine KML Datei geschrieben werden.
Der Modul KMLOUT wird mit:
|INCL \script\kmlout.mod
in einer ICS RUN1-Konfiguration verfügbar gemacht.
Folgende Parameter können in der Map KMLOUT_PARAM
für den Modul gesetzt werden:
Parameter | req/opt | Beschreibung |
TEMPLATE | r | Name der KML Templatedatei. Für die Templatedatei muss ein KML-File gemäss KML Spezifikationen angegeben werden. Das KML Templatefile beinhaltet alle Definitionen, auf die die zu schreibenden Objekte Bezug nehmen, wie zum Beispiel Style-Definitionen. |
STATISTICS | r | ON oder OFF , Default
= OFF . Objektstatistik am Ender der .log Datei
anzeigen. |
STROKE_TOL | r | <real> . Stroke-Tolerance zur
Auflösung von Kreisbögen in Liniensegmente. Als Stroke-Tolerance
können dieselben Werte wie für die ICS-Methode
ICS.STROKE verwendet werden (s.a. iG/Script
Benutzer- und Referenzhandbuch). Mit OFF werden
die Kreisbögen nicht aufgelöst. |
Der Modul verlangt für jedes OUT-Objekt folgende Systemkomponenten:
Pro Objekttyp müssen ausserdem folgende Komonenten des OUT-Objekts gesetzt werden:
Komponente | req/opt | Beschreibung |
OUT.FOLDER(s) | o | KML Folder - Ordner - in das das Objekt
geschrieben wird. Handelt es sich um einen Unterordner, so
ist der Unterordner mit dem gesamten Ordnerpfad anzugeben,
z.B.
|
OUT.GEOM(g) | o | Geometrie des Objektes. |
OUT.<Tag>(s) | o | KML Tag. Definition weiterer KML Tags mit
Werten für das Objekt. Die Tags und Werte richten sich nach
dem Objekt und den KML Spezifikationen für das Objekt, z.B.
|
OUT.ExtendedData.<Tag>(s)
| o | KML ExtendedData Tags. Definition weiterer
Attribute mit Werten für das Objekt. Beispiel:
|
Dieses Objektmodell gilt für die Anwendung mit der Prozedur
KMLOUT_WRITE_OBJECT0
. Das OUT
-Objekt muss mit
Prozeduren aufbereitet werden.
Mit Record Definitionen können vereinfacht Objekte definiert werden.
Die Record Definitionen werden von der Prozedur
KMLOUT_WRITE_RECORD1
verarbeitet. Eine Record
Definition sieht wie folgt aus.
MAP <name>
FOLDER => <Folder-Name>
GEOM => <Geometrie-Komponente>
:
<Tag> => <Value|Komponente mit Value>
:
END_MAP
Die einzelnen Bestandteile einer Record-Definition sind:
RECORD_<name>
Eine Record Definition ist eine Map. Der Map-Name kann ein beliebiger Name sein.
FOLDER
Siehe Objektmodell.
<Tag>
Siehe Objektmodell.
Beispiel einer Record Definition.
MAP RECORD_POLYGON name => Gebäude styleUrl => #polygonstyle Polygon.extrude => 1 Polygon.tessellate => 1 Polygon.altitudeMode => relativeToGround GEOM => IN.GEOM FOLDER => Bodenbedeckung.Gebäude.Fläche END_MAP
Mit den Folder Definitionen können für die in den Record Definitionen verwendeten Folders KML Tags definiert werden. Die Folders Definition sieht wie folgt aus.
MAP FOLDERS
<Folder-Path>.<Tag> => <Value>
:
END_MAP
Die einzelnen Bestandteile einer Record-Definition sind:
FOLDERS
Die Folder Definition ist eine Map. Der Map-Name ist fix
FOLDERS
.
<Folder>-Path>
Definition des Foldernames. Handelt es sich um einen Unterordner, muss der ganze Path für den Folder definiert werden. Folders in einem Path werden durch einen Punkt separaiert.
Mit document
für den Folder-Pfad können
Tags für das Dokument definiert werden.
<Tag>
Tag für den Folder entsprechend den KML Spezifikationen.
<Value>
Wert für den Tag des Folders.
Zusätzlich zu den in der KML Spezifikation definierten Tags können folgende Modul-spezifischen Tags definiert werden.
<Tag>=ORDER
Tag für den Folder zum sortieren der Daten.
<Value>=ASCENDING|DESENDING[,NUMERIC]
Definiert wie die Daten sortiert werden sollen.
ASCENDING
: aufwärts,
DESCENDING
: abwärts. Zusätzlich kann mit
NUMERIC
definiert werden, ob die Werte als
numerische Werte interpretiert werden sollen und nicht als textuelle
Werte. Macht nur Sinn, wenn alle Werte numerisch sind.
Beispiel einer Folder Definition.
MAP FOLDERS document.open => 1 Bodenbedeckung.open => 1 Bodenbedeckung.visibility => 1 Bodenbedeckung.Gebäude.open => 1 Bodenbedeckung.Gebäude.visibility => 1 Bodenbedeckung.Gebäude.Nummer.open => 0 Bodenbedeckung.Gebäude.Nummer.visibility => 1 Bodenbedeckung.Gebäude.Nummer.ORDER => ASCENDING,NUMERIC Bodenbedeckung.Gebäude.Fläche.open => 0 Bodenbedeckung.Gebäude.Fläche.visibility => 1 END_MAP
Mit dem Parameter KMLOUT_PARAM.TEMPLATE
muss ein
KML-Template definiert werden. Das KML Templatefile beinhaltet alle
Definitionen, auf die die zu schreibenden Objekte Bezug nehmen, wie zum
Beispiel Style-Definitionen. Nachfolgend ein Beispiel.
<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://earth.google.com/kml/2.2"> <Document> <name>template.kml</name> <!-- Begin Style Definitions --> <Style id="polygonstyle_normal"> <PolyStyle> <color>ff0000aa</color> </PolyStyle> </Style> <Style id="polygonstyle_highlite"> <PolyStyle> <color>ff0000ff</color> </PolyStyle> </Style> <StyleMap id="polygonstyle"> <Pair> <key>normal</key> <styleUrl>#polygonstyle_normal</styleUrl> </Pair> <Pair> <key>highlight</key> <styleUrl>#polygonstyle_highlite</styleUrl> </Pair> </StyleMap> <!-- End Style Definitions --> </Document> </kml>
Prozeduren und Methoden
Prozedur | KMLOUT_OPEN ! [s file][] |
Beschreibung | Öffnet den KMLOUT Modul auf der
Outputdei <file> . Die Prozedur wird von
RUN1 automatisch aufgerufen. |
Beispiel |
|
Prozedur | KMLOUT_WRITE_OBJECT0 |
Beschreibung | Schreibt aus aufbereitete
Objekt |
Beispiel |
|
Prozedur | KMLOUT_WRITE_RECORD1 ! record |
Beschreibung | Schreibt das in
|
Beispiel |
|
Prozedur | KMLOUT_CLOSE ! [][] |
Beschreibung | Schliesst den Modul und gibt die durch den Modul belegten Resourcen wieder frei. Die Prozedur wird von RUN1 automatisch aufgerufen. |
Beispiel |
|
Triggers Folder
Prozedur | KMLOUT_FOLDER_PRE_OPEN ! [][] |
Beschreibung | Trigger der aufgefrufen wird, bevor
ein Folder geöffnet wird. Der Folder steht in
VAR.KML_FOLDER zur Verfügung. |
Beispiel |
|
Prozedur | KMLOUT_FOLDER_POST_OPEN ! [][] |
Beschreibung | Trigger der aufgefrufen wird, nachdem
ein Folder geöffnet wurde. Der Folder steht in
VAR.KML_FOLDER zur Verfügung. |
Beispiel |
|
Prozedur | KMLOUT_FOLDER_PRE_CLOSE ! [][] |
Beschreibung | Trigger der aufgefrufen wird, bevor
ein Folder geschlossen wird. Der Folder steht in
VAR.KML_FOLDER zur Verfügung. |
Beispiel |
|
Prozedur | KMLOUT_FOLDER_POST_CLOSE ! [][] |
Beschreibung | Trigger der aufgefrufen wird, nachdem
ein Folder geschlossen wurde. Der Folder steht in
VAR.KML_FOLDER zur Verfügung. |
Beispiel |
|
Triggers Placemark (Objects)
Prozedur | KMLOUT_PLACEMARK_PRE_OPEN ! [][] |
Beschreibung | Trigger der aufgefrufen wird, bevor
ein Placemark geöffnet wird. Der Placemark steht in
OUT zur Verfügung. |
Beispiel |
|
Prozedur | KMLOUT_PLACEMARK_POST_OPEN ! [][] |
Beschreibung | Trigger der aufgefrufen wird, nachdem
ein Placemark geöffnet wurde. Der Placemark steht in
OUT zur Verfügung. |
Beispiel |
|
Prozedur | KMLOUT_PLACEMARK_PRE_CLOSE ! [][] |
Beschreibung | Trigger der aufgefrufen wird, bevor
ein PLACEMARK geschlossen wird. Der Placemark steht in
OUT zur Verfügung. |
Beispiel |
|
Prozedur | KMLOUT_PLACEMARK_POST_CLOSE ! [][] |
Beschreibung | Trigger der aufgefrufen wird, nachdem
ein Placemark geschlossen wurde. Der Placemark steht in
OUT zur Verfügung. |
Beispiel |
|
Weitere Prozeduren
Prozedur | KMLOUT_WRITE_LINE ! [s string][] |
Beschreibung | Eine zusätzliche Zeile in das
Output-File schreiben. Siehe Beispiel in
KMLOUT_FOLDER_POST_OPEN . |
Beispiel |
|
Prozedur | KMLOUT_TAB_INC ! [][] |
Beschreibung | Den Tabulatur für das Schreiben in
das Output-File um einen Enschub erhöhen. Siehe Beispiel in
KMLOUT_FOLDER_POST_OPEN . |
Beispiel |
|
Prozedur | KMLOUT_TAB_DEC ! [][] |
Beschreibung | Den Tabulatur für das Schreiben in
das Output-File um einen Einschub verkelinern. Siehe Beispiel in
KMLOUT_FOLDER_POST_OPEN . |
Beispiel |
|
! Diese ICS Konfiguration transferiert aus INTERLIS ! gelesenen Objekte mit KMLOUT in in eine .kml Datei. |LICENSE \license\iltools.lic MAP USER_INPUT1 DIALOG => FILE MESSAGE => 'Enter .itf Input File' FILE_FILTER => itf FILE_EXISTS => TRUE OPT => input END_MAP MAP USER_INPUT2 DIALOG => FILE MESSAGE => 'Enter .kml Output File' FILE_FILTER => kml FILE_EXISTS => FALSE OPT => output END_MAP MAP ILIN_PARAM INTERLIS_DEF => \models\dm01avch24d.ili LOG_TABLE => ON TRACE => OFF STATISTICS => ON CALC_SURFACE => ON ENUM_TO_TEXT => ON END_MAP MAP ILIN_TOPO Bodenbedeckung,BoFlaeche_Geometrie => AREA DEFAULT => OFF END_MAP MAP KMLOUT_PARAM TEMPLATE => \data\template.kml STATISTICS => ON STROKE_TOL => 0.001 FENCE_MODE => OVERLAP END_MAP MAP FOLDERS Bodenbedeckung.Gebäude.Nummer.open => 0 Bodenbedeckung.Gebäude.Nummer.visibility => 1 Bodenbedeckung.Gebäude.Fläche.open => 0 Bodenbedeckung.Gebäude.Fläche.visibility => 1 END_MAP MAP RECORD_POINT name => IN.GebaeudenummerPos_von.Nummer styleUrl => #pointstyle visibility => 1 Point.extrude => 1 Point.tessellate => 1 Point.altitudeMode => relativeToGround GEOM => IN.Pos FOLDER => Bodenbedeckung.Gebäude.Nummer ExtendedData.Nummer => IN.GebaeudenummerPos_von.Nummer ExtendedData.GWR_EGID => IN.GebaeudenummerPos_von.GWR_EGID END_MAP MAP RECORD_POLYGON name => Gebäude styleUrl => #polygonstyle Polygon.extrude => 1 Polygon.tessellate => 1 Polygon.altitudeMode => relativeToGround GEOM => IN.GEOM FOLDER => Bodenbedeckung.Gebäude.Fläche END_MAP MAP INPUT_SOURCES I1 => ILTOPO,OPT.input END_MAP MAP INOUT I1 => IN.TOPIC,IN.TABLE I1,Bodenbedeckung,BoFlaeche_Area => IN.Art I1,Bodenbedeckung,BoFlaeche_Area,0 => R_1,RECORD_POLYGON I1,Bodenbedeckung,GebaeudenummerPos => R_1,RECORD_POINT I1,* => OFF END_MAP MAP MACRO R_1 => KMLOUT_WRITE_RECORD1 END_MAP |INCL \script\iltopo.mod |INCL \script\kmlout.mod |INCL \script\run1.prg