diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..0bcdbc0
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,5 @@
+# By default text files use native line endings for the platform
+* text=auto
+
+*.ili text eol=crlf
+*.dxf text eol=lf
diff --git a/build.gradle b/build.gradle
index 4ccf62e..e75ab52 100644
--- a/build.gradle
+++ b/build.gradle
@@ -14,6 +14,7 @@ repositories {
dependencies {
implementation 'ch.interlis:iox-ili:1.23.1'
+ implementation 'ch.interlis:ili2c-tool:5.5.4'
implementation 'ch.interlis:ili2c-core:5.5.4'
implementation 'commons-cli:commons-cli:1.9.0'
@@ -40,4 +41,5 @@ jar {
test {
useJUnitPlatform()
+ testLogging.showStandardStreams = true
}
\ No newline at end of file
diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml
index ac67532..9a12331 100644
--- a/config/checkstyle/checkstyle.xml
+++ b/config/checkstyle/checkstyle.xml
@@ -137,7 +137,9 @@
-
+
+
+
diff --git a/src/main/java/ch/geowerkstatt/lk2dxf/DxfWriter.java b/src/main/java/ch/geowerkstatt/lk2dxf/DxfWriter.java
index dbc540d..fbce5df 100644
--- a/src/main/java/ch/geowerkstatt/lk2dxf/DxfWriter.java
+++ b/src/main/java/ch/geowerkstatt/lk2dxf/DxfWriter.java
@@ -273,13 +273,13 @@ public void writeBlockInsert(String layerName, String blockName, double rotation
* @param position The position of the text.
* @see TEXT (DXF Reference)
*/
- public void writeText(String layerName, String textStyle, String text, String hAlignment, String vAlignment, double orientation, IomObject position) throws IOException {
- var hAlignmentValue = switch (hAlignment.toLowerCase(Locale.ROOT)) {
+ public void writeText(String layerName, String textStyle, String text, String hAlignment, String vAlignment, double orientation, double size, IomObject position) throws IOException {
+ var hAlignmentValue = switch (Objects.requireNonNullElse(hAlignment, "").toLowerCase(Locale.ROOT)) {
case "right" -> 2;
case "center" -> 1;
default -> 0; // Left
};
- var vAlignmentValue = switch (vAlignment.toLowerCase(Locale.ROOT)) {
+ var vAlignmentValue = switch (Objects.requireNonNullElse(vAlignment, "").toLowerCase(Locale.ROOT)) {
case "top", "cap" -> 3;
case "half" -> 2;
case "bottom" -> 1;
@@ -297,7 +297,7 @@ public void writeText(String layerName, String textStyle, String text, String hA
writeElement(7, textStyle);
writeElement(10, isDefaultAlignment ? Double.parseDouble(position.getattrvalue("C1")) : 0.0);
writeElement(20, isDefaultAlignment ? Double.parseDouble(position.getattrvalue("C2")) : 0.0);
- writeElement(40, 1.25); // text height
+ writeElement(40, size); // text height
writeElement(1, text);
if (hAlignmentValue != 0) {
writeElement(72, hAlignmentValue);
diff --git a/src/main/java/ch/geowerkstatt/lk2dxf/Main.java b/src/main/java/ch/geowerkstatt/lk2dxf/Main.java
index 81160b9..d0354a6 100644
--- a/src/main/java/ch/geowerkstatt/lk2dxf/Main.java
+++ b/src/main/java/ch/geowerkstatt/lk2dxf/Main.java
@@ -12,7 +12,6 @@
import java.io.File;
import java.util.List;
import java.util.Optional;
-import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Stream;
public final class Main {
@@ -55,11 +54,10 @@ public static void main(String[] args) {
private static void processFiles(LK2DxfOptions options) {
Optional perimeter = options.parsePerimeter();
- AtomicInteger counter = new AtomicInteger();
try (var dxfWriter = new DxfWriter(options.dxfFile(), 3, ObjectMapper.getLayerMappings(), "lk2dxf " + Main.VERSION)) {
for (String xtfFile : options.xtfFiles()) {
- try (LKMapXtfReader reader = new LKMapXtfReader(new File(xtfFile))) {
+ try (XtfStreamReader reader = new XtfStreamReader(new File(xtfFile))) {
ObjectMapper mapper = new ObjectMapper();
Stream objects = mapper.mapObjects(reader.readObjects());
@@ -67,38 +65,7 @@ private static void processFiles(LK2DxfOptions options) {
objects = objects.filter(o -> perimeter.get().intersects(o.geometry()));
}
- objects.forEach(o -> {
- try {
- switch (o.layerMapping().objectClass()) {
- case "LKFlaeche" ->
- dxfWriter.writeHatch(o.layerMapping().layer(), o.iomObject().getattrobj(o.layerMapping().geometry(), 0));
- case "LKLinie" ->
- dxfWriter.writeLwPolyline(o.layerMapping().layer(), o.iomObject().getattrobj(o.layerMapping().geometry(), 0));
- case "LKPunkt" -> dxfWriter.writeBlockInsert(
- o.layerMapping().layer(),
- o.layerMapping().symbol(),
- Optional.ofNullable(o.iomObject().getattrvalue(o.layerMapping().orientation())).map(Double::parseDouble).orElse(90.0),
- o.iomObject().getattrobj(o.layerMapping().geometry(), 0));
- case "LKObjekt_Text" -> dxfWriter.writeText(
- o.layerMapping().layer(),
- o.layerMapping().font(),
- o.iomObject().getattrvalue(o.layerMapping().text()),
- o.iomObject().getattrvalue(o.layerMapping().hAlign()),
- o.iomObject().getattrvalue(o.layerMapping().vAlign()),
- Double.parseDouble(o.iomObject().getattrvalue(o.layerMapping().orientation())),
- o.iomObject().getattrobj(o.layerMapping().geometry(), 0));
-
- default -> System.out.println("Unsupported geometry type: " + o.layerMapping().geometryType());
- //throw new IllegalArgumentException("Unsupported geometry type: " + o.layerMapping().geometryType());
- }
-
- System.out.println(counter.incrementAndGet() + ": " + o.iomObject().getobjectoid() + " -> " + o.layerMapping().layer());
- } catch (Exception e) {
- System.err.println("Failed to process object: " + o.iomObject().getobjectoid());
- e.printStackTrace();
- return;
- }
- });
+ objects.forEach(o -> o.writeToDxf(dxfWriter));
} catch (Exception e) {
System.err.println("Failed to process file: " + xtfFile);
e.printStackTrace();
diff --git a/src/main/java/ch/geowerkstatt/lk2dxf/MappedObject.java b/src/main/java/ch/geowerkstatt/lk2dxf/MappedObject.java
index 4502adb..9231a06 100644
--- a/src/main/java/ch/geowerkstatt/lk2dxf/MappedObject.java
+++ b/src/main/java/ch/geowerkstatt/lk2dxf/MappedObject.java
@@ -8,42 +8,59 @@
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
-public record MappedObject(Geometry geometry, IomObject iomObject, LayerMapping layerMapping) {
+public record MappedObject(
+ String oid,
+ Geometry geometry,
+ IomObject iomGeometry,
+ double orientation,
+ String vAlign,
+ String hAlign,
+ String text,
+ LayerMapping layerMapping) {
private static final GeometryFactory GEOMETRY_FACTORY = new JtsextGeometryFactory();
/**
- * Creates a new geometry object from the given {@link IomObject}.
- * @param iomObject The {@link IomObject} to create the geometry object from.
- * @return A geometry object containing the {@link IomObject} and its extracted {@link Geometry}.
- * @throws IllegalArgumentException If the object tag is not supported.
+ * Creates a new {@link MappedObject} that contains all information to process the object further.
+ *
* @throws RuntimeException If an error occurs while extracting the geometry.
*/
- public static MappedObject create(IomObject iomObject, LayerMapping layerMapping) {
+ public MappedObject(String oid, IomObject iomGeometry, Double orientation, String vAlign, String hAlign, String text, LayerMapping layerMapping) {
+ this(oid, constructGeometry(iomGeometry, layerMapping.output(), oid), iomGeometry, orientation == null ? 90 : orientation, vAlign, hAlign, text, layerMapping);
+ }
+
+ private static Geometry constructGeometry(IomObject iomGeometry, LayerMapping.OutputType outputType, String oid) {
try {
- Geometry geometry = switch (layerMapping.geometryType()) {
- case "Point" -> readPoint(iomObject, layerMapping.geometry());
- case "Line" -> readLine(iomObject, layerMapping.geometry());
- case "Surface" -> readSurface(iomObject, layerMapping.geometry());
- default -> throw new IllegalArgumentException("Unsupported object tag: " + iomObject.getobjecttag());
+ return switch (outputType) {
+ case TEXT, POINT -> GEOMETRY_FACTORY.createPoint(Iox2jtsext.coord2JTS(iomGeometry));
+ case LINE -> Iox2jtsext.polyline2JTS(iomGeometry, false, 0.0);
+ case SURFACE -> Iox2jtsext.surface2JTS(iomGeometry, 0.0);
};
- return new MappedObject(geometry, iomObject, layerMapping);
} catch (IoxException e) {
- throw new RuntimeException("Error creating geometry for object with id \"" + iomObject.getobjectoid() + "\".", e);
+ throw new RuntimeException("Error creating geometry for object with id \"" + oid + "\".", e);
}
}
- private static Geometry readPoint(IomObject iomObject, String attributeName) throws IoxException {
- IomObject position = iomObject.getattrobj(attributeName, 0);
- return GEOMETRY_FACTORY.createPoint(Iox2jtsext.coord2JTS(position));
- }
-
- private static Geometry readLine(IomObject iomObject, String attributeName) throws IoxException {
- IomObject line = iomObject.getattrobj(attributeName, 0);
- return Iox2jtsext.polyline2JTS(line, false, 0.0);
- }
+ /**
+ * Writes the object to a DXF file using the provided {@link DxfWriter}.
+ */
+ public void writeToDxf(DxfWriter dxfWriter) {
+ try {
+ if (iomGeometry == null) {
+ throw new IllegalStateException("Cannot write object to dxf without geometry.");
+ }
- private static Geometry readSurface(IomObject iomObject, String attributeName) throws IoxException {
- IomObject surface = iomObject.getattrobj(attributeName, 0);
- return Iox2jtsext.surface2JTS(surface, 0.0);
+ switch (layerMapping().output()) {
+ case SURFACE -> dxfWriter.writeHatch(layerMapping().layer(), iomGeometry);
+ case LINE -> dxfWriter.writeLwPolyline(layerMapping().layer(), iomGeometry);
+ case POINT ->
+ dxfWriter.writeBlockInsert(layerMapping().layer(), layerMapping().symbol(), orientation, iomGeometry);
+ case TEXT ->
+ dxfWriter.writeText(layerMapping().layer(), layerMapping().font(), text, hAlign, vAlign, orientation, layerMapping().textsize(), iomGeometry);
+ default -> throw new AssertionError("Unknown output type: " + layerMapping().output());
+ }
+ } catch (Exception e) {
+ System.err.println("Failed to write object: " + oid() + " to dxf.");
+ e.printStackTrace();
+ }
}
}
diff --git a/src/main/java/ch/geowerkstatt/lk2dxf/LKMapXtfReader.java b/src/main/java/ch/geowerkstatt/lk2dxf/XtfStreamReader.java
similarity index 91%
rename from src/main/java/ch/geowerkstatt/lk2dxf/LKMapXtfReader.java
rename to src/main/java/ch/geowerkstatt/lk2dxf/XtfStreamReader.java
index 9f51d32..1a4e5cd 100644
--- a/src/main/java/ch/geowerkstatt/lk2dxf/LKMapXtfReader.java
+++ b/src/main/java/ch/geowerkstatt/lk2dxf/XtfStreamReader.java
@@ -20,10 +20,9 @@
import java.util.stream.StreamSupport;
/**
- * A reader for LKMap INTERLIS transfer files.
+ * A reader for INTERLIS transfer files.
*/
-public final class LKMapXtfReader implements AutoCloseable {
- private static final String BASKET_NAME = "SIA405_LKMap_2015_LV95.SIA405_LKMap";
+public final class XtfStreamReader implements AutoCloseable {
private static final ReaderFactory READER_FACTORY = new ReaderFactory();
private final IoxReader reader;
@@ -34,7 +33,7 @@ public final class LKMapXtfReader implements AutoCloseable {
* @param xtfFile The file to read from.
* @throws IoxException If an error occurs while creating the transfer file reader.
*/
- public LKMapXtfReader(File xtfFile) throws IoxException {
+ public XtfStreamReader(File xtfFile) throws IoxException {
LogEventFactory logEventFactory = new LogEventFactory();
Settings settings = new Settings();
this.reader = READER_FACTORY.createReader(xtfFile, logEventFactory, settings);
@@ -68,7 +67,7 @@ private enum LKMapXtfReaderState {
}
/**
- * A sequential spliterator for reading objects from the surrounding {@link LKMapXtfReader}.
+ * A sequential spliterator for reading objects from the surrounding {@link XtfStreamReader}.
* Advancing the spliterator will read from the xtf reader and may throw an exception when reading invalid data.
*/
private class XtfReaderSpliterator implements Spliterator {
@@ -89,9 +88,6 @@ public boolean tryAdvance(Consumer super IomObject> action) {
if (state != LKMapXtfReaderState.TRANSFER) {
throw new IllegalStateException("Unexpected start basket event in state: " + state);
}
- if (!BASKET_NAME.equals(startBasketEvent.getType())) {
- throw new IllegalStateException("Invalid basket type: " + startBasketEvent.getType());
- }
state = LKMapXtfReaderState.BASKET;
System.out.println("Start basket \"" + startBasketEvent.getBid() + "\"");
}
diff --git a/src/main/java/ch/geowerkstatt/lk2dxf/mapping/LayerMapping.java b/src/main/java/ch/geowerkstatt/lk2dxf/mapping/LayerMapping.java
index 70f6e2b..2ac1d55 100644
--- a/src/main/java/ch/geowerkstatt/lk2dxf/mapping/LayerMapping.java
+++ b/src/main/java/ch/geowerkstatt/lk2dxf/mapping/LayerMapping.java
@@ -2,13 +2,15 @@
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
public record LayerMapping(
String layer,
- String objectClass,
- String geometryType,
+ @JsonDeserialize(converter = ObjectClassConverter.class)
+ Collection objectClass,
+ OutputType output,
String geometry,
int color,
String orientation,
@@ -22,4 +24,26 @@ public record LayerMapping(
String font,
@JsonDeserialize(converter = MappingConverter.class)
Map> mapping) {
+
+ public enum OutputType {
+ /**
+ * The object has a surface and is exported as a filled polygon.
+ */
+ SURFACE,
+
+ /**
+ * The object has a line geometry.
+ */
+ LINE,
+
+ /**
+ * The object represents text with font, alignment and orientation.
+ */
+ TEXT,
+
+ /**
+ * The object has a point geometry that gets marked with a symbol.
+ */
+ POINT,
+ }
}
diff --git a/src/main/java/ch/geowerkstatt/lk2dxf/mapping/MappingReader.java b/src/main/java/ch/geowerkstatt/lk2dxf/mapping/MappingReader.java
index eb9539c..fdec650 100644
--- a/src/main/java/ch/geowerkstatt/lk2dxf/mapping/MappingReader.java
+++ b/src/main/java/ch/geowerkstatt/lk2dxf/mapping/MappingReader.java
@@ -11,11 +11,15 @@
import java.io.InputStream;
import java.util.List;
+/**
+ * Read and interpret the layer mapping configuration.
+ */
public final class MappingReader {
private static final String MAPPING_RESOURCE = "/mappings.csv";
private static final CsvMapper MAPPER = CsvMapper
.builder()
.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES)
+ .enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS)
.build();
private MappingReader() { }
diff --git a/src/main/java/ch/geowerkstatt/lk2dxf/mapping/ObjectClassConverter.java b/src/main/java/ch/geowerkstatt/lk2dxf/mapping/ObjectClassConverter.java
new file mode 100644
index 0000000..50d4b29
--- /dev/null
+++ b/src/main/java/ch/geowerkstatt/lk2dxf/mapping/ObjectClassConverter.java
@@ -0,0 +1,15 @@
+package ch.geowerkstatt.lk2dxf.mapping;
+
+import com.fasterxml.jackson.databind.util.StdConverter;
+
+import java.util.*;
+import java.util.regex.Pattern;
+
+public final class ObjectClassConverter extends StdConverter> {
+ private static final Pattern VALUE_SEPARATOR = Pattern.compile("\\|");
+
+ @Override
+ public Collection convert(String s) {
+ return new HashSet<>(Arrays.asList(VALUE_SEPARATOR.split(s)));
+ }
+}
diff --git a/src/main/java/ch/geowerkstatt/lk2dxf/mapping/ObjectMapper.java b/src/main/java/ch/geowerkstatt/lk2dxf/mapping/ObjectMapper.java
index bf7aba5..ac78477 100644
--- a/src/main/java/ch/geowerkstatt/lk2dxf/mapping/ObjectMapper.java
+++ b/src/main/java/ch/geowerkstatt/lk2dxf/mapping/ObjectMapper.java
@@ -1,34 +1,115 @@
package ch.geowerkstatt.lk2dxf.mapping;
import ch.geowerkstatt.lk2dxf.MappedObject;
+import ch.interlis.ili2c.Ili2c;
+import ch.interlis.ili2c.Ili2cException;
+import ch.interlis.ili2c.metamodel.AbstractClassDef;
+import ch.interlis.ili2c.metamodel.AbstractLeafElement;
+import ch.interlis.ili2c.metamodel.AttributeDef;
+import ch.interlis.ili2c.metamodel.CompositionType;
+import ch.interlis.ili2c.metamodel.EnumerationType;
+import ch.interlis.ili2c.metamodel.ExtendableContainer;
+import ch.interlis.ili2c.metamodel.RoleDef;
+import ch.interlis.ili2c.metamodel.Table;
+import ch.interlis.ili2c.metamodel.TransferDescription;
+import ch.interlis.ili2c.metamodel.Type;
+import ch.interlis.ili2c.metamodel.Viewable;
+import ch.interlis.ilirepository.IliManager;
import ch.interlis.iom.IomObject;
+import ch.interlis.iom_j.Iom_jObject;
+import ch.interlis.iox_j.validator.Value;
+import java.io.File;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
+import java.net.URISyntaxException;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.*;
import java.util.function.Supplier;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
public final class ObjectMapper {
- private static final String OBJECT_TYPE_ATTRIBUTE = "Objektart";
- private static final String OBJECT_REF_ATTRIBUTE = "LKObjektRef";
+ private static final String MODELS_RESOURCE = "/models";
private static final List LAYER_MAPPINGS;
+ private static final TransferDescription TRANSFER_DESCRIPTION;
- private final Map objectTypeCache = new HashMap<>();
- private final List objectsWithRef = new ArrayList<>();
+ private static final Map, Set> CACHE_REQUIREMENTS = new HashMap, Set>();
+ private static final List FILTERS;
static {
try {
LAYER_MAPPINGS = MappingReader.readMappings();
- } catch (IOException e) {
+ TRANSFER_DESCRIPTION = getTransferDescription();
+ FILTERS = analyzeLayerMappings();
+ } catch (Exception e) {
throw new RuntimeException("Failed to read layer mappings.", e);
}
}
+ private final Map objectCache = new HashMap<>();
+ private final Set objectsWithUnresolvedRef = new HashSet<>();
+
+ private static List analyzeLayerMappings() {
+ var mappers = new ArrayList();
+ for (LayerMapping layerMapping : ObjectMapper.LAYER_MAPPINGS) {
+ for (String objectClass : layerMapping.objectClass()) {
+ var element = TRANSFER_DESCRIPTION.getElement(objectClass);
+ if (element == null) {
+ throw new IllegalArgumentException("No element found for object with id \"" + objectClass + "\".");
+ }
+ if (!(element instanceof Table classDef)) {
+ throw new IllegalArgumentException("Element is not an AbstractClassDef for object with id \"" + objectClass + "\".");
+ }
+
+ var filter = new ArrayList();
+ filter.add(new TagFilter(classDef.getScopedName()));
+
+ for (var baseAttributeName : layerMapping.mapping().keySet()) {
+ var values = layerMapping.mapping().get(baseAttributeName);
+ var pathElements = getTranslatedPath(classDef, Arrays.asList(baseAttributeName.split("->")));
+ analyzeCacheRequirements(pathElements, CACHE_REQUIREMENTS);
+ var type = ((AttributeDef) pathElements.getLast().element).getDomainResolvingAliases();
+ if (!(type instanceof EnumerationType enumerationType)) {
+ throw new IllegalArgumentException("Only enumeratino types supported" + baseAttributeName);
+ }
+
+ var attrFilter = new PathMatcher(pathElements, values.stream().map(v -> getTranslatedEnumValue(enumerationType, v)).toList());
+ filter.add(attrFilter);
+ }
+
+ // translate attributes
+ var mapper = switch (layerMapping.output()) {
+ case SURFACE, LINE -> new Mapper(filter,
+ layerMapping,
+ getTranslatedPath(classDef, layerMapping.geometry()),
+ null,
+ null,
+ null,
+ null);
+ case TEXT -> new Mapper(filter,
+ layerMapping,
+ getTranslatedPath(classDef, layerMapping.geometry()),
+ getTranslatedPath(classDef, layerMapping.orientation()),
+ getTranslatedPath(classDef, layerMapping.vAlign()),
+ getTranslatedPath(classDef, layerMapping.hAlign()),
+ getTranslatedPath(classDef, layerMapping.text()));
+ case POINT -> new Mapper(filter,
+ layerMapping,
+ getTranslatedPath(classDef, layerMapping.geometry()),
+ getTranslatedPath(classDef, layerMapping.orientation()),
+ null,
+ null,
+ null);
+ };
+ mappers.add(mapper);
+ }
+ }
+ return mappers;
+ }
+
/**
* Get the layer mappings as an immutable list.
*/
@@ -36,8 +117,226 @@ public static List getLayerMappings() {
return Collections.unmodifiableList(LAYER_MAPPINGS);
}
+ private static boolean matchesEnumSubValue(List allowedValues, String attrValue) {
+ return allowedValues.stream().anyMatch(value -> attrValue.startsWith(value + "."));
+ }
+
+ /**
+ * Resolve the value of the given path in the given {@link IomObject}.
+ *
+ * @param iomObject The {@link IomObject} to resolve the path in.
+ * @param path The path to resolve.
+ * @param objectCache The cache of objects to resolve references.
+ * @return The resolved value. If the path could not be resolved, {@link Value#createUndefined()} is returned. If the
+ * path fails to resolve because a reference was not found in the cache, {@link Value#createSkipEvaluation()} is returned.
+ */
+ private static Value resolve(IomObject iomObject, List path, Map objectCache) {
+ if (path == null) {
+ return Value.createUndefined();
+ }
+
+ var current = iomObject;
+ for (var element : path) {
+ if (current == null) {
+ break;
+ }
+ switch (element.resolution) {
+ case ATTRIBUTE -> {
+ var value = current.getattrvalue(element.name());
+ if (value != null) {
+ return new Value(null, value);
+ } else {
+ var complexValue = current.getattrobj(element.name(), 0);
+ if (complexValue != null) {
+ return new Value(List.of(complexValue));
+ } else {
+ return Value.createUndefined();
+ }
+ }
+ }
+ case REFERENCE -> {
+ var refOid = Optional.ofNullable(current.getattrobj(element.name(), 0)).map(IomObject::getobjectrefoid);
+ if (refOid.isEmpty()) {
+ current = null;
+ } else {
+ current = objectCache.get(refOid.get());
+ if (current == null) {
+ return Value.createSkipEvaluation();
+ }
+ }
+ }
+ case STRUCTURE -> {
+ current = current.getattrobj(element.name(), 0);
+ }
+ default -> throw new AssertionError("Unexpected value: " + element.resolution);
+ }
+ }
+
+ if (current != null) {
+ return new Value(List.of(current));
+ } else {
+ return Value.createUndefined();
+ }
+ }
+
+ /**
+ * Analyze a path for references that need a referenced object in the cache. Update the {@link #CACHE_REQUIREMENTS} accordingly.
+ */
+ private static void analyzeCacheRequirements(List path, Map, Set> cacheRequirements) {
+ for (int i = 0; i < path.size(); i++) {
+ var pathElement = path.get(i);
+ if (pathElement.resolution == PathElement.Resolution.REFERENCE) {
+ var it = ((RoleDef) pathElement.element).iteratorDestination();
+ while (it.hasNext()) {
+ for (var extension : it.next().getExtensions()) {
+ cacheRequirements.computeIfAbsent((AbstractClassDef>) extension, k -> new HashSet<>()).add(path.get(i + 1));
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * @see #getTranslatedPath(AbstractClassDef, List)
+ */
+ private static List getTranslatedPath(AbstractClassDef> viewable, String basePathElements) {
+ return getTranslatedPath(viewable, Arrays.asList(basePathElements.split("->")));
+ }
+
+ /**
+ * Get the translated path elements for the given attribute path.
+ *
+ * @param viewable The viewable where the path starts
+ * @param basePathElements The path elements to translate
+ * @return The {@link PathElement}s in the language of the {@code TRANSLATION OF} model.
+ */
+ private static List getTranslatedPath(AbstractClassDef> viewable, final List basePathElements) {
+ var element = getTranslatedAttributeOrRole(viewable, basePathElements.getFirst());
+ return switch (element) {
+ case AttributeDef attributeDef -> {
+ Type type = attributeDef.getDomainResolvingAll();
+ if (type instanceof CompositionType compositionType) {
+ if (basePathElements.size() == 1) {
+ throw new IllegalArgumentException("Expected the path to continue but it ended at: " + basePathElements);
+ }
+ var pathElements = getTranslatedPath(compositionType.getComponentType(), basePathElements.subList(1, basePathElements.size()));
+ pathElements.addFirst(new PathElement(attributeDef.getName(), PathElement.Resolution.STRUCTURE, attributeDef));
+ yield pathElements;
+ } else {
+ if (basePathElements.size() > 1) {
+ throw new IllegalArgumentException("Expected the path to end at an attribute, but the path goes on: " + basePathElements);
+ }
+ var pathElements = new ArrayList();
+ pathElements.add(new PathElement(attributeDef.getName(), PathElement.Resolution.ATTRIBUTE, attributeDef));
+ yield pathElements;
+ }
+ }
+ case RoleDef roleDef -> {
+ if (basePathElements.size() == 1) {
+ throw new IllegalArgumentException("Expected the path to continue but it ended at: " + basePathElements);
+ }
+ var pathElements = getTranslatedPath(roleDef.iteratorDestination().next(), basePathElements.subList(1, basePathElements.size()));
+ pathElements.addFirst(new PathElement(roleDef.getName(), PathElement.Resolution.REFERENCE, roleDef));
+ yield pathElements;
+ }
+ default -> throw new IllegalStateException("Unexpected value: " + element);
+ };
+ }
+
+ /**
+ * Checks if an attribute or role exists and translates it to the name in the {@code TRANSLATION OF} model.
+ */
+ private static AbstractLeafElement getTranslatedAttributeOrRole(Viewable> viewable, String attributeBaseName) {
+ for (ExtendableContainer> extension : viewable.getExtensions()) {
+ for (var it = ((Viewable>) extension).getAttributesAndRoles2(); it.hasNext();) {
+ var result = switch (it.next().obj) {
+ case AttributeDef attributeDef ->
+ (attributeDef.getTranslationOfOrSame().getName().equals(attributeBaseName) ? attributeDef : null);
+ case RoleDef roleDef ->
+ (roleDef.getTranslationOfOrSame().getName().equals(attributeBaseName) ? roleDef : null);
+ default -> throw new IllegalStateException("Unexpected value: " + it.next().obj);
+ };
+
+ if (result != null) {
+ return result;
+ }
+ }
+ }
+
+ throw new IllegalArgumentException("Attribute or role not found: " + attributeBaseName);
+ }
+
+ /**
+ * Checks if an enumeration value exists and translates it to the name in the {@code TRANSLATION OF} model.
+ */
+ private static String getTranslatedEnumValue(EnumerationType type, String enumerationBaseName) {
+ var baseElements = enumerationBaseName.split("\\.");
+ var translatedElements = new ArrayList();
+ var enumeration = type.getConsolidatedEnumeration();
+ for (var baseElement : baseElements) {
+ for (var it = enumeration.getElements(); it.hasNext();) {
+ var element = it.next();
+ if (element.getTranslationOfOrSame().getName().equals(baseElement)) {
+ translatedElements.add(element.getName());
+ enumeration = element.getSubEnumeration();
+ break;
+ }
+ }
+ }
+
+ if (translatedElements.size() != baseElements.length) {
+ throw new IllegalArgumentException("Enumeration value not found: " + enumerationBaseName);
+ }
+
+ return String.join(".", translatedElements);
+ }
+
+ /**
+ * Get the {@link TransferDescription} with all models used in the layerMappings.
+ */
+ private static TransferDescription getTransferDescription() throws Ili2cException, IOException, URISyntaxException {
+ var requiredModels = ObjectMapper.LAYER_MAPPINGS.stream()
+ .map(LayerMapping::objectClass)
+ .flatMap(Collection::stream)
+ .map(c -> c.substring(0, c.indexOf('.')))
+ .distinct()
+ .collect(Collectors.toCollection(ArrayList::new));
+
+ // prepare path to models from resources
+ var resourceUri = ObjectMapper.class.getResource(MODELS_RESOURCE).toURI();
+ var tempDir = Files.createTempDirectory("lk2dxf_");
+ var iliModelsPath = tempDir.toString().replace("\\", "/");
+ if (resourceUri.getScheme().equals("jar")) {
+ try (var fs = FileSystems.newFileSystem(resourceUri, Collections.emptyMap());
+ var sourceFiles = Files.walk(fs.getPath(MODELS_RESOURCE)).filter(Files::isRegularFile)) {
+ for (var source : sourceFiles.toArray(Path[]::new)) {
+ Files.copy(source, Paths.get(tempDir.toString(), source.getFileName().toString()));
+ }
+ }
+ } else {
+ try (var sourceFiles = Files.walk(Paths.get(resourceUri))) {
+ for (var source : sourceFiles.toArray(Path[]::new)) {
+ Files.copy(source, Paths.get(tempDir.toString(), source.getFileName().toString()));
+ }
+ }
+ }
+
+ try {
+ System.out.println("iliModelsPath: " + iliModelsPath);
+ var modelManager = new IliManager();
+ modelManager.setRepositories(new String[]{iliModelsPath});
+ var ili2cConfig = modelManager.getConfig(requiredModels, 0.0);
+ return Ili2c.runCompiler(ili2cConfig);
+ } finally {
+ try (var stream = Files.walk(tempDir)) {
+ stream.sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
+ }
+ }
+ }
+
/**
* Maps the given {@link IomObject} stream to a stream containing their layer information.
+ *
* @param iomObjects The {@link IomObject} stream to map.
* @return A stream of mapped objects.
*/
@@ -45,8 +344,8 @@ public Stream mapObjects(Stream iomObjects) {
// Combine streams using flatMap instead of concat to process objectsWithRef
// after all objects have been processed by the first stream.
var combinedStream = Stream.>>>of(
- () -> iomObjects.map(this::mapObject),
- () -> objectsWithRef.stream().map(this::getLayerMapping)
+ () -> iomObjects.map(b -> mapObject(b, true)),
+ () -> objectsWithUnresolvedRef.stream().map(b -> mapObject(b, false))
).flatMap(Supplier::get);
return combinedStream
@@ -54,54 +353,111 @@ public Stream mapObjects(Stream iomObjects) {
.map(Optional::get);
}
- private Optional mapObject(IomObject iomObject) {
- String objectType = iomObject.getattrvalue(OBJECT_TYPE_ATTRIBUTE);
- if (objectType == null) {
- // Process objects with reference (LKObjekt_Text) after all other objects have been read.
- objectsWithRef.add(iomObject);
+ private Optional mapObject(IomObject iomObject, boolean unresolvedReferencesAllowed) {
+ var element = TRANSFER_DESCRIPTION.getElement(iomObject.getobjecttag());
+ if (element == null) {
+ System.out.println("No element found for object with id \"" + iomObject.getobjectoid() + "\".");
+ return Optional.empty();
+ }
+ if (!(element instanceof AbstractClassDef> classDef)) {
+ System.out.println("Element is not an AbstractClassDef for object with id \"" + iomObject.getobjectoid() + "\".");
return Optional.empty();
}
- objectTypeCache.put(iomObject.getobjectoid(), objectType);
- return getLayerMapping(iomObject);
+ // cache part of the object if necessary
+ var pathElements = CACHE_REQUIREMENTS.get(classDef);
+ if (pathElements != null) {
+ IomObject cacheObject = new Iom_jObject(iomObject.getobjecttag(), iomObject.getobjectoid());
+ for (var pathElement : pathElements) {
+ var value = resolve(iomObject, List.of(pathElement), objectCache);
+ if (value.skipEvaluation() || value.isUndefined()) {
+ continue;
+ }
+ if (value.getValue() != null) {
+ cacheObject.setattrvalue(pathElement.name, value.getValue());
+ } else if (value.getComplexObjects() != null) {
+ cacheObject.addattrobj(pathElement.name, value.getComplexObjects().iterator().next());
+ }
+ }
+ objectCache.put(iomObject.getobjectoid(), cacheObject);
+ }
+
+ return FILTERS.stream()
+ .filter(filter -> filter.filter.stream().allMatch((f) ->
+ switch (f.matches(iomObject, objectCache)) {
+ case UNRESOLVED_REF -> {
+ if (unresolvedReferencesAllowed) {
+ objectsWithUnresolvedRef.add(iomObject);
+ yield false;
+ } else {
+ throw new IllegalStateException("Unresolved reference in object with id \"" + iomObject.getobjectoid() + "\".");
+ }
+ }
+ case MATCH -> true;
+ case NO_MATCH -> false;
+ }))
+ .findFirst()
+ .map(filter -> new MappedObject(
+ iomObject.getobjectoid(),
+ Optional.ofNullable(resolve(iomObject, filter.geometry(), objectCache).getComplexObjects()).map(Collection::iterator).map(Iterator::next).orElse(null),
+ Optional.ofNullable(resolve(iomObject, filter.orientation(), objectCache).getValue()).map(Double::parseDouble).orElse(null),
+ resolve(iomObject, filter.vAlign(), objectCache).getValue(),
+ resolve(iomObject, filter.hAlign(), objectCache).getValue(),
+ resolve(iomObject, filter.text(), objectCache).getValue(),
+ filter.mapping()));
}
- private Optional getLayerMapping(IomObject iomObject) {
- Optional layerMapping = LAYER_MAPPINGS.stream()
- .filter(mapping -> matchesMapping(mapping, iomObject))
- .findFirst();
- if (layerMapping.isEmpty()) {
- System.err.println("No mapping found for object with id \"" + iomObject.getobjectoid() + "\".");
+ private interface Filter {
+ MatchResult matches(IomObject iomObject, Map objectCache);
+
+ enum MatchResult {
+ UNRESOLVED_REF,
+ MATCH,
+ NO_MATCH,
}
- return layerMapping.map(mapping -> MappedObject.create(iomObject, mapping));
}
- private boolean matchesMapping(LayerMapping layerMapping, IomObject iomObject) {
- if (!iomObject.getobjecttag().endsWith("." + layerMapping.objectClass())) {
- return false;
- }
+ private record Mapper(
+ List filter,
+ LayerMapping mapping,
+ List geometry,
+ List orientation,
+ List vAlign,
+ List hAlign,
+ List text
+ ) {
+ }
- return layerMapping.mapping()
- .entrySet()
- .stream()
- .allMatch(e -> {
- String attrName = e.getKey();
- String attrValue = getAttributeValue(iomObject, attrName);
- List values = e.getValue();
- return values.contains(attrValue) || matchesEnumSubValue(values, attrValue);
- });
+ private record TagFilter(String tag) implements Filter {
+ @Override
+ public MatchResult matches(IomObject iomObject, Map objectCache) {
+ return iomObject.getobjecttag().equals(tag) ? MatchResult.MATCH : MatchResult.NO_MATCH;
+ }
}
- private String getAttributeValue(IomObject iomObject, String attributeName) {
- String attrValue = iomObject.getattrvalue(attributeName);
- if (attrValue == null && attributeName.equals(OBJECT_TYPE_ATTRIBUTE)) {
- String lkObjektId = iomObject.getattrobj(OBJECT_REF_ATTRIBUTE, 0).getobjectrefoid();
- attrValue = objectTypeCache.get(lkObjektId);
+ private record PathMatcher(List pathElements, List values) implements Filter {
+ @Override
+ public MatchResult matches(IomObject iomObject, Map objectCache) {
+ var value = resolve(iomObject, pathElements, objectCache);
+ if (value.skipEvaluation()) {
+ return MatchResult.UNRESOLVED_REF;
+ } else if (value.isUndefined()) {
+ return MatchResult.NO_MATCH;
+ } else {
+ if (values.contains(value.getValue()) || matchesEnumSubValue(values, value.getValue())) {
+ return MatchResult.MATCH;
+ } else {
+ return MatchResult.NO_MATCH;
+ }
+ }
}
- return attrValue;
}
- private boolean matchesEnumSubValue(List allowedValues, String attrValue) {
- return allowedValues.stream().anyMatch(value -> attrValue.startsWith(value + "."));
+ private record PathElement(String name, Resolution resolution, AbstractLeafElement element) {
+ public enum Resolution {
+ ATTRIBUTE,
+ STRUCTURE,
+ REFERENCE,
+ }
}
}
diff --git a/src/main/resources/mappings.csv b/src/main/resources/mappings.csv
index 3f3f6ce..59184ee 100644
--- a/src/main/resources/mappings.csv
+++ b/src/main/resources/mappings.csv
@@ -1,49 +1,49 @@
-Layer,ObjectClass,GeometryType,Geometry,Color,Orientation,VAlign,HAlign,Text,Symbol,Linetype,Lineweight,Textsize,Font,Mapping
-STILLGELEGTE-LEITUNGEN,LKLinie,Line,Linie,8,,,,,,DashDotDot,0.25,,,Status=tot
-ABW-LINIEFWK-GENAU,LKLinie,Line,Linie,210,,,,,,Continuous,0.25,,,Objektart=Abwasser.Fernwirkkabel Lagebestimmung=genau
-ABW-LINIEFWK-UNGENAU,LKLinie,Line,Linie,210,,,,,,Dashed,0.25,,,Objektart=Abwasser.Fernwirkkabel Lagebestimmung=ungenau|unbekannt
-ABW-LINIE-GENAU,LKLinie,Line,Linie,210,,,,,,Continuous,0.25,,,Objektart=Abwasser.Haltung_Kanal|Abwasser.Schutzrohr Lagebestimmung=genau
-ABW-LINIE-UNGENAU,LKLinie,Line,Linie,210,,,,,,Dashed,0.25,,,Objektart=Abwasser.Haltung_Kanal|Abwasser.Schutzrohr Lagebestimmung=ungenau|unbekannt
-ABW-FLAECHE,LKFlaeche,Surface,Flaeche,210,,,,,,,,,,Objektart=Abwasser
-ABW-PUNKT,LKPunkt,Point,SymbolPos,210,SymbolOri,,,,BAW15,,,,,Objektart=Abwasser
-ABW-TEXT,LKObjekt_Text,Point,TextPos,210,TextOri,TextVAli,TextHAli,Textinhalt,,,,1.25,Cadastra,Objektart=Abwasser
-ELE-LINIE-GENAU,LKLinie,Line,Linie,10,,,,,,Continuous,0.25,,,Objektart=Elektrizitaet.Trasse.unterirdisch Lagebestimmung=genau
-ELE-LINIE-UNGENAU,LKLinie,Line,Linie,10,,,,,,Dashed,0.25,,,Objektart=Elektrizitaet.Trasse.unterirdisch Lagebestimmung=ungenau|unbekannt
-ELE-LINIE-OBERIRDISCH,LKLinie,Line,Linie,10,,,,,,Continuous,0.25,,,Objektart=Elektrizitaet.Trasse.oberirdisch|Elektrizitaet.AnkerStrebe
-ELE-FLAECHE,LKFlaeche,Surface,Flaeche,10,,,,,,,,,,Objektart=Elektrizitaet
-ELE-PUNKT,LKPunkt,Point,SymbolPos,10,SymbolOri,,,,BEW978,,,,,Objektart=Elektrizitaet
-ELE-TEXT,LKObjekt_Text,Point,TextPos,10,TextOri,TextVAli,TextHAli,Textinhalt,,,,1.25,Cadastra,Objektart=Elektrizitaet
-GAS-LINIEFWK-GENAU,LKLinie,Line,Linie,22,,,,,,Continuous,0.25,,,Objektart=Gas.Fernwirkkabel Labebestimmung=genau
-GAS-LINIEFWK-UNGENAU,LKLinie,Line,Linie,22,,,,,,Dashed,0.25,,,Objektart=Gas.Fernwirkkabel Labebestimmung=ungenau|unbekannt
-GAS-LINIE-GENAU,LKLinie,Line,Linie,22,,,,,,Continuous,0.25,,,Objektart=Gas.Leitung|Gas.Schutzrohr Labebestimmung=genau
-GAS-LINIE-UNGENAU,LKLinie,Line,Linie,22,,,,,,Dashed,0.25,,,Objektart=Gas.Leitung|Gas.Schutzrohr Labebestimmung=ungenau|unbekannt
-GAS-FLAECHE,LKFlaeche,Surface,Flaeche,22,,,,,,,,,,Objektart=Gas
-GAS-PUNKT,LKPunkt,Point,SymbolPos,22,SymbolOri,,,,BGA957,,,,,Objektart=Gas
-GAS-TEXT,LKObjekt_Text,Point,TextPos,22,TextOri,TextVAli,TextHAli,Textinhalt,,,,1.25,Cadastra,Objektart=Gas
-WAS-LINIEFWK-GENAU,LKLinie,Line,Linie,170,,,,,,Continuous,0.25,,,Objektart=Wasser.Fernwirkkabel Lagebestimmung=genau
-WAS-LINIEFWK-UNGENAU,LKLinie,Line,Linie,170,,,,,,Dashed,0.25,,,Objektart=Wasser.Fernwirkkabel Lagebestimmung=ungenau|unbekannt
-WAS-LINIE-GENAU,LKLinie,Line,Linie,170,,,,,,Continuous,0.25,,,Objektart=Wasser.Leitung|Wasser.Schutzrohr Lagebestimmung=genau
-WAS-LINIE-UNGENAU,LKLinie,Line,Linie,170,,,,,,Dashed,0.25,,,Objektart=Wasser.Leitung|Wasser.Schutzrohr Lagebestimmung=ungenau|unbekannt
-WAS-FLAECHE,LKFlaeche,Surface,Flaeche,170,,,,,,,,,,Objektart=Wasser
-WAS-PUNKT,LKPunkt,Point,SymbolPos,170,SymbolOri,,,,BWA15,,,,,Objektart=Wasser
-WAS-TEXT,LKObjekt_Text,Point,TextPos,170,TextOri,TextVAli,TextHAli,Textinhalt,,,,1.25,Cadastra,Objektart=Wasser
-FER-LINIEFWK-GENAU,LKLinie,Line,Linie,30,,,,,,Continuous,0.25,,,Objektart=Fernwaerme.Fernwirkkabel Lagebestimmung=genau
-FER-LINIEFWK-UNGENAU,LKLinie,Line,Linie,30,,,,,,Dashed,0.25,,,Objektart=Fernwaerme.Fernwirkkabel Lagebestimmung=ungenau|unbekannt
-FER-LINIE-GENAU,LKLinie,Line,Linie,30,,,,,,Continuous,0.25,,,Objektart=Fernwaerme.Trasse Lagebestimmung=genau
-FER-LINIE-UNGENAU,LKLinie,Line,Linie,30,,,,,,Dashed,0.25,,,Objektart=Fernwaerme.Trasse Lagebestimmung=ungenau|unbekannt
-FER-FLAECHE,LKFlaeche,Surface,Flaeche,30,,,,,,,,,,Objektart=Fernwaerme
-FER-PUNKT,LKPunkt,Point,SymbolPos,30,SymbolOri,,,,BWA965,,,,,Objektart=Fernwaerme
-FER-TEXT,LKObjekt_Text,Point,TextPos,30,TextOri,TextVAli,TextHAli,Textinhalt,,,,1.25,Cadastra,Objektart=Fernwaerme
-KOM-LINIE-GENAU,LKLinie,Line,Linie,80,,,,,,Continuous,0.25,,,Objektart=Kommunikation.Trasse.unterirdisch Lagebestimmung=genau
-KOM-LINIE-UNGENAU,LKLinie,Line,Linie,80,,,,,,Dashed,0.25,,,Objektart=Kommunikation.Trasse.unterirdisch Lagebestimmung=ungenau|unbekannt
-KOM-LINIE-OBERIRDISCH,LKLinie,Line,Linie,80,,,,,,Continuous,0.25,,,Objektart=Kommunikation.Trasse.oberirdisch
-KOM-FLAECHE,LKFlaeche,Surface,Flaeche,80,,,,,,,,,,Objektart=Kommunikation
-KOM-PUNKT,LKPunkt,Point,SymbolPos,80,SymbolOri,,,,BEW15,,,,,Objektart=Kommunikation
-KOM-TEXT,LKObjekt_Text,Point,TextPos,80,TextOri,TextVAli,TextHAli,Textinhalt,,,,1.25,Cadastra,Objektart=Kommunikation
-WEI-LINIEFWK-GENAU,LKLinie,Line,Linie,50,,,,,,Continuous,0.25,,,Objektart=weitereMedien.Fernwirkkabel Lagebestimmung=genau
-WEI-LINIEFWK-UNGENAU,LKLinie,Line,Linie,50,,,,,,Dashed,0.25,,,Objektart=weitereMedien.Fernwirkkabel Lagebestimmung=ungenau|unbekannt
-WEI-LINIE-GENAU,LKLinie,Line,Linie,50,,,,,,Continuous,0.25,,,Objektart=weitereMedien.Leitung|weitereMedien.Schutzrohr Lagebestimmung=genau
-WEI-LINIE-UNGENAU,LKLinie,Line,Linie,50,,,,,,Dashed,0.25,,,Objektart=weitereMedien.Leitung|weitereMedien.Schutzrohr Lagebestimmung=ungenau|unbekannt
-WEI-FLAECHE,LKFlaeche,Surface,Flaeche,50,,,,,,,,,,Objektart=weitereMedien
-WEI-PUNKT,LKPunkt,Point,SymbolPos,50,SymbolOri,,,,BEW15,,,,,Objektart=weitereMedien
-WEI-TEXT,LKObjekt_Text,Point,TextPos,50,TextOri,TextVAli,TextHAli,Textinhalt,,,,1.25,Cadastra,Objektart=weitereMedien
+Layer,ObjectClass,Mapping,Output,Geometry,Orientation,VAlign,HAlign,Text,Color,Symbol,Linetype,Lineweight,Textsize,Font
+STILLGELEGTE-LEITUNGEN,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Status=tot,Line,Linie,,,,,8,,DashDotDot,0.25,,
+ABW-LINIEFWK-GENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Abwasser.Fernwirkkabel Lagebestimmung=genau,Line,Linie,,,,,210,,Continuous,0.25,,
+ABW-LINIEFWK-UNGENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Abwasser.Fernwirkkabel Lagebestimmung=ungenau|unbekannt,Line,Linie,,,,,210,,Dashed,0.25,,
+ABW-LINIE-GENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Abwasser.Haltung_Kanal|Abwasser.Schutzrohr Lagebestimmung=genau,Line,Linie,,,,,210,,Continuous,0.25,,
+ABW-LINIE-UNGENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Abwasser.Haltung_Kanal|Abwasser.Schutzrohr Lagebestimmung=ungenau|unbekannt,Line,Linie,,,,,210,,Dashed,0.25,,
+ABW-FLAECHE,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKFlaeche|SIA405_LKMap_2015.SIA405_LKMap.LKFlaeche|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKSURFACE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKSURFACE,Objektart=Abwasser,Surface,Flaeche,,,,,210,,,,,
+ABW-PUNKT,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKPunkt|SIA405_LKMap_2015.SIA405_LKMap.LKPunkt|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKPOINT|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKPOINT,Objektart=Abwasser,Point,SymbolPos,SymbolOri,,,,210,PointMarker,,,,
+ABW-TEXT,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKObjekt_Text|SIA405_LKMap_2015.SIA405_LKMap.LKObjekt_Text|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKOBJET_Texte|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKOBJET_Texte,LKObjektRef->Objektart=Abwasser,Text,TextPos,TextOri,TextVAli,TextHAli,Textinhalt,210,,,,1.25,Cadastra
+ELE-LINIE-GENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Elektrizitaet.Trasse.unterirdisch Lagebestimmung=genau,Line,Linie,,,,,10,,Continuous,0.25,,
+ELE-LINIE-UNGENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Elektrizitaet.Trasse.unterirdisch Lagebestimmung=ungenau|unbekannt,Line,Linie,,,,,10,,Dashed,0.25,,
+ELE-LINIE-OBERIRDISCH,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Elektrizitaet.Trasse.oberirdisch|Elektrizitaet.AnkerStrebe,Line,Linie,,,,,10,,Continuous,0.25,,
+ELE-FLAECHE,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKFlaeche|SIA405_LKMap_2015.SIA405_LKMap.LKFlaeche|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKSURFACE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKSURFACE,Objektart=Elektrizitaet,Surface,Flaeche,,,,,10,,,,,
+ELE-PUNKT,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKPunkt|SIA405_LKMap_2015.SIA405_LKMap.LKPunkt|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKPOINT|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKPOINT,Objektart=Elektrizitaet,Point,SymbolPos,SymbolOri,,,,10,PointMarker,,,,
+ELE-TEXT,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKObjekt_Text|SIA405_LKMap_2015.SIA405_LKMap.LKObjekt_Text|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKOBJET_Texte|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKOBJET_Texte,LKObjektRef->Objektart=Elektrizitaet,Text,TextPos,TextOri,TextVAli,TextHAli,Textinhalt,10,,,,1.25,Cadastra
+GAS-LINIEFWK-GENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Gas.Fernwirkkabel Lagebestimmung=genau,Line,Linie,,,,,22,,Continuous,0.25,,
+GAS-LINIEFWK-UNGENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Gas.Fernwirkkabel Lagebestimmung=ungenau|unbekannt,Line,Linie,,,,,22,,Dashed,0.25,,
+GAS-LINIE-GENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Gas.Leitung|Gas.Schutzrohr Lagebestimmung=genau,Line,Linie,,,,,22,,Continuous,0.25,,
+GAS-LINIE-UNGENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Gas.Leitung|Gas.Schutzrohr Lagebestimmung=ungenau|unbekannt,Line,Linie,,,,,22,,Dashed,0.25,,
+GAS-FLAECHE,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKFlaeche|SIA405_LKMap_2015.SIA405_LKMap.LKFlaeche|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKSURFACE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKSURFACE,Objektart=Gas,Surface,Flaeche,,,,,22,,,,,
+GAS-PUNKT,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKPunkt|SIA405_LKMap_2015.SIA405_LKMap.LKPunkt|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKPOINT|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKPOINT,Objektart=Gas,Point,SymbolPos,SymbolOri,,,,22,PointMarker,,,,
+GAS-TEXT,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKObjekt_Text|SIA405_LKMap_2015.SIA405_LKMap.LKObjekt_Text|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKOBJET_Texte|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKOBJET_Texte,LKObjektRef->Objektart=Gas,Text,TextPos,TextOri,TextVAli,TextHAli,Textinhalt,22,,,,1.25,Cadastra
+WAS-LINIEFWK-GENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Wasser.Fernwirkkabel Lagebestimmung=genau,Line,Linie,,,,,170,,Continuous,0.25,,
+WAS-LINIEFWK-UNGENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Wasser.Fernwirkkabel Lagebestimmung=ungenau|unbekannt,Line,Linie,,,,,170,,Dashed,0.25,,
+WAS-LINIE-GENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Wasser.Leitung|Wasser.Schutzrohr Lagebestimmung=genau,Line,Linie,,,,,170,,Continuous,0.25,,
+WAS-LINIE-UNGENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Wasser.Leitung|Wasser.Schutzrohr Lagebestimmung=ungenau|unbekannt,Line,Linie,,,,,170,,Dashed,0.25,,
+WAS-FLAECHE,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKFlaeche|SIA405_LKMap_2015.SIA405_LKMap.LKFlaeche|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKSURFACE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKSURFACE,Objektart=Wasser,Surface,Flaeche,,,,,170,,,,,
+WAS-PUNKT,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKPunkt|SIA405_LKMap_2015.SIA405_LKMap.LKPunkt|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKPOINT|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKPOINT,Objektart=Wasser,Point,SymbolPos,SymbolOri,,,,170,PointMarker,,,,
+WAS-TEXT,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKObjekt_Text|SIA405_LKMap_2015.SIA405_LKMap.LKObjekt_Text|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKOBJET_Texte|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKOBJET_Texte,LKObjektRef->Objektart=Wasser,Text,TextPos,TextOri,TextVAli,TextHAli,Textinhalt,170,,,,1.25,Cadastra
+FER-LINIEFWK-GENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Fernwaerme.Fernwirkkabel Lagebestimmung=genau,Line,Linie,,,,,30,,Continuous,0.25,,
+FER-LINIEFWK-UNGENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Fernwaerme.Fernwirkkabel Lagebestimmung=ungenau|unbekannt,Line,Linie,,,,,30,,Dashed,0.25,,
+FER-LINIE-GENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Fernwaerme.Trasse Lagebestimmung=genau,Line,Linie,,,,,30,,Continuous,0.25,,
+FER-LINIE-UNGENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Fernwaerme.Trasse Lagebestimmung=ungenau|unbekannt,Line,Linie,,,,,30,,Dashed,0.25,,
+FER-FLAECHE,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKFlaeche|SIA405_LKMap_2015.SIA405_LKMap.LKFlaeche|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKSURFACE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKSURFACE,Objektart=Fernwaerme,Surface,Flaeche,,,,,30,,,,,
+FER-PUNKT,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKPunkt|SIA405_LKMap_2015.SIA405_LKMap.LKPunkt|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKPOINT|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKPOINT,Objektart=Fernwaerme,Point,SymbolPos,SymbolOri,,,,30,PointMarker,,,,
+FER-TEXT,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKObjekt_Text|SIA405_LKMap_2015.SIA405_LKMap.LKObjekt_Text|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKOBJET_Texte|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKOBJET_Texte,LKObjektRef->Objektart=Fernwaerme,Text,TextPos,TextOri,TextVAli,TextHAli,Textinhalt,30,,,,1.25,Cadastra
+KOM-LINIE-GENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Kommunikation.Trasse.unterirdisch Lagebestimmung=genau,Line,Linie,,,,,80,,Continuous,0.25,,
+KOM-LINIE-UNGENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Kommunikation.Trasse.unterirdisch Lagebestimmung=ungenau|unbekannt,Line,Linie,,,,,80,,Dashed,0.25,,
+KOM-LINIE-OBERIRDISCH,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=Kommunikation.Trasse.oberirdisch,Line,Linie,,,,,80,,Continuous,0.25,,
+KOM-FLAECHE,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKFlaeche|SIA405_LKMap_2015.SIA405_LKMap.LKFlaeche|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKSURFACE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKSURFACE,Objektart=Kommunikation,Surface,Flaeche,,,,,80,,,,,
+KOM-PUNKT,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKPunkt|SIA405_LKMap_2015.SIA405_LKMap.LKPunkt|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKPOINT|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKPOINT,Objektart=Kommunikation,Point,SymbolPos,SymbolOri,,,,80,PointMarker,,,,
+KOM-TEXT,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKObjekt_Text|SIA405_LKMap_2015.SIA405_LKMap.LKObjekt_Text|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKOBJET_Texte|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKOBJET_Texte,LKObjektRef->Objektart=Kommunikation,Text,TextPos,TextOri,TextVAli,TextHAli,Textinhalt,80,,,,1.25,Cadastra
+WEI-LINIEFWK-GENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=weitereMedien.Fernwirkkabel Lagebestimmung=genau,Line,Linie,,,,,50,,Continuous,0.25,,
+WEI-LINIEFWK-UNGENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=weitereMedien.Fernwirkkabel Lagebestimmung=ungenau|unbekannt,Line,Linie,,,,,50,,Dashed,0.25,,
+WEI-LINIE-GENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=weitereMedien.Leitung|weitereMedien.Schutzrohr Lagebestimmung=genau,Line,Linie,,,,,50,,Continuous,0.25,,
+WEI-LINIE-UNGENAU,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKLinie|SIA405_LKMap_2015.SIA405_LKMap.LKLinie|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKLIGNE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKLIGNE,Objektart=weitereMedien.Leitung|weitereMedien.Schutzrohr Lagebestimmung=ungenau|unbekannt,Line,Linie,,,,,50,,Dashed,0.25,,
+WEI-FLAECHE,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKFlaeche|SIA405_LKMap_2015.SIA405_LKMap.LKFlaeche|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKSURFACE|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKSURFACE,Objektart=weitereMedien,Surface,Flaeche,,,,,50,,,,,
+WEI-PUNKT,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKPunkt|SIA405_LKMap_2015.SIA405_LKMap.LKPunkt|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKPOINT|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKPOINT,Objektart=weitereMedien,Point,SymbolPos,SymbolOri,,,,50,PointMarker,,,,
+WEI-TEXT,SIA405_LKMap_2015_LV95.SIA405_LKMap.LKObjekt_Text|SIA405_LKMap_2015.SIA405_LKMap.LKObjekt_Text|SIA405_LKMap_2015_f_LV95.SIA405_LKMap_f.LKOBJET_Texte|SIA405_LKMap_2015_f.SIA405_LKMap_f.LKOBJET_Texte,LKObjektRef->Objektart=weitereMedien,Text,TextPos,TextOri,TextVAli,TextHAli,Textinhalt,50,,,,1.25,Cadastra
diff --git a/src/main/resources/models/Base_d-20181005.ili b/src/main/resources/models/Base_d-20181005.ili
new file mode 100644
index 0000000..9389f6b
--- /dev/null
+++ b/src/main/resources/models/Base_d-20181005.ili
@@ -0,0 +1,167 @@
+!! Base_d-20180410.ili
+!! 10.4.2018 Neu auch mit Base_LV95 in der gleichen Datei
+
+INTERLIS 2.3;
+
+TYPE MODEL Base (de) AT "http://www.sia.ch/405"
+ VERSION "05.10.2018" =
+
+ IMPORTS UNQUALIFIED INTERLIS; !! neu 8.11.2004, importiert INTERLIS 2.3. Basisunits
+ IMPORTS Units;
+ !! IMPORTS CoordSys;
+ !! REFSYSTEM BASKET BCoordSys ~ CoordSys.CoordsysTopic;
+
+!! Copyright 2003 - 2018 SIA
+
+!! Änderungen und Ergänzungen dürfen zum Eigengebrauch getätigt werden.
+!! Sie müssen innerhalb der Datei so dokumentiert sein, dass sichtbar wird,
+!! welche Änderungen getätigt wurden (Einfügen von INTERLIS Kommentar).
+!! Die Originalmodelldatei Base.ili und darauf basierende
+!! abgeänderte Versionen dürfen nicht weiterverkauft werden.
+
+!! Geprueft mit Compiler Version 4.7.7 vom 08.02.2018
+!! Sachbearbeiter: Stefan Burckhardt / SIA 405 Kommission
+
+!! 18.4.2014 Korrektur Wertebereich für LKKoord / HKoord für Bezugsrahmen LV95 (1070000.000 statt 170000.000 .. 1300000.000)
+
+ DOMAIN
+ !! Allgemeine Typen fuer alle Modelle
+
+ Orientierung = 0.0 .. 359.9 CIRCULAR [Units.Angle_Degree]; !! Anpassen auf Geobasisdatendefinition?
+
+ LKoord = COORD 480000.000 .. 840000.000 [m], !!{CHLV03/1},
+ 70000.000 .. 300000.000 [m], !!{CHLV03/2},
+ ROTATION 2 -> 1;
+
+ HKoord = COORD 480000.000 .. 840000.000 [m], !!{CHLV03/1},
+ 70000.000 .. 300000.000 [m], !!{CHLV03/2},
+ -200.000 .. 5000.000 [m], !!{SwissOrthometricAlt},
+ ROTATION 2 -> 1;
+
+!! 10.4.2018 falls Bezugsrahmen LV95 untenstehende Version Base_LV95 verwenden)
+
+
+ Hoehe = -200.000 .. 5000.000 [m]; !!{SwissOrthometricAlt};
+
+ Polyline = POLYLINE WITH (STRAIGHTS, ARCS) VERTEX LKoord;
+
+!! neu 23.5.2012
+!! Surface = SURFACE WITH (STRAIGHTS, ARCS) VERTEX LKoord WITHOUT OVERLAPS > 0.000; !! Einzelflächen
+ Surface = SURFACE WITH (STRAIGHTS, ARCS) VERTEX LKoord WITHOUT OVERLAPS > 0.050; !! Einzelflächen
+
+!! neu 2.8.2011
+ Polyline3D = POLYLINE WITH (STRAIGHTS, ARCS) VERTEX HKoord;
+
+!! neu 23.5.2012
+!! Surface3D = SURFACE WITH (STRAIGHTS, ARCS) VERTEX HKoord WITHOUT OVERLAPS > 0.000;
+ Surface3D = SURFACE WITH (STRAIGHTS, ARCS) VERTEX HKoord WITHOUT OVERLAPS > 0.050;
+
+!! neu 25.1.2012
+ CLASS BaseClass (ABSTRACT) =
+ !! BaseClass für alle Subklassen (Subclass - Vererbung)
+
+ END BaseClass;
+
+!! neu 4.8.2011 / 21.2.2012 (geerbt von BaseClass)
+ CLASS TextPos (ABSTRACT) EXTENDS BaseClass =
+!! OID AS ANYOID; !! Hier definiert als ANY. Genaue Definition und Wahl durch die Transfergemeinschaft gemäss folgenden Varianten: Objektidentifikation gemäss INTERLIS 2 Definition für OID (entweder als UUIDOID nach ISO 11578 oder INTERLIS 2 STANDARDOID), siehe auch INTERLIS 2 Referenzhandbuch www.interlis.ch
+ TextPos: MANDATORY LKoord;
+ TextOri: MANDATORY Orientierung;
+ TextHAli: MANDATORY HALIGNMENT;
+ TextVAli: MANDATORY VALIGNMENT;
+ END TextPos;
+
+!! neu 30.8.2011 / 21.2.2012 (geerbt von BaseClass)
+ CLASS SymbolPos (ABSTRACT) EXTENDS BaseClass =
+!! OID AS ANYOID; !! Hier definiert als ANY. Genaue Definition und Wahl durch die Transfergemeindschaft gemäss folgenden Varianten: Objektidentifikation gemäss INTERLIS 2 Definition für OID (entweder als INTERLIS 2 STANDARD-OID oder UUID-OID nach ISO 11578), siehe auch INTERLIS 2 Referenzhandbuch www.interlis.ch
+ SymbolPos: MANDATORY LKoord; !! Landeskoordinate Ost/Nord, 2D Koordinaten
+ SymbolOri: MANDATORY Orientierung; !! Default: 90 Grad
+!! 21.2.2012 verschoben in SIA405_Base.ili
+!! SymbolskalierungLaengs: 0.0..9.9;
+!! SymbolskalierungHoch: 0.0..9.9;
+ END SymbolPos;
+
+END Base.
+
+
+
+
+TYPE MODEL Base_LV95 (de) AT "http://www.sia.ch/405"
+ VERSION "05.10.2018" =
+
+ IMPORTS UNQUALIFIED INTERLIS; !! neu 8.11.2004, importiert INTERLIS 2.3. Basisunits
+ IMPORTS Units;
+ !! IMPORTS CoordSys;
+ !! REFSYSTEM BASKET BCoordSys ~ CoordSys.CoordsysTopic;
+
+!! Copyright 2003 - 2018 SIA
+
+!! Änderungen und Ergänzungen dürfen zum Eigengebrauch getätigt werden.
+!! Sie müssen innerhalb der Datei so dokumentiert sein, dass sichtbar wird,
+!! welche Änderungen getätigt wurden (Einfügen von INTERLIS Kommentar).
+!! Die Originalmodelldatei Base.ili und darauf basierende
+!! abgeänderte Versionen dürfen nicht weiterverkauft werden.
+
+!! Geprueft mit Compiler Version 4.7.7 vom 08.02.2018
+!! Sachbearbeiter: Stefan Burckhardt / SIA 405 Kommission
+
+!! 18.4.2014 Korrektur Wertebereich für LKKoord / HKoord für Bezugsrahmen LV95 (1070000.000 statt 170000.000 .. 1300000.000)
+
+ DOMAIN
+ !! Allgemeine Typen fuer alle Modelle
+
+ Orientierung = 0.0 .. 359.9 CIRCULAR [Units.Angle_Degree]; !! Anpassen auf Geobasisdatendefinition?
+
+
+!! für Bezugsrahmen LV95 folgende Definition verwenden
+!! 18.4.2014
+ LKoord = COORD 2480000.000 .. 2840000.000 [m], !!{CHLV95/1},
+ 1070000.000 .. 1300000.000 [m], !!{CHLV95/2},
+ ROTATION 2 -> 1;
+
+ HKoord = COORD 2480000.000 .. 2840000.000 [m], !!{CHL95/1},
+ 1070000.000 .. 1300000.000 [m], !!{CHLV95/2},
+ -200.000 .. 5000.000 [m], !!{SwissOrthometricAlt},
+ ROTATION 2 -> 1;
+
+ Hoehe = -200.000 .. 5000.000 [m]; !!{SwissOrthometricAlt};
+
+ Polyline = POLYLINE WITH (STRAIGHTS, ARCS) VERTEX LKoord;
+
+!! neu 23.5.2012
+!! Surface = SURFACE WITH (STRAIGHTS, ARCS) VERTEX LKoord WITHOUT OVERLAPS > 0.000; !! Einzelflächen
+ Surface = SURFACE WITH (STRAIGHTS, ARCS) VERTEX LKoord WITHOUT OVERLAPS > 0.050; !! Einzelflächen
+
+!! neu 2.8.2011
+ Polyline3D = POLYLINE WITH (STRAIGHTS, ARCS) VERTEX HKoord;
+
+!! neu 23.5.2012
+!! Surface3D = SURFACE WITH (STRAIGHTS, ARCS) VERTEX HKoord WITHOUT OVERLAPS > 0.000;
+ Surface3D = SURFACE WITH (STRAIGHTS, ARCS) VERTEX HKoord WITHOUT OVERLAPS > 0.050;
+
+!! neu 25.1.2012
+ CLASS BaseClass (ABSTRACT) =
+ !! BaseClass für alle Subklassen (Subclass - Vererbung)
+
+ END BaseClass;
+
+!! neu 4.8.2011 / 21.2.2012 (geerbt von BaseClass)
+ CLASS TextPos (ABSTRACT) EXTENDS BaseClass =
+!! OID AS ANYOID; !! Hier definiert als ANY. Genaue Definition und Wahl durch die Transfergemeinschaft gemäss folgenden Varianten: Objektidentifikation gemäss INTERLIS 2 Definition für OID (entweder als UUIDOID nach ISO 11578 oder INTERLIS 2 STANDARDOID), siehe auch INTERLIS 2 Referenzhandbuch www.interlis.ch
+ TextPos: MANDATORY LKoord;
+ TextOri: MANDATORY Orientierung;
+ TextHAli: MANDATORY HALIGNMENT;
+ TextVAli: MANDATORY VALIGNMENT;
+ END TextPos;
+
+!! neu 30.8.2011 / 21.2.2012 (geerbt von BaseClass)
+ CLASS SymbolPos (ABSTRACT) EXTENDS BaseClass =
+!! OID AS ANYOID; !! Hier definiert als ANY. Genaue Definition und Wahl durch die Transfergemeindschaft gemäss folgenden Varianten: Objektidentifikation gemäss INTERLIS 2 Definition für OID (entweder als INTERLIS 2 STANDARD-OID oder UUID-OID nach ISO 11578), siehe auch INTERLIS 2 Referenzhandbuch www.interlis.ch
+ SymbolPos: MANDATORY LKoord; !! Landeskoordinate Ost/Nord, 2D Koordinaten
+ SymbolOri: MANDATORY Orientierung; !! Default: 90 Grad
+!! 21.2.2012 verschoben in SIA405_Base.ili
+!! SymbolskalierungLaengs: 0.0..9.9;
+!! SymbolskalierungHoch: 0.0..9.9;
+ END SymbolPos;
+
+END Base_LV95.
\ No newline at end of file
diff --git a/src/main/resources/models/Base_f-20181005.ili b/src/main/resources/models/Base_f-20181005.ili
new file mode 100644
index 0000000..86d33ea
--- /dev/null
+++ b/src/main/resources/models/Base_f-20181005.ili
@@ -0,0 +1,167 @@
+!! Base_f-20180410.ili
+!! 10.4.2018 Neu auch mit Base_f_LV95 in der gleichen Datei
+
+INTERLIS 2.3;
+
+TYPE MODEL Base_f (fr) AT "http://www.sia.ch/405"
+ VERSION "05.10.2018" TRANSLATION OF Base [ "05.10.2018" ] =
+
+ IMPORTS UNQUALIFIED INTERLIS; !! nouveau 8.11.2004, importer INTERLIS 2.3. unitées de base
+ IMPORTS Units;
+ !! IMPORTS CoordSys;
+ !! REFSYSTEM BASKET BCoordSys ~ CoordSys.CoordsysTopic;
+
+!! Copyright 2003 - 2018 SIA
+
+!! Des changements et compléments sont permis pour l'utilisation personnelle.
+!! Ceux-ci doivent être documentés visiblement, afin de repérer les modifications
+!! apportées (insérer des commentaires INTERLIS).
+!! Les fichiers modèles originaux et les versions
+!! modifiées à partir de ceux-ci ne peuvent pas être revendus.
+
+!! Vérifié avec Compiler version 4.7.7 du 08.02.2018
+!! Greffier: Stefan Burckhardt / Commission SIA 405
+
+!! 4.2.2013 Corrections et adaptions française
+!! 18.4.2014 Correction domaine des valeurs pour CoordNat et CoordH pour LV95 (1070000.000 au lieu de 170000.000 .. 1300000.000)
+!! 30.10.2017 Polyligne au lieu de Polyline
+!! 10.4.2018 Checked with Compiler 4.7.7 vom 08.02.2018
+!! to do 5.10.2018 Checked with Compiler 4.7.7 vom 08.02.2018
+
+
+ DOMAIN
+ !! Types généraux pour tous les modèles
+
+ Orientation = 0.0 .. 359.9 CIRCULAR [Units.Angle_Degree];
+
+ CoordNat = COORD 480000.000 .. 840000.000 [m], !!CHMN03/1,
+ 70000.000 .. 300000.000 [m], !!CHMN03/2,
+ ROTATION 2 -> 1;
+
+ CoordH = COORD 480000.000 .. 840000.000 [m], !!CHMN03/1,
+ 70000.000 .. 300000.000 [m], !!CHMN03/2,
+ -200.000 .. 5000.000 [m], !!SwissOrthometricAlt,
+ ROTATION 2 -> 1;
+
+
+ Altitude = -200.000 .. 5000.000 [m]; !!SwissOrthometricAlt;
+
+ Polyligne = POLYLINE WITH (STRAIGHTS, ARCS) VERTEX CoordNat;
+
+ !! nouveau 2.1.2013
+ !! Surface = SURFACE WITH (STRAIGHTS, ARCS) VERTEX CoordNat WITHOUT OVERLAPS > 0.000;
+ Surface = SURFACE WITH (STRAIGHTS, ARCS) VERTEX CoordNat WITHOUT OVERLAPS > 0.050;
+
+!! nouveau 2.8.2011
+ Polyligne3D = POLYLINE WITH (STRAIGHTS, ARCS) VERTEX CoordH;
+
+!! nouveau 23.5.2012
+!! Surface3D = SURFACE WITH (STRAIGHTS, ARCS) VERTEX HKoord WITHOUT OVERLAPS > 0.000;
+ Surface3D = SURFACE WITH (STRAIGHTS, ARCS) VERTEX CoordH WITHOUT OVERLAPS > 0.050;
+
+
+!! nouveau 25.1.2012
+ CLASS BaseClass (ABSTRACT) =
+ !! BaseClass pour toutes les sub classes (Subclass - héritage)
+
+ END BaseClass;
+
+!! nouveau 4.8.2011 / 21.2.2012 (hérité de BaseClass)
+ CLASS TextePos (ABSTRACT) EXTENDS BaseClass =
+ TEXTEPOS: MANDATORY CoordNat;
+ TEXTEORI: MANDATORY Orientation;
+ TEXTEHALI: MANDATORY HALIGNMENT;
+ TEXTEVALI: MANDATORY VALIGNMENT;
+ END TextePos;
+
+!! nouveau 30.8.2011 / 21.2.2012 (hérité de BaseClass)
+ CLASS SymbolePos (ABSTRACT) EXTENDS BaseClass =
+ SYMBOLEPOS: MANDATORY CoordNat;
+ SYMBOLEORI: MANDATORY Orientation; !! Default: 90 degree
+
+ END SymbolePos;
+
+END Base_f.
+
+
+
+TYPE MODEL Base_f_LV95 (fr) AT "http://www.sia.ch/405"
+ VERSION "10.04.2018" TRANSLATION OF Base_LV95 [ "10.04.2018" ] =
+
+ IMPORTS UNQUALIFIED INTERLIS; !! nouveau 8.11.2004, importer INTERLIS 2.3. unitées de base
+ IMPORTS Units;
+ !! IMPORTS CoordSys;
+ !! REFSYSTEM BASKET BCoordSys ~ CoordSys.CoordsysTopic;
+
+!! Copyright 2003 - 2018 SIA
+
+!! Des changements et compléments sont permis pour l'utilisation personnelle.
+!! Ceux-ci doivent être documentés visiblement, afin de repérer les modifications
+!! apportées (insérer des commentaires INTERLIS).
+!! Les fichiers modèles originaux et les versions
+!! modifiées à partir de ceux-ci ne peuvent pas être revendus.
+
+!! Vérifié avec Compiler version 4.7.7 du 08.02.2018
+!! Greffier: Stefan Burckhardt / Commission SIA 405
+
+!! 4.2.2013 Corrections et adaptions française
+!! 18.4.2014 Correction domaine des valeurs pour CoordNat et CoordH pour LV95 (1070000.000 au lieu de 170000.000 .. 1300000.000)
+!! 30.10.2017 Polyligne au lieu de Polyline
+!! 31.10.2017 Version _LV95
+!! 10.4.2018 Checked with Compiler 4.7.7 vom 08.02.2018
+
+ DOMAIN
+ !! Types généraux pour tous les modèles
+
+ Orientation = 0.0 .. 359.9 CIRCULAR [Units.Angle_Degree];
+
+
+!! pour LV95 veuillez utiliser ces définitions
+!! 10.04.2018
+ CoordNat = COORD 2480000.000 .. 2840000.000 [m], !!{CHMN95/1},
+ 1070000.000 .. 1300000.000 [m], !!{CHMN95/2},
+ ROTATION 2 -> 1;
+
+ CoordH = COORD 2480000.000 .. 2840000.000 [m], !!{CHMN95/1},
+ 1070000.000 .. 1300000.000 [m], !!{CHMN95/2},
+ -200.000 .. 5000.000 [m], !!{SwissOrthometricAlt},
+ ROTATION 2 -> 1;
+
+ Altitude = -200.000 .. 5000.000 [m]; !!SwissOrthometricAlt;
+
+ Polyligne = POLYLINE WITH (STRAIGHTS, ARCS) VERTEX CoordNat;
+
+ !! nouveau 2.1.2013
+ !! Surface = SURFACE WITH (STRAIGHTS, ARCS) VERTEX CoordNat WITHOUT OVERLAPS > 0.000;
+ Surface = SURFACE WITH (STRAIGHTS, ARCS) VERTEX CoordNat WITHOUT OVERLAPS > 0.050;
+
+!! nouveau 2.8.2011
+ Polyligne3D = POLYLINE WITH (STRAIGHTS, ARCS) VERTEX CoordH;
+
+!! nouveau 23.5.2012
+!! Surface3D = SURFACE WITH (STRAIGHTS, ARCS) VERTEX HKoord WITHOUT OVERLAPS > 0.000;
+ Surface3D = SURFACE WITH (STRAIGHTS, ARCS) VERTEX CoordH WITHOUT OVERLAPS > 0.050;
+
+
+!! nouveau 25.1.2012
+ CLASS BaseClass (ABSTRACT) =
+ !! BaseClass pour toutes les sub classes (Subclass - héritage)
+
+ END BaseClass;
+
+!! nouveau 4.8.2011 / 21.2.2012 (hérité de BaseClass)
+ CLASS TextePos (ABSTRACT) EXTENDS BaseClass =
+ TEXTEPOS: MANDATORY CoordNat;
+ TEXTEORI: MANDATORY Orientation;
+ TEXTEHALI: MANDATORY HALIGNMENT;
+ TEXTEVALI: MANDATORY VALIGNMENT;
+ END TextePos;
+
+!! nouveau 30.8.2011 / 21.2.2012 (hérité de BaseClass)
+ CLASS SymbolePos (ABSTRACT) EXTENDS BaseClass =
+ SYMBOLEPOS: MANDATORY CoordNat;
+ SYMBOLEORI: MANDATORY Orientation; !! Default: 90 degree
+
+ END SymbolePos;
+
+END Base_f_LV95.
diff --git a/src/main/resources/models/SIA405_Base_d-20181005.ili b/src/main/resources/models/SIA405_Base_d-20181005.ili
new file mode 100644
index 0000000..117572e
--- /dev/null
+++ b/src/main/resources/models/SIA405_Base_d-20181005.ili
@@ -0,0 +1,274 @@
+!! SIA405_Base_d-20180410.ili
+!! 10.4.2018 Neu auch mit Base_LV95 in der gleichen Datei
+
+INTERLIS 2.3;
+
+TYPE MODEL SIA405_Base (de) AT "http://www.sia.ch/405"
+ VERSION "05.10.2018" =
+
+ IMPORTS UNQUALIFIED INTERLIS; !! neu 8.11.2004, importiert INTERLIS 2 Basisunits
+ IMPORTS Base;
+ IMPORTS Units;
+
+!! Copyright 2003 - 2018 SIA
+
+!! Änderungen und Ergänzungen dürfen zum Eigengebrauch getätigt werden.
+!! Sie müssen innerhalb der Datei so dokumentiert sein, dass sichtbar wird,
+!! welche Änderungen getätigt wurden (Einfügen von INTERLIS Kommentar).
+!! Die Originalmodelldatei SIA405_Base.ili und darauf basierende
+!! abgeänderte Versionen dürfen nicht weiterverkauft werden.
+
+!! Geprueft mit Compiler Version 4.7.7 vom 08.02.2018
+!! Sachbearbeiter: Stefan Burckhardt / SIA 405 Kommission
+
+!! 20.8.2010 Anpassungen im Layout und in den Kommentaren
+!! 23.9.2010 Anpassung Textinhalt neu 80 Zeichen
+!! 23.9.2010 / 1.7.2011 Anpassung Status
+!! 22.11.2010 Anpassung Reihenfolge Status neu alphabetisch
+!! 01.07.2011 MTEXT statt TEXT für Textinhalt
+!! 29.8.2011 Textinhalt neu MANDATORY, damit für Erzeugung von dxf ab INTERLIS in Inhalt vorhanden ist.
+!! 25.1.2012 Neue SIA405_BaseClass geerbt von Base.ili
+!! 21.2.2012 Neuer Datentyp Maechtigkeit
+!! 21.2.2012 Neuer Datentyp Abmessung
+!! 21.2.2012 OrganisationBezeichnung: TEXT*80; !! Neuer Datentyp für Eigentuemer, Betreiber, Datenherr, Datenlieferant, etc.
+!! 21.2.2012 Neu Datentyp Ueberdeckung - Einheit klären
+!! 21.2.2012 Neu Datentyp Nennweite
+!! 22.2.2012 OBJ_ID statt OID - VSA nennt das schon seit 1999 OBJ_ID, andere Medienmodelle haben dieses Attribut bisher nicht, was den Aufwand für einen neuen Namen im Abwasser nicht rechtfertigt -> Modellkonsistenz.
+!! TO DO 28.7.2011 Neue Referenz für Kommentar zu Genauigkeit
+!! 14.3.2012 neu STRUCTURE ManagementAttributes
+!! 14.3.2012 OBJ_ID STANDARDOID
+!! 4.2.2012 Ueberdeckung 0.0 .. 999.9 [INTERLIS.m] - ein Kilometer überdeckung reicht, eine Nachkommastelle reicht
+!! 4.2.2012 Umbenennung ManagementAttribute neu Metaattribute
+!! 14.5.2012 Defiition Datenherr, Datenlieferant, Letzte_Aenderung ergänzt
+!! 23.5.2012 Kommentar zu OrganisationBezeichnung - UID
+!! 8.6.2012 Metaattribute: MANDATORY Metaattribute; (neu MANDATORY)
+!! 11.6.2012 Maechtigkeit = -99999 .. 99999 [Units.mm]; neu positiv und negativ, Die Mächtigkeit ergibt sich aus der Differenz aus KoteRef und KoteZ und kann entweder einen negativen oder positiven Wert annehmen."
+!! 11.6.2012 Breite maximal 4 m /4000 mm - darüber als Fläche abbilden, siehe Merkblatt 2015, 2.5.3 Geometrietypen und Abbildung 2D
+!! 11.6.2012 Abmessung maximal 4 m / 4000 mm darüber als Fläche abbilden, siehe Merkblatt 2015, 2.5.3 Geometrietypen und Abbildung 2D
+!! 18.4.2014 Korrekturen Beschreibungen Schreibweise
+!! 10./11./18.6.2014 Neue Subwerte für Plantyp = Uebersichtsplan (UeP2, UeP5, UeP10)
+!! 30.10.2017 SIA405_TextPos.Textinhalt: MANDATORY MTEXT; statt Textinhalt: MANDATORY MTEXT*80;
+!! 25.4.2018 Checked with Compiler 4.7.7 vom 08.02.2018
+!! 25.4.2018 Anpassung Beschreibung Aenderungsdatum Datum der letzten Änderung eines Datensatzes, falls diese Information vorhanden ist. Falls nicht vorhanden, wird als Datum 19000101 eingesetzt. Format: yyyymmdd (INTERLIS_1_DATE) statt .. , wird das Datum der Erzeugung des Transferdatensatzes eingesetzt. Format: yyyymmdd (INTERLIS_1_DATE), da sonst nicht unterschieden werden kann ob unbekannt oder von Aenderung von heute.
+
+ UNIT
+
+ KiloWatt [kW] = 1000 [Units.W];
+ Liter_pro_Sekunde [ls] = (Units.L/s);
+ Liter_pro_Tag [ld] = (Units.L/Units.d);
+ Gramm_pro_Kubikmeter [gm3] = (Units.g/Units.m3);
+ Kubikmeter_pro_Sekunde [m3s] = (Units.m3/s);
+ Kubikmeter_pro_Tag [m3d] = (Units.m3/Units.d);
+ Kubikmeter_pro_Stunde [m3h] = (Units.m3/Units.h);
+ Meter_pro_Sekunde [ms] EXTENDS Units.Velocity = (m/s);
+ Quadrat_Zentimeter [cm2] EXTENDS Units.Area = (Units.cm*Units.cm);
+
+ DOMAIN
+
+ !! Allgemeine Typen fuer alle SIA405 Medien
+!! neu 21.2.2012
+ Abmessung = 0 .. 4000 [Units.mm]; !! Einheit Milimeter [mm]
+ Breite = 0 .. 4000 [Units.mm]; !! Einheit Milimeter [mm]
+ Genauigkeit = ( !! Definiert die Lage- und Höhengenauigkeit eines Objektes. Falls ein Verlauf definiert ist, ist dieser immer [genau].
+ genau, !! +/- 10 cm, bei der Lagebestimmung aus unterschiedlichen Messungen das dreifache, d.h. +/- 30 cm (Norm SIA405 2012 XXXX)
+ unbekannt,
+ ungenau !! siehe genau
+ );
+ Jahr = 1800 .. 2100; !! unbekannt = 1800 (niedrigster Wert des Wertebereiches)
+!! neu 21.2.2012 / 10.6.2012
+!! Maechtigkeit = 0 .. 99999 [Units.mm]; !!
+ Maechtigkeit = -99999 .. 99999 [Units.mm]; !! 11.6.2012, neu positiv und negativ, Die Mächtigkeit ergibt sich aus der Differenz aus KoteRef und KoteZ und kann entweder einen negativen oder positiven Wert annehmen."
+
+!! neu 21.2.2012
+ Nennweite = TEXT*10; !! als TEXT, da zum Teil auch Doppelwerte mit Schrägstrich (300/600)
+!! neu 21.2.2012
+ OrganisationBezeichnung = TEXT*80; !! Neuer Datentyp für Eigentuemer, Betreiber, Datenherr, Datenlieferant, etc. Länge vorbereitet für Bezeichnung bei UID (www.uid.admin.ch)
+ Plantyp = ( !! Plantyp, für welchen die TextPos / SymbolPos definiert ist
+ Leitungskataster,
+ Werkplan,
+ Uebersichtsplan (
+ UeP10, !! 1:10'000
+ UeP2, !! 1:2'000
+ UeP5 !! 1:5'000
+ )
+ );
+ Status= ( !! Betriebs- und Planungszustand. neu 2010: Erweiterungen dazu in den einzelnen Medien definieren
+ ausser_Betrieb,
+ in_Betrieb,
+ tot,
+ unbekannt,
+ weitere
+ );
+ Ueberdeckung = 0.0 .. 999.9 [INTERLIS.m]; !! mittlerer Wert eines Objektes (Schutzrohr / Wasser / Fernwärme)
+
+ STRUCTURE Metaattribute =
+ !! Metainformationen - bitte auch auf www.geocat.ch erfassen
+ Datenherr: MANDATORY OrganisationBezeichnung; !! Datenherr, also diejenige Person oder Stelle, die berechtigt ist, diesen Datensatz zu löschen, zu ändern, zu verwalten. Falls ein Ingenieurbüro dies im Auftrag einer Gemeinde wahrnimmt, so ist die Gemeinde als Datenherr einzusetzen und nicht das Ingenieurbüro. Dieses wird dann unter Datenlieferant aufgeführt.
+ Datenlieferant: MANDATORY OrganisationBezeichnung; !! Organisation, die diesen Datensatz erzeugt hat (siehe auch Datenherr und Letzte_Aenderung)
+ Letzte_Aenderung: MANDATORY INTERLIS.INTERLIS_1_DATE; !! Datum der letzten Änderung eines Datensatzes, falls diese Information vorhanden ist. Falls nicht vorhanden, wird als Datum 19000101 eingesetzt. Format: yyyymmdd (INTERLIS_1_DATE)
+ END Metaattribute;
+
+
+!! neu 25.1.2012
+ CLASS SIA405_BaseClass (ABSTRACT) EXTENDS Base.BaseClass =
+ !! BaseClass für alle Oberklassen (Superclass) mit Metaattributen
+ OID AS STANDARDOID; !! gewählte Option für Definition ANYOID aus base.ili. Weitere Infos siehe Merkblatt 2015, Kapitel 2.1.3.8 Objektidentifikatoren (OID)
+ !! Als Attribut OBJ_ID zusätzlich redundant zu OID und den Bedingungen für die TID ausmodelliert, damit Rückwärtskompatibilität mit INTERLIS 1 möglich. Attribut soll in Datenbank verwaltet werden oder stabil beim Export/Import verwaltet werden können.
+ ATTRIBUTE
+ OBJ_ID: TEXT*16; !! neu 23.5.2012 OID (STANDARDOID) zusätzlich redundant als Attribut modelliert (siehe SIA 405 Merkblatt 2015, Kapitel 2.3.
+ !! Metadatenattribute zentral einführen durch die STRUCTURE ManagementAttributes
+ Metaattribute: MANDATORY Metaattribute;
+ UNIQUE OBJ_ID;
+ END SIA405_BaseClass;
+
+ CLASS SIA405_TextPos (ABSTRACT) EXTENDS Base.TextPos =
+ Plantyp: MANDATORY Plantyp;
+ !! Textinhalt: MANDATORY MTEXT*80; !! aus Attributen berechneter Wert, neu 80 statt 40 Zeichen und MTEXT statt TEXT, damit auch mehrzeilige Texte verarbeitet werden können.
+ Textinhalt: MANDATORY MTEXT; !! aus Attributen berechneter Wert
+ Bemerkung: TEXT*80; !! für bilaterale weitere Spezifikationen
+ END SIA405_TextPos;
+
+!! neu 30.8.2011 - für Fernwärme / 21.2.2012 Symbolskalierung hierher verschoben statt in Base.ili
+ CLASS SIA405_SymbolPos (ABSTRACT) EXTENDS Base.SymbolPos =
+ Plantyp: MANDATORY Plantyp;
+ SymbolskalierungLaengs: 0.0 .. 9.9;
+ SymbolskalierungHoch: 0.0 .. 9.9;
+ END SIA405_SymbolPos;
+
+END SIA405_Base.
+
+
+
+TYPE MODEL SIA405_Base_LV95 (de) AT "http://www.sia.ch/405"
+ VERSION "05.10.2018" =
+
+ IMPORTS UNQUALIFIED INTERLIS; !! neu 8.11.2004, importiert INTERLIS 2 Basisunits
+ IMPORTS Base_LV95;
+ IMPORTS Units;
+
+!! Copyright 2003 - 2018 SIA
+
+!! Änderungen und Ergänzungen dürfen zum Eigengebrauch getätigt werden.
+!! Sie müssen innerhalb der Datei so dokumentiert sein, dass sichtbar wird,
+!! welche Änderungen getätigt wurden (Einfügen von INTERLIS Kommentar).
+!! Die Originalmodelldatei SIA405_Base.ili und darauf basierende
+!! abgeänderte Versionen dürfen nicht weiterverkauft werden.
+
+!! Geprueft mit Compiler Version 4.7.7 vom 08.02.2018
+!! Sachbearbeiter: Stefan Burckhardt / SIA 405 Kommission
+
+!! 20.8.2010 Anpassungen im Layout und in den Kommentaren
+!! 23.9.2010 Anpassung Textinhalt neu 80 Zeichen
+!! 23.9.2010 / 1.7.2011 Anpassung Status
+!! 22.11.2010 Anpassung Reihenfolge Status neu alphabetisch
+!! 01.07.2011 MTEXT statt TEXT für Textinhalt
+!! 29.8.2011 Textinhalt neu MANDATORY, damit für Erzeugung von dxf ab INTERLIS in Inhalt vorhanden ist.
+!! 25.1.2012 Neue SIA405_BaseClass geerbt von Base.ili
+!! 21.2.2012 Neuer Datentyp Maechtigkeit
+!! 21.2.2012 Neuer Datentyp Abmessung
+!! 21.2.2012 OrganisationBezeichnung: TEXT*80; !! Neuer Datentyp für Eigentuemer, Betreiber, Datenherr, Datenlieferant, etc.
+!! 21.2.2012 Neu Datentyp Ueberdeckung - Einheit klären
+!! 21.2.2012 Neu Datentyp Nennweite
+!! 22.2.2012 OBJ_ID statt OID - VSA nennt das schon seit 1999 OBJ_ID, andere Medienmodelle haben dieses Attribut bisher nicht, was den Aufwand für einen neuen Namen im Abwasser nicht rechtfertigt -> Modellkonsistenz.
+!! TO DO 28.7.2011 Neue Referenz für Kommentar zu Genauigkeit
+!! 14.3.2012 neu STRUCTURE ManagementAttributes
+!! 14.3.2012 OBJ_ID STANDARDOID
+!! 4.2.2012 Ueberdeckung 0.0 .. 999.9 [INTERLIS.m] - ein Kilometer überdeckung reicht, eine Nachkommastelle reicht
+!! 4.2.2012 Umbenennung ManagementAttribute neu Metaattribute
+!! 14.5.2012 Defiition Datenherr, Datenlieferant, Letzte_Aenderung ergänzt
+!! 23.5.2012 Kommentar zu OrganisationBezeichnung - UID
+!! 8.6.2012 Metaattribute: MANDATORY Metaattribute; (neu MANDATORY)
+!! 11.6.2012 Maechtigkeit = -99999 .. 99999 [Units.mm]; neu positiv und negativ, Die Mächtigkeit ergibt sich aus der Differenz aus KoteRef und KoteZ und kann entweder einen negativen oder positiven Wert annehmen."
+!! 11.6.2012 Breite maximal 4 m /4000 mm - darüber als Fläche abbilden, siehe Merkblatt 2015, 2.5.3 Geometrietypen und Abbildung 2D
+!! 11.6.2012 Abmessung maximal 4 m / 4000 mm darüber als Fläche abbilden, siehe Merkblatt 2015, 2.5.3 Geometrietypen und Abbildung 2D
+!! 18.4.2014 Korrekturen Beschreibungen Schreibweise
+!! 10./11./18.6.2014 Neue Subwerte für Plantyp = Uebersichtsplan (UeP2, UeP5, UeP10)
+!! 30.10.2017 SIA405_TextPos.Textinhalt: MANDATORY MTEXT; statt Textinhalt: MANDATORY MTEXT*80;
+!! 31.10.2017 Version _LV95
+!! 10.4.2018 Checked with Compiler 4.7.7 vom 08.02.2018
+
+ UNIT
+
+ KiloWatt [kW] = 1000 [Units.W];
+ Liter_pro_Sekunde [ls] = (Units.L/s);
+ Liter_pro_Tag [ld] = (Units.L/Units.d);
+ Gramm_pro_Kubikmeter [gm3] = (Units.g/Units.m3);
+ Kubikmeter_pro_Sekunde [m3s] = (Units.m3/s);
+ Kubikmeter_pro_Tag [m3d] = (Units.m3/Units.d);
+ Kubikmeter_pro_Stunde [m3h] = (Units.m3/Units.h);
+ Meter_pro_Sekunde [ms] EXTENDS Units.Velocity = (m/s);
+ Quadrat_Zentimeter [cm2] EXTENDS Units.Area = (Units.cm*Units.cm);
+
+ DOMAIN
+
+ !! Allgemeine Typen fuer alle SIA405 Medien
+!! neu 21.2.2012
+ Abmessung = 0 .. 4000 [Units.mm]; !! Einheit Milimeter [mm]
+ Breite = 0 .. 4000 [Units.mm]; !! Einheit Milimeter [mm]
+ Genauigkeit = ( !! Definiert die Lage- und Höhengenauigkeit eines Objektes. Falls ein Verlauf definiert ist, ist dieser immer [genau].
+ genau, !! +/- 10 cm, bei der Lagebestimmung aus unterschiedlichen Messungen das dreifache, d.h. +/- 30 cm (Norm SIA405 2012 XXXX)
+ unbekannt,
+ ungenau !! siehe genau
+ );
+ Jahr = 1800 .. 2100; !! unbekannt = 1800 (niedrigster Wert des Wertebereiches)
+!! neu 21.2.2012 / 10.6.2012
+!! Maechtigkeit = 0 .. 99999 [Units.mm]; !!
+ Maechtigkeit = -99999 .. 99999 [Units.mm]; !! 11.6.2012, neu positiv und negativ, Die Mächtigkeit ergibt sich aus der Differenz aus KoteRef und KoteZ und kann entweder einen negativen oder positiven Wert annehmen."
+
+!! neu 21.2.2012
+ Nennweite = TEXT*10; !! als TEXT, da zum Teil auch Doppelwerte mit Schrägstrich
+!! neu 21.2.2012
+ OrganisationBezeichnung = TEXT*80; !! Neuer Datentyp für Eigentuemer, Betreiber, Datenherr, Datenlieferant, etc. Länge vorbereitet für Bezeichnung bei UID (www.uid.admin.ch)
+ Plantyp = ( !! Plantyp, für welchen die TextPos / SymbolPos definiert ist
+ Leitungskataster,
+ Werkplan,
+ Uebersichtsplan (
+ UeP10, !! 1:10'000
+ UeP2, !! 1:2'000
+ UeP5 !! 1:5'000
+ )
+ );
+ Status= ( !! Betriebs- und Planungszustand. neu 2010: Erweiterungen dazu in den einzelnen Medien definieren
+ ausser_Betrieb,
+ in_Betrieb,
+ tot,
+ unbekannt,
+ weitere
+ );
+ Ueberdeckung = 0.0 .. 999.9 [INTERLIS.m]; !! mittlerer Wert eines Objektes (Schutzrohr / Wasser / Fernwärme)
+
+ STRUCTURE Metaattribute =
+ !! Metainformationen - bitte auch auf www.geocat.ch erfassen
+ Datenherr: MANDATORY OrganisationBezeichnung; !! Datenherr, also diejenige Person oder Stelle, die berechtigt ist, diesen Datensatz zu löschen, zu ändern, zu verwalten. Falls ein Ingenieurbüro dies im Auftrag einer Gemeinde wahrnimmt, so ist die Gemeinde als Datenherr einzusetzen und nicht das Ingenieurbüro. Dieses wird dann unter Datenlieferant aufgeführt.
+ Datenlieferant: MANDATORY OrganisationBezeichnung; !! Organisation, die diesen Datensatz erzeugt hat (siehe auch Datenherr und Letzte_Aenderung)
+ Letzte_Aenderung: MANDATORY INTERLIS.INTERLIS_1_DATE; !! ! Datum der letzten Änderung dieses Datensatzes, falls diese Information vorhanden ist. Falls nicht vorhanden Datum der Erzeugung des Transferdatensatzes einsetzen.
+ END Metaattribute;
+
+
+!! neu 25.1.2012
+ CLASS SIA405_BaseClass (ABSTRACT) EXTENDS Base_LV95.BaseClass =
+ !! BaseClass für alle Oberklassen (Superclass) mit Metaattributen
+ OID AS STANDARDOID; !! gewählte Option für Definition ANYOID aus base.ili. Weitere Infos siehe Merkblatt 2015, Kapitel 2.1.3.8 Objektidentifikatoren (OID)
+ !! Als Attribut OBJ_ID zusätzlich redundant zu OID und den Bedingungen für die TID ausmodelliert, damit Rückwärtskompatibilität mit INTERLIS 1 möglich. Attribut soll in Datenbank verwaltet werden oder stabil beim Export/Import verwaltet werden können.
+ ATTRIBUTE
+ OBJ_ID: TEXT*16; !! neu 23.5.2012 OID (STANDARDOID) zusätzlich redundant als Attribut modelliert (siehe SIA 405 Merkblatt 2015, Kapitel 2.3.
+ !! Metadatenattribute zentral einführen durch die STRUCTURE ManagementAttributes
+ Metaattribute: MANDATORY Metaattribute;
+ UNIQUE OBJ_ID;
+ END SIA405_BaseClass;
+
+ CLASS SIA405_TextPos (ABSTRACT) EXTENDS Base_LV95.TextPos =
+ Plantyp: MANDATORY Plantyp;
+ !! Textinhalt: MANDATORY MTEXT*80; !! aus Attributen berechneter Wert, neu 80 statt 40 Zeichen und MTEXT statt TEXT, damit auch mehrzeilige Texte verarbeitet werden können.
+ Textinhalt: MANDATORY MTEXT; !! aus Attributen berechneter Wert
+ Bemerkung: TEXT*80; !! für bilaterale weitere Spezifikationen
+ END SIA405_TextPos;
+
+!! neu 30.8.2011 - für Fernwärme / 21.2.2012 Symbolskalierung hierher verschoben statt in Base.ili
+ CLASS SIA405_SymbolPos (ABSTRACT) EXTENDS Base_LV95.SymbolPos =
+ Plantyp: MANDATORY Plantyp;
+ SymbolskalierungLaengs: 0.0 .. 9.9;
+ SymbolskalierungHoch: 0.0 .. 9.9;
+ END SIA405_SymbolPos;
+
+END SIA405_Base_LV95.
diff --git a/src/main/resources/models/SIA405_Base_f-20181005.ili b/src/main/resources/models/SIA405_Base_f-20181005.ili
new file mode 100644
index 0000000..e45e061
--- /dev/null
+++ b/src/main/resources/models/SIA405_Base_f-20181005.ili
@@ -0,0 +1,242 @@
+!! 10.4.2018 Neu auch mit Base_LV95 in der gleichen Datei
+
+INTERLIS 2.3;
+
+TYPE MODEL SIA405_Base_f (fr) AT "http://www.sia.ch/models"
+ !! VERSION "4.4.2013" =
+ VERSION "05.10.2018" TRANSLATION OF SIA405_Base [ "05.10.2018" ] =
+
+ IMPORTS UNQUALIFIED INTERLIS; !! nouveaux 8.11.2004, importer INTERLIS 2.3. unitées de base
+ IMPORTS Base_f;
+ IMPORTS Units;
+
+!! Copyright 2003 - 2018 SIA
+
+!! Des changements et compléments sont permis pour l'utilisation personnelle.
+!! Ceux-ci doivent être documentés visiblement, afin de repérer les modifications
+!! apportées (insérer des commentaires INTERLIS).
+!! Les fichiers modèles originaux et les versions
+!! modifiées à partir de ceux-ci ne peuvent pas être revendus.
+
+!! Vérifié avec Compiler version 4.7.7 du 08.02.2018
+!! Greffier: Stefan Burckhardt / Commission SIA 405
+
+!! 18.4.2014 Largeur_nominale au lieu de largeur_nominale
+!! 10./11.6.2014 Type_de_plan = Plan_d_ensemble, nouvelles valeurs PdE2, PdE5, PdE10
+!! 30.10.2017 SIA405_TextePos.TEXTE: MTEXT au lieu de MTEXT*80
+!! 25.4.2018 Checked with Compiler 4.7.7 du 08.02.2018
+!! 25.4.2018 Adaption DERNIERE_MODIFICATION: MANDATORY INTERLIS.INTERLIS_1_DATE; !! Date de la dernière modification de l’enregistrement, si cette information est disponible. Sinon, 19000101. Format: yyyymmdd (INTERLIS_1_DATE) au lieu de ... Sinon, indiquer la date de la création de l’enregistrement. pour que on peut distinguer une modification d'auhourdhui ou inconnu.
+!! 5.10.2018 Correction
+
+
+ UNIT
+
+ KiloWatt [kW] = 1000 [Units.W];
+ Litre_par_seconde [ls] = (Units.L/s);
+ Litre_par_jour [ld] = (Units.L/Units.d);
+ Gramme_par_metre_cube [gm3] = (Units.g/Units.m3);
+ Metre_cube_par_seconde [m3s] = (Units.m3/s);
+ Metre_cube_par_jour [m3d] = (Units.m3/Units.d);
+ Metre_cube_par_heure [m3h] = (Units.m3/Units.h);
+ Metre_par_seconde [ms] EXTENDS Units.Velocity = (m/s);
+ Centimetre_carre [cm2] EXTENDS Units.Area = (Units.cm*Units.cm);
+
+ DOMAIN
+
+ !! Types généraux pour tous les fluides de la norme SIA405
+ !! nouveau 1.2.2013
+ !! nouveau 21.2.2012
+ Metrage = 0 .. 4000 [Units.mm]; !! unité de mesure millimètre [mm]
+ Largeur = 0 .. 4000 [Units.mm]; !! unité de mesure millimètre [mm]
+ Determination_planimetrique = ( !! Définit la précision de la détermination du tracé.
+ precis, !! +/- 10 cm, lors de la détermination du tracé par différentes mesures, le triple, c'est-à-dire +/- 30 cm (norme SIA 405)
+ inconnue,
+ imprecis !! voyez precis
+ );
+ Annee = 1800 .. 2100; !! inconnu = 1800 (valeur la plus bas)
+
+ Epaisseur = -99999 .. 99999 [Units.mm]; !! 11.6.2012, nouveau positive et négative, L'epaisseur résulte de la différence entre la CoteRef et la CoteZ et peut soit prendre une valeur positive ou négative.
+
+ !! nouveau 21.2.2012
+ !! 18.4.2014 largeur_nominale = TEXT*10; !! En tant que TEXT, car peut contenir des valeurs doubles avec barre oblique
+ Largeur_nominale = TEXT*10; !! En tant que TEXT, car peut contenir des valeurs doubles avec barre oblique
+
+ !! nouveau 21.2.2012
+ Organisation_Designation = TEXT*80; !! Nouveau type de données pour PRORIETAIRE, EXPLOITANT, MAITRE_DES_DONNEES, FOURNISSEUR_DES_DONNEES, etc. La longueur du champ est préparée pour la désignation des UID (www.uid.admin.ch)
+
+ Type_de_plan = (
+ cadastre_des_conduites_souterraines,
+ plan_de_reseau,
+ plan_d_ensemble ( !! correction du 11.11.2004 plan_d_ensemble au lieu de plan_ensemble
+ pe10, !! 1:10'000
+ pe2, !! 1:2'000
+ pe5 !! 1:5'000
+ )
+ );
+
+ Etat = (
+ hors_service,
+ en_service,
+ abandonne,
+ inconnu,
+ autre
+ );
+
+ Couverture = 0.0 .. 999.9 [INTERLIS.m]; !! valeur moyenne d’un objet [m] (tube de protection / eaux / chauffage à distance)
+
+ STRUCTURE METAATTRIBUTS =
+ !! métainformations – aussi à saisir sous www.geocat.ch
+ MAITRE_DES_DONNEES: MANDATORY Organisation_Designation; !! Maître des données est le gestionnaire de données, qui est la personne ou l’organisation autorisée à gérer, modifier ou supprimer les données de cette table/classe. Si un bureau d’ingénieurs exécute cette fonction mandaté par une commune, il faut saisir la commune comme MAITRE_DES_DONNEES et non le bureau d’ingénieurs. Ce dernier sera le fournisseur des données.
+ FOURNISSEUR_DES_DONNEES: MANDATORY Organisation_Designation; !! Organisation qui crée l’enregistrement de ces données (cf. MAITRE_DES_DONNEES et DERNIERE_MODIFICATION).
+ !! DERNIERE_MODIFICATION: MANDATORY INTERLIS.INTERLIS_1_DATE; !! Date de la dernière modification de l’enregistrement, si cette information est disponible. Sinon, indiquer la date de la création de l’enregistrement.
+ DERNIERE_MODIFICATION: MANDATORY INTERLIS.INTERLIS_1_DATE; !! Date de la dernière modification de l’enregistrement, si cette information est disponible. Sinon, 19000101. Format: yyyymmdd (INTERLIS_1_DATE)
+
+ END METAATTRIBUTS;
+
+!! nouveau 25.1.2012
+ CLASS SIA405_BaseClass (ABSTRACT) EXTENDS Base_f.BaseClass =
+ !! BaseClass pour toutes les classes supérieures (Superclass) avec des Metaattributs
+ OID AS STANDARDOID; !! Option selectionnée pour la défintion ANYOID de base.ili. Voir également sous cahier technqiue 2015, chapitre 2.3.8 identifications d’objets
+ !! Redondant comme attribut OBJ_ID pour l‚OID. Afin de rendre la compatibilité inverse possaible avec INTERLIS 1, il faut modéliser les conditions pour le TID. L’attribut doit être géré dans la base de données ou géré de manière stable lors de l’exportation/importation. .
+ ATTRIBUTE
+ OBJ_ID: TEXT*16; !! nouveau 23.5.2012 OID (STANDARDOID) et redondant comme attribut (voir SIA 405 cahier technique 2015, chapitre 2.3.
+ !! Les données des métaattributs doivent être introduites de manière centralisée à travers la STRUCTURE ManagementAttributes
+ METAATTRIBUTS: MANDATORY METAATTRIBUTS;
+ UNIQUE OBJ_ID;
+ END SIA405_BaseClass;
+
+ CLASS SIA405_TextePos (ABSTRACT) EXTENDS Base_f.TextePos =
+ TYPE_DE_PLAN: MANDATORY Type_de_plan;
+ !! TEXTE: MANDATORY MTEXT*80; !! valeur calculée à partir d’attributs, nouveau 80 au lieu de 40 caractères est MTEXT au lieu de TEXT, pour qu'on puisset transformer aussi des multiples lignes de textes.
+ TEXTE: MANDATORY MTEXT; !! valeur calculée à partir d’attributs
+ REMARQUE: TEXT*80; !! pour des spécifications bilatérales (correction 27.6.2008 Remarque au lieu de Remarques)
+ END SIA405_TextePos;
+
+!! nouveau 30.8.2011 – pour chauffage à distance / 21.2.2012 l’échelle des symboles a été déplacée au lieu d‘être insérée à Base_f.ili
+ CLASS SIA405_SymbolePos (ABSTRACT) EXTENDS Base_f.SymbolePos =
+ TYPE_DE_PLAN: MANDATORY Type_de_plan;
+ !! 3.4.2013 adaption en français
+ MISE_A_L_ECHELLE_EN_LONGUEUR: 0.0 .. 9.9;
+ MISE_A_L_ECHELLE_EN_HAUTEUR: 0.0 .. 9.9;
+ END SIA405_SymbolePos;
+
+END SIA405_Base_f.
+
+
+
+TYPE MODEL SIA405_Base_f_LV95 (fr) AT "http://www.sia.ch/models"
+ !! VERSION "4.4.2013" =
+ VERSION "05.10.2018" TRANSLATION OF SIA405_Base_LV95 [ "05.10.2018" ] =
+
+ IMPORTS UNQUALIFIED INTERLIS; !! nouveaux 8.11.2004, importer INTERLIS 2.3. unitées de base
+ IMPORTS Base_f_LV95;
+ IMPORTS Units;
+
+!! Copyright 2003 - 2018 SIA
+
+!! Des changements et compléments sont permis pour l'utilisation personnelle.
+!! Ceux-ci doivent être documentés visiblement, afin de repérer les modifications
+!! apportées (insérer des commentaires INTERLIS).
+!! Les fichiers modèles originaux et les versions
+!! modifiées à partir de ceux-ci ne peuvent pas être revendus.
+
+!! Vérifié avec Compiler version 4.7.7 du 08.02.2018
+!! Greffier: Stefan Burckhardt / Commission SIA 405
+
+!! 18.4.2014 Largeur_nominale au lieu de largeur_nominale
+!! 10./11.6.2014 Type_de_plan = Plan_d_ensemble, nouvelles valeurs PdE2, PdE5, PdE10
+!! 30.10.2017 SIA405_TextePos.TEXTE: MTEXT au lieu de MTEXT*80
+!! 10.4.2018 Checked with Compiler 4.7.7 du 08.02.2018
+!! 05.10.2018 Correction
+
+ UNIT
+
+ KiloWatt [kW] = 1000 [Units.W];
+ Litre_par_seconde [ls] = (Units.L/s);
+ Litre_par_jour [ld] = (Units.L/Units.d);
+ Gramme_par_metre_cube [gm3] = (Units.g/Units.m3);
+ Metre_cube_par_seconde [m3s] = (Units.m3/s);
+ Metre_cube_par_jour [m3d] = (Units.m3/Units.d);
+ Metre_cube_par_heure [m3h] = (Units.m3/Units.h);
+ Metre_par_seconde [ms] EXTENDS Units.Velocity = (m/s);
+ Centimetre_carre [cm2] EXTENDS Units.Area = (Units.cm*Units.cm);
+
+ DOMAIN
+
+ !! Types généraux pour tous les fluides de la norme SIA405
+ !! nouveau 1.2.2013
+ !! nouveau 21.2.2012
+ Metrage = 0 .. 4000 [Units.mm]; !! unité de mesure millimètre [mm]
+ Largeur = 0 .. 4000 [Units.mm]; !! unité de mesure millimètre [mm]
+ Determination_planimetrique = ( !! Définit la précision de la détermination du tracé.
+ precis, !! +/- 10 cm, lors de la détermination du tracé par différentes mesures, le triple, c'est-à-dire +/- 30 cm (norme SIA 405)
+ inconnue,
+ imprecis !! voyez precis
+ );
+ Annee = 1800 .. 2100; !! inconnu = 1800 (valeur la plus bas)
+
+ Epaisseur = -99999 .. 99999 [Units.mm]; !! 11.6.2012, nouveau positive et négative, L'epaisseur résulte de la différence entre la CoteRef et la CoteZ et peut soit prendre une valeur positive ou négative.
+
+ !! nouveau 21.2.2012
+ !! 18.4.2014 largeur_nominale = TEXT*10; !! En tant que TEXT, car peut contenir des valeurs doubles avec barre oblique
+ Largeur_nominale = TEXT*10; !! En tant que TEXT, car peut contenir des valeurs doubles avec barre oblique
+
+ !! nouveau 21.2.2012
+ Organisation_Designation = TEXT*80; !! Nouveau type de données pour PRORIETAIRE, EXPLOITANT, MAITRE_DES_DONNEES, FOURNISSEUR_DES_DONNEES, etc. La longueur du champ est préparée pour la désignation des UID (www.uid.admin.ch)
+
+ Type_de_plan = (
+ cadastre_des_conduites_souterraines,
+ plan_de_reseau,
+ plan_d_ensemble ( !! correction du 11.11.2004 plan_d_ensemble au lieu de plan_ensemble
+ pe10, !! 1:10'000
+ pe2, !! 1:2'000
+ pe5 !! 1:5'000
+ )
+ );
+
+ Etat = (
+ hors_service,
+ en_service,
+ abandonne,
+ inconnu,
+ autre
+ );
+
+ Couverture = 0.0 .. 999.9 [INTERLIS.m]; !! valeur moyenne d’un objet [m] (tube de protection / eaux / chauffage à distance)
+
+ STRUCTURE METAATTRIBUTS =
+ !! métainformations – aussi à saisir sous www.geocat.ch
+ MAITRE_DES_DONNEES: MANDATORY Organisation_Designation; !! Maître des données est le gestionnaire de données, qui est la personne ou l’organisation autorisée à gérer, modifier ou supprimer les données de cette table/classe. Si un bureau d’ingénieurs exécute cette fonction mandaté par une commune, il faut saisir la commune comme MAITRE_DES_DONNEES et non le bureau d’ingénieurs. Ce dernier sera le fournisseur des données.
+ FOURNISSEUR_DES_DONNEES: MANDATORY Organisation_Designation; !! Organisation qui crée l’enregistrement de ces données (cf. MAITRE_DES_DONNEES et DERNIERE_MODIFICATION).
+ DERNIERE_MODIFICATION: MANDATORY INTERLIS.INTERLIS_1_DATE; !! Date de la dernière modification de l’enregistrement, si cette information est disponible. Sinon, indiquer la date de la création de l’enregistrement.
+ END METAATTRIBUTS;
+
+!! nouveau 25.1.2012
+ CLASS SIA405_BaseClass (ABSTRACT) EXTENDS Base_f_LV95.BaseClass =
+ !! BaseClass pour toutes les classes supérieures (Superclass) avec des Metaattributs
+ OID AS STANDARDOID; !! Option selectionnée pour la défintion ANYOID de base.ili. Voir également sous cahier technqiue 2015, chapitre 2.3.8 identifications d’objets
+ !! Redondant comme attribut OBJ_ID pour l‚OID. Afin de rendre la compatibilité inverse possaible avec INTERLIS 1, il faut modéliser les conditions pour le TID. L’attribut doit être géré dans la base de données ou géré de manière stable lors de l’exportation/importation. .
+ ATTRIBUTE
+ OBJ_ID: TEXT*16; !! nouveau 23.5.2012 OID (STANDARDOID) et redondant comme attribut (voir SIA 405 cahier technique 2015, chapitre 2.3.
+ !! Les données des métaattributs doivent être introduites de manière centralisée à travers la STRUCTURE ManagementAttributes
+ METAATTRIBUTS: MANDATORY METAATTRIBUTS;
+ UNIQUE OBJ_ID;
+ END SIA405_BaseClass;
+
+ CLASS SIA405_TextePos (ABSTRACT) EXTENDS Base_f_LV95.TextePos =
+ TYPE_DE_PLAN: MANDATORY Type_de_plan;
+ !! TEXTE: MANDATORY MTEXT*80; !! valeur calculée à partir d’attributs, nouveau 80 au lieu de 40 caractères est MTEXT au lieu de TEXT, pour qu'on puisset transformer aussi des multiples lignes de textes.
+ TEXTE: MANDATORY MTEXT; !! valeur calculée à partir d’attributs
+ REMARQUE: TEXT*80; !! pour des spécifications bilatérales (correction 27.6.2008 Remarque au lieu de Remarques)
+ END SIA405_TextePos;
+
+!! nouveau 30.8.2011 – pour chauffage à distance / 21.2.2012 l’échelle des symboles a été déplacée au lieu d‘être insérée à Base_f_LV95.ili
+ CLASS SIA405_SymbolePos (ABSTRACT) EXTENDS Base_f_LV95.SymbolePos =
+ TYPE_DE_PLAN: MANDATORY Type_de_plan;
+ !! 3.4.2013 adaption en français
+ MISE_A_L_ECHELLE_EN_LONGUEUR: 0.0 .. 9.9;
+ MISE_A_L_ECHELLE_EN_HAUTEUR: 0.0 .. 9.9;
+ END SIA405_SymbolePos;
+
+END SIA405_Base_f_LV95.
+
diff --git a/src/main/resources/models/SIA405_LKMap_2015_2_d-20180427.ili b/src/main/resources/models/SIA405_LKMap_2015_2_d-20180427.ili
new file mode 100644
index 0000000..623cdfe
--- /dev/null
+++ b/src/main/resources/models/SIA405_LKMap_2015_2_d-20180427.ili
@@ -0,0 +1,915 @@
+INTERLIS 2.3;
+
+MODEL SIA405_LKMap_2015 (de) AT "http://www.sia.ch/405"
+ VERSION "27.04.2018" =
+
+ IMPORTS UNQUALIFIED INTERLIS;
+ IMPORTS Units;
+ IMPORTS Base;
+ IMPORTS SIA405_Base;
+
+!! Copyright 2011 - 2018
+!! SIA, Zürich - www.sia.ch
+
+!! Die Nutzung dieser INTERLIS-Datei ist lizenzpflichtig!
+
+!! Die Originalmodelldatei SIA405_LKMap_2012_2_d.ili und darauf basierende
+!! abgeänderte Versionen dürfen nicht weiterverkauft werden.
+
+!! Freigegeben für öffentlichen Gebrauch und kommerzielle Anwendung mit Lizenz.
+!! Geprueft mit Compiler Version 4.7.7 (8.02.2018)
+!! Sachbearbeiter Stefan Burckhardt / Sepp Dorfschmid / SIA 405 Kommission
+
+!! 11.6.2010: Attribut Beschriftung eingeführt beim LKObjekt
+!! 20.8.2010: Attribut Beschriftung wieder gelöscht. Bezeichnung (Nummer) kann in BAG OF Eigenschaft transferiert werden. Sonstige Beschriftungen werden in LKObjekt_Text mitgeliefert.
+!! 23.9.2010: Status korrigiert: tot reingenommen in SIA405_Base
+!! 23.9.2010: Attribute Hoehe und Hoehenbestimmung bei LKPunkt, weitere Attribute für 3D fehlen noch bei Fläche/Linie
+!! 22.11.2010: Erweiterung 3D eingebaut / Umgruppierung Subwerte bei Spezialbauwerk (Kommunikation / Elektrizität) in LKFlaeche
+!! 30.11.2010: Korrektur Schreibfehler LKPunkt.Hoehenbestimmung statt Hoehenstimmung
+!! 16.5.2011: Reduktion Kommunikation Subwerte
+!! 26.5.2011: neu LKFlaeche: Elektritzitaet.Trasse_unterirdisch für Trasseflächen, die sich nicht als Linie mit Breite abbilden lassen (zusätzlich dazu). Notwendig aus Erfahrung LK BL Pilotprojekt
+!! 26.5.2011: neu LKFlaeche: Fernwaerme.Trasse_unterirdisch für Trasseflächen, die sich nicht als Linie mit Breite abbilden lassen (zusätzlich dazu). Notwendig aus Erfahrung LK BL Pilotprojekt
+!! 26.5.2011: überall Trasse statt Trassee
+!! 26.5.2011: TO DO: Version 2D und 3D auseinandernehmen
+!! 6.6.2011: Definition Letzte_Aenderung, MD_Datenherr, MD_Datenlieferant
+!! 6.6.2011: neu Attribut Sicherheitskorridor (Input aus Vernehmlassung)
+!! 6.6.2011: Structure Eigenschaften: TEXT*80 statt *50
+!! 6.6.2011: TO DO: MTEXT einführen in SIA_Base für Textinhalt
+!! 6.6.2011: neu Abmessung = 0 .. 4000 [Units.mm]; statt 99999 !! Einheit Milimeter [mm], falls grösser als Fläche abbilden.
+!! 15.6.2011: Rohrprofil.weitere eingeführt
+!! 15.6.2011: Abwasser: Trockenwetterfallrohr rausgenommen. Nicht benötigt für belegten Raum
+!! 4.7.2011: OBJ_ID geändert auf OID AS UUIDOID (Antrag an SIA 405 Kommission)
+!! Zur Diskussion 4.7.2011: Bezeichnung wieder einführen gemäss http://www.geo.admin.ch -> Geodaten -> Geobasisdaten -> Geodatenmodelle -> KOGIS (2011): Allgemeine Empfehlungen zur Methodik der Definition "minimaler Geodatenmodelle
+!! 4.7.2011: Linie neu ungerichtet (DIRECTED gelöscht)
+!! rückgängig 6.6.2011 - geht nicht bei Höhen: neu Abmessung = 0 .. 4000 [Units.mm]; statt 99999 !! Einheit Milimeter [mm], falls grösser als Fläche abbilden.
+!! 5.7.2011: MD_ weggenommen bei Datenherr / Datenlieferant. Reihenfolge neu wieder alphabetisch angepasst. MD_ist im GM03 Metamodell für Klassen als Präfix reserviert.
+!! 27.6.2011: Anpassung Kabelpunkt - für die Darstellung im LK sind nur die Kabelschächte relevant. Kabelpunkte sind Punkte die zur Erfassung des Linienzuges des Fernwirkkabels erfasst werden, aber danach nicht mehr dargestellt werden müssen.
+!! 27.6.2011: Fernwirkabel, Kabelpunkt auch bei weitereMedien
+!! 2.8.2011 Anpassung 3D - neu Maechtigkeit statt Obj_Kote1 und Obj_Kote2 bei LKPunkt
+!! 2.8.2011 Anpassung 3D - neu Maechtigkeit statt Obj_Dimension1 bei LKLinie
+!! 2.8.2011 Dimension1 statt Obj_Dimension1 bei LKPunkt, dito für Dimension2
+!! 2.8.2011 OID Definition so angepasst, dass der Compiler sie für Richtig hält - UNIQUE rausgenommen.
+!! 2.8.2011 erledigt 3D Version als extends von 2D Version formulieren. SIA405_LKMap3D extends SIA405_LKMap
+!! 4.8.2011 neu (wieder) Abmessung = 0 .. 4000 [Units.mm]; statt 99999 !! Einheit Milimeter [mm], falls grösser als Fläche abbilden.
+!! 4.8.2011 neu AbmessungMaechtigkeit bei 3D = 0 .. 99999 [Units.mm]
+!! 5.8.2011 Lagebestimmung und Hoehenbestimmung MANDATORY gesetzt, sonst kann man Linienart nicht ableiten für Darstellung
+!! 5.8.2011 LKLinie.Haltung neu Haltung_Kanal, Kommentar ergänzt
+!! 5.8.2011 LKPunkt.Haltungspunkt gelöscht - wird in 3D nicht dargestellt - Haltungspunkt.Kote wird für die Haltung(_Kanal) Darstellung verwendet, aber nicht seperat notwendig
+!! 29.8.2011 LKObjekt.Eigentuemer neu TEXT*80 statt 40
+!! 29.8.2011 LKFlaeche Fernwaerme: nur noch Kammer, Station, Spezialbauwerk (Zusammenfassung)
+!! 29.8.2011 LKLinie.weitereMedien: neuer Wert Schutzrohr
+!! 29.8.2011 Diverse Fehlerkorrekturen in den Kommentaren
+!! 29.8.2011 Textinhalt in SIA405_Base MANDATORY gesetzt
+!! 21.2.2012 Abmessung in SIA405_Base verschoben - neu Breite: SIA405_Base.Abmessung;
+!! 21.2.2012 Einzelflaechen neu geerbt von Base.Polyline
+!! 21.2.2012 Eigentuemer neu SIA405_Base.OrganisationBezeichnung
+!! 21.2.2012 LKLine.Breite: SIA405_Base.Breite; statt Abmessung
+!! 21.2.2012 DOMAIN Abmessung neu geerbt von SIA045_Base, dito Einzelflaechen
+!! 21.2.2012 DOMAIN Orientierung neu in Base.ili
+!! 2.4.2012 Umsetzung Sicherheitskorridor - allenfalls als LKLinie statt LKFlaeche - noch klären -> nein
+!! 4.4.2012 Neu Einleitstelle statt Vorflutereinlauf bei Abwasser
+!! 23.5.2012 überflüssige Kommentare gelöscht
+!! 23.5.2012 Anpassungen Liste Zusammenfassung für Abwasser.Funktion = weitere an Modellversion 2012
+!! 8.6.2012 ASSOCIATION LKObjekt_LKObjektTextAssoc = !! neu als Komposition (statt Assoziation)
+!! LKObjektRef -<#> {1} LKObjekt; !! Rolle1 - Klasse1 / Rôle1 - Classe1
+!! Korrektur 24.1.2013 - Einleitstelle statt Vorflutereinlauf bei LKFlaeche - Anpassung INTERLIS an MB 2015
+!! Korrektur 24.1.2013 - Einleitstelle statt Vorflutereinlauf bei LKPunkt - Anpassung INTERLIS an MB 2015
+!! Korrektur 11.3.2013 Fehler in Script (fehlende Kommata)
+!! Korrektur 22.8.2013 Elektrizitat -> OeffentlicherVerbraucher statt Oeffentlicher_Verbraucher - Anpassung an Objektkatalog Elektrizität, Fehler in Objektkatalog LKMap
+!! Korrektur 22.8.2013 LKLinie.Objektart.
+!! Trasse ( !! LKLinie Objekt (oder LKFlaeche Objekt), neu Trasse statt Trassee
+!! oberirdisch, !! neu 22.8.2013 Matching: Trassetyp = Freileitung
+!! unterirdisch !! neu 22.8.2013 Matching alle anderen Werte von Trassetyp inkl. unbekannt
+!! ),
+!! Korrektur 25.9.2013 LKFlaeche.Objetkart.Elektrizitaet und Fernwaerme neu ohne Subwert unterirdisch (wie Kommunikation). Unterscheidung macht nur Sinn wenn auch oberirdisch. Flaechen sind eigentlich immer unterirdisch. (Feedback LK Baselland
+!! 28.6.2014 LKPunkt.Dimension1 und Dimension2 neu in LKMap - verschoben von LKMap3D. Wunsch aus Praxisanwendung
+!! 27.4.2018 Trasse, !! Darstellung S. 136 2.6.5 (Kapitelangabe korrigiert)
+!! 27.4.2018 !! Geprueft mit Compiler Version 4.7.7 (8.02.2018)
+
+UNIT
+
+DOMAIN
+
+!! Definition Datentypen nach INTERLIS 2.3
+
+TOPIC SIA405_LKMap =
+
+DOMAIN
+
+STRUCTURE Eigenschaften =
+!! Weitere Attribute zum LKObjekt gemäss bilateralen Vereinbarungen und medienspezifisch, die über die Darstellung der belegten Fläche hinausgehen.
+ Bezeichnung: MANDATORY TEXT * 80; !! Bezeichnung des weiteren Attributs zum LKObjekt (Attributname)
+ Wert: MANDATORY TEXT * 80; !! Wert des weiteren Attributs zum LKObjekt als Text
+END Eigenschaften;
+
+CLASS LKObjekt (ABSTRACT) EXTENDS SIA405_Base.SIA405_BaseClass =
+!! Klasse für alle Sachobjekte
+ Eigenschaft: BAG OF Eigenschaften; !! Weitere Attribute zum LKObjekt gemäss bilateralen Vereinbarungen und medienspezifisch, die über die Darstellung der belegten Fläche hinausgehen.
+ Eigentuemer: MANDATORY SIA405_Base.OrganisationBezeichnung; !! Text "Keine_Angabe" wenn Eigentümer nicht freigegeben wird.
+ Lagebestimmung: MANDATORY SIA405_Base.Genauigkeit;
+ Status: SIA405_Base.Status; !! Betriebs- und Planungszustand. Es können auch nur die Datensätze bestimmter Statuswerte geliefert werden.
+END LKObjekt;
+
+CLASS LKFlaeche EXTENDS LKObjekt =
+!! Flächiges LKObjekt
+ ATTRIBUTE
+ Flaeche: MANDATORY Base.Surface; !! Detaillierte Geometrie insbesondere bei Spezialbauwerken. Bei Normbauwerken mit Dimensionen arbeiten -> LKPunkt
+ Objektart: MANDATORY ( !! Es werden alle Objekte aufgelistet, die gemäss LK Umfang dargestellt werden
+ Abwasser ( !! nur falls Detailgeometrie vorhanden, sonst LKPunkt. Bei Normschacht nur in Ausnahmefällen
+ Einleitstelle,
+ Spezialbauwerk (
+ Oelabscheider_Schwimmstoffabscheider, !! Zusammenfassung von Oel- und Schwimmstoffabscheider
+!!* Oelabscheider,
+!!* Schwimmstoffabscheider,
+ Pumpwerk, !! Anlage zum Heben von Abwasser innerhalb eines Kanalnetzes
+ Regenbecken, !! Zusammenfassung aller Subwerte (Regenbecken_*)
+ weitere !! Zusammenfassung der folgenden Werte (Definitionen siehe Objektkatalog Merkblatt 2015 bzw. VSA-DSS):
+!!* Absturzbauwerk,
+!!* andere,
+!!* Be_Entlueftung,
+!!* Duekerkammer,
+!!* Duekeroberhaupt,
+!!* Entwaesserungsrinne,
+!!* Gelaendemulde,
+!!* Geschiebefang,
+!!* Hochwasserentlastung,
+!!* Jauchegrube,
+!!* Kanal, !! in Ausnahmefällen LKFlaeche (Staukanal), sonst wird Haltung als LKLinie abgebildet
+!!* Klaergrube,
+!!* Kontrollschacht, !! in Ausnahmefällen LKFlaeche, falls Detailgeometrie sonst LKPunkt Objekt.
+!!* seitlicherZugang,
+!!* Spuelschacht,
+!!* Trennbauwerk, !
+!!* Wirbelfallschacht,
+ ),
+ unbekannt, !! Spezialbauwerk.Funktion.unbekannt. LKFlaeche
+ Versickerungsanlage !! neu 2012 im Umfang LK
+!! Vorflutereinlauf !! neu 2012 im Umfang von LK
+!! Korrektur 24.1.2013 - Einleitstelle statt Vorflutereinlauf
+
+ ), !! Ende von Abwasser
+ Elektrizitaet (
+ Spezialbauwerk ( !! flächenhafte Spezialschächte (Kabine, Station, Oeffentlicher_Verbraucher, Schacht mit Geometrie), sonst als LKPunkt abbilden
+ Kabine, !! LKPunkt Objekt Symbol S. 65 oder LKFlaeche -> dann als Elektrizitaet.Spezialbauwerk abbilden
+!! rausgenommen 6.6.2011 Fehler Sonderbauwerk, !! LKFlaeche
+ Schacht, !! LKFlaeche Symbol S. 65 Darstellung als Fläche massstäblich
+ Station, !! LKPunkt Objekt Symbol S. 65 oder oder LKFlaeche -> dann als Elektrizitaet.Spezialbauwerk abbilden
+ !! Oeffentlicher_Verbraucher !! LKPunkt Objekt Symbol S.65 oder LKFlaeche -> dann als Elektrizitaet.Spezialbauwerk abbilden
+ OeffentlicherVerbraucher !! LKPunkt Objekt Symbol S.65 oder LKFlaeche -> dann als Elektrizitaet.Spezialbauwerk abbilden
+ ), !! End Spezialbauwerk
+ Tragwerk, !! LKPunkt Objekt oder LKFlaeche Objekt (bei grosser Fläche, z.B. Gittermast), Symbol S. 65. Tragwerke werden in der Regela als Symbol dargestellt. Bei Tragwerken mit grosser Fläche (z.B. Gittermast kann optional auch die Fläche dargestellt werden
+!! neu eingefügt 26.5.2011
+ Trasse, !! Darstellung S. 65, Korrigiert 25.9.2013 (kein Subwert unterirdisch mehr, Unterscheidung macht nur Sinn wenn auch oberirdisch. Flaechen sind eigentlich immer unterirdisch.
+!! unterirdisch !! LKFlaeche Objekt oder LKLinie Objekt, Symbol S. 65 -> Flächen von Trasse sollen grundsätzlich als LinieLKObjekt mit Breite angegeben werden. Es gibt aber zusätzliche Flächen, die man nicht so abbilden kann (komplizierte Formen die auch den belegten Raum abbilden), diese werden als Flächen übergeben
+ unbekannt !! LKFlaeche
+ ), !! Ende von Elektrizitaet
+ Fernwaerme (
+ Bauwerk ( !! LKFlaeche Objekt
+ Kammer, !! fasst folgende Werte zusammen
+!!* Entleeerungskammer,
+!!* Entlueftungskammer,
+!!* Hauptkammer,
+!!* Kompensatorenkammer,
+!!* Kontrollkammer,
+!!* Messkammer,
+!!* Steuerkammer,
+ Spezialbauwerk,
+ Station !! fasst folgende Werte zusammen:
+!!* Druckreduzierstation,
+!!* Umformerstation
+ ),
+!! Neu Eingefügt 26.5.2011 neu Trasse statt Trassee
+ Trasse, !! Darstellung S. 136 2.6.5, Korrigiert 25.9.2013 (kein Subwert unterirdisch mehr, Unterscheidung macht nur Sinn wenn auch oberirdisch. Flaechen sind eigentlich immer unterirdisch.
+!! unterirdisch !! LKFlaeche Objekt oder LKLinie Objekt, Symbol S. 65 -> Flächen von Trasse sollen grundsätzlich als LinieLKObjekt mit Breite angegeben werden. Es gibt aber zusätzliche Flächen, die man nicht so abbilden kann (komplizierte Formen die auch den belegten Raum abbilden), diese werden als Flächen übergeben
+ unbekannt !! LKFlaeche
+ ), !! Ende von Fernwaerme
+ Gas (
+!! neu 6.6.2011
+ Sicherheitskorridor, !! Die Rohrleitungsverordnung (RLV) schreibt im Abschnitt 5, Art. 26 vor, dass alle Bauvorhaben innerhalb eines waagrecht gemessenen Abstandes von 10 m von der Rohrleitung bewilligungspflichtig sind. Diese Information wird aus den Basisdaten der amtlichen Vermessung (TOPIC Rohrleitungen, Medium Gas) generiert. (eigener Datenlieferant)
+ Spezialbauwerk, !! LKFlaeche, alle Subwerte von Spezialbauwerk.Art
+!! weitere, !! Subwerte Spezialbauwerk.Art.weitere von Gas / Wasser wie Dueker etc. werden bei weitereMedien aufgeführt
+ unbekannt !! LKFlaeche, gibt es im Moment im WI Modell nicht, Antrag
+ ), !! Ende von Gas
+ Kommunikation ( !! Zusammenschluss von Tele- und Kabelkommmunikation
+!! gelöscht 16.5.2011 Spezialbauwerk, !! Schacht.Typ.Spezialbauwerk (Antrag statt Sonderbauwerk), LKFlaeche
+!! gelöscht 16.5.2011 Kabine, !! LKPunkt Objekt Symbol S. 69/75 oder LKFlaeche -> dann als Kommunikation.Spezialbauwerk abbilden
+!! gelöscht 16.5.2011 Konsole, !! LKPunkt Objekt Symbol S. 65/75 oder LKFlaeche -> dann als Kommunikation.Spezialbauwerk abbilden
+!! gelöscht 16.5.2011 TechnikCenter, !! LKPunkt Objekt Symbol S. 74 oder LKFlaeche -> dann als Kommunikation.Spezialbauwerk abbilden
+ Bauwerk, !! Schacht.Typ.Spezialbauwerk (Antrag statt Sonderbauwerk), LKFlaeche
+ Schacht, !!
+ Tragwerk, !! LKPunkt Objekt oder LKFlaeche Objekt (bei grosser Fläche, z.B. Gittermast), Symbol S. 75
+ Trasse,
+ !! In Kabelkommunikation INTERLIS 2 kann jeder Trasseknoten eine Flaeche haben??? -> besser auf Subklasse definieren?
+ unbekannt
+ ), !! Ende von Kommunikation
+ Wasser (
+ Spezialbauwerk, !! LKFlaeche, alle Subwerte von Spezialbauwerk.Art
+!! weitere, !! Subwerte weitere von Gas / Wasser wie Dueker etc. werden bei weitereMedien aufgeführt
+ unbekannt !! LKFlaeche, gibt es im Moment im WI Modell nicht, Antrag
+ ), !! Ende von Wasser
+ weitereMedien (
+!! neu 6.6.2011
+ Sicherheitskorridor, !! Die Rohrleitungsverordnung (RLV) schreibt im Abschnitt 5, Art. 26 vor, dass alle Bauvorhaben innerhalb eines waagrecht gemessenen Abstandes von 10 m von der Rohrleitung bewilligungspflichtig sind. Diese Information wird aus den Basisdaten der amtlichen Vermessung (TOPIC Rohrleitungen, alle Medien ausser Gas) generiert. (eigener Datenlieferant)
+ Spezialbauwerk, !! FlaecheLKObjekt Spezialbauwerk.Art.weitere von Gas/Wasser
+!!* weitere ( !! Flaeche LKObjekt (von Gas / Wasser übernommen -> oft mehr als ein Medium drin. Subwerte drinlassen?
+!!* Dueker,
+!!* Kulisse,
+!!* Futterrohr,
+!!* Leitungskanal (
+!!* begehbar,
+!!* nicht_begehbar),
+!!* Stollen (
+!!* begehbar,
+!!* nicht_begehbar),
+!!* uebrige
+!!* )
+ unbekannt !!
+ ) !! Ende von weitereMedien
+ ); !! Ende von Objektart
+END LKFlaeche;
+
+CLASS LKLinie EXTENDS LKObjekt =
+!! Linienförmiges LKObjekt
+ ATTRIBUTE
+ Breite: SIA405_Base.Breite; !! Breite eines Objektes [mm], Doppellinie >= 300 mm (Massstab 1:200) bzw. >= 600 mm (Mst. 1:500) für alle Medien. Falls die Breite kleiner ist wird nur ein Strich konstanter Breite gezeichnet.
+ !! Breite aus folgenden Attributen bestimmen:
+ !! Abwasser: Rohrprofil.Hoehenbreitenverhaeltnis, Haltung.Lichte_Hoehe -> Lichte_Breite = Lichte_Hoehe / Hoehenbreitenverhaeltnis
+ !! Wasser: Abhängig von Leitung.Material: bei Kunststoffrohren -> Leitung.DurchmesserAussen (mm), bei Metallrohren -> Leitung.Durchmesser (mm)
+ !! Gas: Abhängig von Leitung.Material: bei Kunststoffrohren -> Leitung.DurchmesserAussen (mm), bei Metallrohren -> Leitung.Durchmesser (mm)
+ !! Fernwärme: Trasseabschnitt.Trassebreite (mm)
+ !! Elektrizität: Trasseabschnitt.Breite (mm)
+ !! Kommunikation: Trasseabschnitt.Breite (mm)
+ Linie: MANDATORY Base.Polyline; !! Reihenfolge von Punkten die den Verlauf eines linienförmigen Elementes beschreibt.
+ Objektart: MANDATORY ( !! Es werden alle Objekte aufgelistet, die gemäss WI Modell dargestellt werden. Typ / Funktion / Art werden direkt übernommen und nicht zusammengefasst unter anderen Namen -> sonst braucht es wieder eine Matchinganweisung
+ Abwasser (
+ Fernwirkkabel, !! Steuer- und Signalkabel, Modellerweiterung 2010, noch nicht im aktuellen Release 2008 von SIA 405 Abwasser / VSA-DSS
+ Haltung_Kanal, !! LKLinie Objekt: Pro Haltung wird ein Objekt erzeugt. Falls mehrere Haltungen pro Kanal gibt es auch mehrere Lininenobjekte, da z.B. Lichte_Hoehe oder Gefälle ändern kann.
+ Schutzrohr !! neu 2010, noch nicht im aktuellen Release
+ ), !! Ende von Abwasser
+ Elektrizitaet (
+ AnkerStrebe, !! LKLinie Objekt, Darstellung S. 65
+ Trasse ( !! Darstellung S. 65
+ oberirdisch, !! LKLinie Objekt, Darstellung S. 65
+ unterirdisch !! (LKFlaeche Objekt oder) LKLinie Objekt, Symbol S. 65
+ )
+ ), !! Ende von Elektrizitaet
+ Fernwaerme (
+ Fernwirkkabel, !! Steuer- und Signalkabel
+ Trasse ( !! LKLinie Objekt (oder LKFlaeche Objekt), neu Trasse statt Trassee
+ oberirdisch, !! neu 22.8.2013 Matching: Trassetyp = Freileitung
+ unterirdisch !! neu 22.8.2013 Matching alle anderen Werte von Trassetyp inkl. unbekannt
+ ),
+ Schutzrohr !!
+ ), !! Ende von Fernwaerme
+ Gas (
+ Fernwirkkabel, !! Steuer- und Signalkabel
+ Leitung, !! LKLinie Objekt (Subwerte mit Art andere, Anschlussleitung etc. gehört eigentlich nicht hinein, sonst müsste man auch bei Abwasser machen). Falls gewünscht in BAG of Eigenschaft mitgeben
+ Schutzrohr !! neu 2010, noch nicht im aktuellen Release
+ ), !! Ende von Gas
+ Kommunikation (
+ Trasse ( !! Darstellung S. 69
+ oberirdisch, !! LKLinie Objekt, Darstellung S. 69
+ unterirdisch !! LKLinie Objekt, Darstellung S. 69
+ )
+ ), !! Ende von Kommunikation
+ Wasser (
+ Fernwirkkabel, !! Steuer- und Signalkabel
+ Leitung, !! LKLinie Objekt, Subwerte falls gewünscht in BAG of Eigenschaft mitgeben
+ Schutzrohr !! neu 2010, noch nicht im aktuellen Release
+ ), !! Ende von Wasser
+ weitereMedien (
+ Fernwirkkabel, !! Steuer- und Signalkabel
+ Leitung,
+ Schutzrohr
+ ) !! Ende von weitereMedien
+ ); !! Ende von Objektart
+ Profiltyp: ( !! Erweiterung 2D (für Beschriftung Leitung) und 3D - Typ des Profils, Zuordnung Werte siehe jeweiliges Medium (bis dato nur in Abwasser vorhanden, andere Medien müssten das ergänzen in WI
+ Eiprofil,
+ Kreisprofil,
+ Rechteckprofil,
+ unbekannt,
+ weitere !! Zusammenfassung von andere, Maulprofil, offenes_Profil, Spezialprofil. In 3D Darstellung als genähertes Rechteck.
+!!* andere,
+!!* Maulprofil,
+!!* offenes_Profil,
+!!* Spezialprofil,
+ );
+END LKLinie;
+
+
+CLASS LKPunkt EXTENDS LKObjekt =
+!! Punktförmiges LKObjekt
+ ATTRIBUTE
+ Dimension1: SIA405_Base.Abmessung; !! neu 2014, grösseres (Innen-)Mass eines Objektes (z. B. Länge/Durchmesser)
+ Dimension2: SIA405_Base.Abmessung; !! neu 2014, kleineres (Innen-)Mass eines Objektes (z. B. Breite/Durchmesser
+ Objektart: MANDATORY ( !! Es werden alle Objekte aufgelistet, die gemäss WI Modell dargestellt werden. Typ / Funktion / Art werden direkt übernommen und nicht zusammengefasst unter anderen Namen -> sonst braucht es wieder eine Matchinganweisung
+ Abwasser (
+ Deckel, !! LKPunkt Objekt. Abnehmbare Abdeckung eines Schachtbauwerkes
+!! Haltungspunkt, !! Erweiterung 3D - wird nicht dargestellt
+ Einleitstelle,
+ Kabelpunkt ( !! neu 2010, Modellerweiterung 2010, noch nicht im aktuellen Release 2008 von SIA 405 Abwasser / VSA-DSS
+!! Kabelpunkt, !! werden im LK nicht dargestellt, da mit der Linie des Fernwirkkabels schon vorhanden
+!! Kabelmuffe, !! werden im LK nicht dargestellt
+ Kabelschacht,
+ Kabine
+ ),
+ Kaliberwechsel, !! LKPunkt Objekt. Funktion. Wird in LK dargestellt, Orientierung notwendig (senkrecht zum Kanal / Haltung)
+ Kanalanfang, !! LKPunkt Objekt. Funktion. Wird in LK dargestellt, Orientierung notwendig (senkrecht zur Haltung)
+ Normschacht (
+ Einlaufschacht, !! LKPunkt Objekt.
+ Geleiseschacht, !! LKPunkt Objekt.
+ Kontrollschacht, !! LKPunkt Objekt. Symbol siehe SIA MB 2015 (2005) Seite 21.
+ Oelabscheider_Schwimmstoffabscheider, !! Zusammenfassung von zwei Werten
+!!* Oelabscheider,
+!!* Schwimmstoffabscheider,
+ Schlammsammler, !! LKPunkt Objekt.
+ weitere !! Gruppierung der folgenden weiteren Objekte Normschacht.Funktion, Symbol wie Kontrollschacht S.21
+!!* Absturzbauwerk,
+!!* andere,
+!!* Be_Entlueftung, !
+!!* Dachwasserschacht,
+!!* Hochwasserentlastung,
+!!* Klaergrube,
+!!* Pumpwerk,
+!!* Spuelschacht,
+!!* Trennbauwerk,
+ ),
+!! Trockenwetterfallrohr ist ab Release 2012 nicht mehr im Umfang LK
+!! Trockenwetterfallrohr, !! LKPunkt Objekt. Alle Werte Klasse Trockenwetterfallrohr. .
+ unbekannt, !! LKPunkt Objekt
+ Versickerungsanlage !! neu 2011 im Umfang LK
+!! Vorflutereinlauf !! LKPunkt Objekt oder LKFlaeche Objekt, neu 2012 im Umfang von LK
+!! Korrektur 24.1.2013 - Einleitstelle statt Vorflutereinlauf
+ ), !! Ende von Abwasser
+ Elektrizitaet (
+ Kabine, !! LKPunkt Objekt, Symbol S. 65
+ OeffentlicherVerbraucher, !! LKPunkt Objekt, Symbol S. 65
+ Schacht ( !!
+ rechteckig, !! Attribut Schachtyp ergänzt in WI Modell mit Release 2012 (fehlte in Datenmodell WI 2004 -> Modellfehler), nur bei Darstellung S. 65 vorhanden
+ rund !! Attribut Schachtyp ergänzt in WI Modell mit Release 2012 (fehlte in Datenmodell WI 2004 -> Modellfehler), nur bei Darstellung S. 65 vorhanden
+!! rausgenommen 6.6.2011 Fehlerkorrektur Sonderbauwerk !! Schachttyp = spezial als LKFlaeche Objekt abbilden, neuer Name 2012: Bauwerk
+ ),
+ Station, !! LKPunkt Objekt, Symbol S. 65
+ Tragwerk, !! LKPunkt Objekt oder LKFlaeche Objekt (bei grosser Fläche, z.B. Gittermast), Symbol S. 65. In INTERLIS 2 nur als LKFlaeche Objekt drin? Fehler?
+ unbekannt !! kein Symbol bei Elektritzität in 2015:2005, Vorschlag gleich wie bei Kabelkommunikation S. 74
+ ), !! Ende von Elektrizitaet
+ Fernwaerme (
+ Kabelpunkt (
+!! Kabelpunkt, !! werden im LK nicht dargestellt, da mit der Linie des Fernwirkkabels schon vorhanden
+ Kabelschacht,
+ Kabine),
+ Trassepunkt (
+ Abstuetzung, !! kein Symbol
+ Ent_Belueftung, !! Symbol S. 56
+ Entwaesserung, !! Symbol S. 56
+ Fixpunkt, !! Symbol S. 56
+ Geometriepunkt, !! kein Symbol
+ Montageoeffnung_Schachteinstieg !! Zusammenfassung von zwei Werten
+!!* Montageoeffnung, !! Symbol S. 56
+!!* Schachteinstieg, !! Symbol S. 56
+ ),
+ unbekannt
+ ), !! Ende von Fernwaerme
+ Gas (
+ Absperrorgan, !!( !! Absperrorgan.Art
+!! unbekannt, !! Kein Symbol in SIA MB 2015 (2005)
+!! Schieber, !! Symbol siehe SIA MB 2015 (2005) Seite 35
+!! Klappe !! Symbol siehe SIA MB 2015 (2005) Seite 35
+ Gaslaterne, !! Symbol siehe SIA MB 2015 (2005) Seite 31 / 35
+ Kabelpunkt ( !! neu 2010, Erweiterung Fernwirkkabel
+!! Kabelpunkt, !! werden im LK nicht dargestellt, da mit der Linie des Fernwirkkabels schon vorhanden
+ Kabelschacht,
+ Kabine
+ ),
+ Rohrleitungsteil ( !! Erweiterung 3D
+ Bogen_horizontal,
+ Bogen_vertikal
+ ),
+ Schacht, !! kein Symbol vorhanden. In INTERLIS LK vorhanden. Vorschlag Symbol wie Messstation aber ohne MS
+ Siphon,
+!! Siphon.Art wird nicht berücksichtigt. Schreibfehler im Datenkatalog Seite 29 Syphon statt Siphon. Kein Kreuz im Datenkatalog bei Siphon.Art, nur bei Name_Nummer.
+ unbekannt !! wie werden diese dargestellt? Vorschlag wie Schacht
+!! weitere
+ ), !! Ende von Gas
+ Kommunikation ( !! muss Tele- und Kabelkommunikation noch unterschieden werden?
+!! AnkerStrebe, !! LKPunkt Objekt, Darstellung S. 69
+ Bauwerk, !! Zusammenfassung alle Subklassenelemente (Baugruppenelement, Kabine, Konsole, TechnikCenter
+!! Baugruppenelement, !! LKPunkt Objekt, Darstellung S. 69, falls keine Flaechengeometrie
+!! Kabine, !! Kabelkommunikation
+!! Konsole, !! Kabelkommunikation
+ Schacht (
+ rechteckig, !! LKPunkt Objekt, Darstellung S. 69 / 74
+ rund !! LKPunkt Objekt, Darstellung S. 69 / 74
+!! Sonderbauwerk !! als LKFlaeche Objekt abbilden
+ ),
+!! TechnikCenter, !! LKPunkt Objekt oder LKFlaeche Objekt, Darstellung S. 74 (Kabelkommunikation)
+ Tragwerk, !! LKPunkt Objekt
+ unbekannt !! Attribut Schacht.Typ. LKPunkt Objekt, Darstellung S. 69 / 74
+ ), !! Ende von Kommunikation
+ Wasser (
+!! Leitungspunkt (
+!! andere, !! wie werden diese dargestellt?
+ Absperrorgan, !! ( !! Absperrorgan.Art
+!! unbekannt, !! Kein Symbol in SIA MB 2015 (2005), Symbol für Oberflurhydrant verwenden?
+!! Schieber, !! Symbol siehe SIA MB 2015 (2005) Seite 49
+!! Klappe !! Symbol siehe SIA MB 2015 (2005) Seite 49
+!! Hydrant ( !! Hydrant.Art je einzeln
+ Gartenhydrant, !! Symbol siehe SIA MB 2015 (2005) Seite 49
+ Kabelpunkt ( !! neu 2010, Erweiterung Fernwirkkabel
+!! Kabelpunkt, !! werden im LK nicht dargestellt, da mit der Linie des Fernwirkkabels schon vorhanden
+ Kabelschacht,
+ Kabine
+ ),
+ Oberflurhydrant, !! Symbol siehe SIA MB 2015 (2005) Seite 49
+ Rohrleitungsteil ( !! Erweiterung 3D
+ Bogen_horizontal,
+ Bogen_vertikal
+ ),
+ Schacht,
+ unbekannt, !! wie werden diese dargestellt?
+ Unterflurhydrant !! Symbol siehe SIA MB 2015 (2005) Seite 49
+ ), !! Ende von Wasser
+ weitereMedien (
+ Kabelpunkt ( !! neu 2010, Erweiterung Fernwirkkabel
+!! Kabelpunkt, !! werden im LK nicht dargestellt, da mit der Linie des Fernwirkkabels schon vorhanden
+ Kabelschacht,
+ Kabine),
+ Leitungspunkt !!
+ ) !! Ende von weitereMedien
+ ); !! Ende von Objektart
+ SymbolPos: MANDATORY Base.LKoord; !! Landeskoordinate Ost/Nord, 2D Koordinaten / analog wie bei Base.ili
+ SymbolOri: Base.Orientierung; !! Default: 90 Grad / analog wie Base.ili
+END LKPunkt;
+
+CLASS LKObjekt_Text EXTENDS SIA405_Base.SIA405_TextPos =
+END LKObjekt_Text;
+
+ASSOCIATION LKObjekt_LKObjektTextAssoc = !! Assoziation
+ LKObjektRef -<#> {1} LKObjekt; !! Rolle1 - Klasse1 / Rôle1 - Classe1 Komposition
+ LKObjekt_LKObjekt_TextAssocRef -- {0 .. *} LKObjekt_Text; !! Rolle2 - Klasse2 / Rôle2 - Classe2
+END LKObjekt_LKObjektTextAssoc;
+
+
+END SIA405_LKMap; !! Ende des Topic
+
+END SIA405_LKMap_2015. !! Ende des Modells / Fin du modèle
+
+
+
+!! INTERLIS 2.3;
+
+MODEL SIA405_LKMap_2015_LV95 (de) AT "http://www.sia.ch/405"
+ VERSION "27.04.2018" =
+
+ IMPORTS UNQUALIFIED INTERLIS;
+ IMPORTS Units;
+ IMPORTS Base_LV95;
+ IMPORTS SIA405_Base_LV95;
+
+!! Copyright 2011 - 2018
+!! SIA, Zürich - www.sia.ch
+
+!! Die Nutzung dieser INTERLIS-Datei ist lizenzpflichtig!
+
+!! Die Originalmodelldatei SIA405_LKMap_2012_2_d.ili und darauf basierende
+!! abgeänderte Versionen dürfen nicht weiterverkauft werden.
+
+!! Freigegeben für öffentlichen Gebrauch und kommerzielle Anwendung mit Lizenz.
+!! Geprueft mit Compiler Version 4.7.7 (8.02.2018)
+!! Sachbearbeiter Stefan Burckhardt / Sepp Dorfschmid / SIA 405 Kommission
+
+!! 11.6.2010: Attribut Beschriftung eingeführt beim LKObjekt
+!! 20.8.2010: Attribut Beschriftung wieder gelöscht. Bezeichnung (Nummer) kann in BAG OF Eigenschaft transferiert werden. Sonstige Beschriftungen werden in LKObjekt_Text mitgeliefert.
+!! 23.9.2010: Status korrigiert: tot reingenommen in SIA405_Base
+!! 23.9.2010: Attribute Hoehe und Hoehenbestimmung bei LKPunkt, weitere Attribute für 3D fehlen noch bei Fläche/Linie
+!! 22.11.2010: Erweiterung 3D eingebaut / Umgruppierung Subwerte bei Spezialbauwerk (Kommunikation / Elektrizität) in LKFlaeche
+!! 30.11.2010: Korrektur Schreibfehler LKPunkt.Hoehenbestimmung statt Hoehenstimmung
+!! 16.5.2011: Reduktion Kommunikation Subwerte
+!! 26.5.2011: neu LKFlaeche: Elektritzitaet.Trasse_unterirdisch für Trasseflächen, die sich nicht als Linie mit Breite abbilden lassen (zusätzlich dazu). Notwendig aus Erfahrung LK BL Pilotprojekt
+!! 26.5.2011: neu LKFlaeche: Fernwaerme.Trasse_unterirdisch für Trasseflächen, die sich nicht als Linie mit Breite abbilden lassen (zusätzlich dazu). Notwendig aus Erfahrung LK BL Pilotprojekt
+!! 26.5.2011: überall Trasse statt Trassee
+!! 26.5.2011: TO DO: Version 2D und 3D auseinandernehmen
+!! 6.6.2011: Definition Letzte_Aenderung, MD_Datenherr, MD_Datenlieferant
+!! 6.6.2011: neu Attribut Sicherheitskorridor (Input aus Vernehmlassung)
+!! 6.6.2011: Structure Eigenschaften: TEXT*80 statt *50
+!! 6.6.2011: TO DO: MTEXT einführen in SIA_Base für Textinhalt
+!! 6.6.2011: neu Abmessung = 0 .. 4000 [Units.mm]; statt 99999 !! Einheit Milimeter [mm], falls grösser als Fläche abbilden.
+!! 15.6.2011: Rohrprofil.weitere eingeführt
+!! 15.6.2011: Abwasser: Trockenwetterfallrohr rausgenommen. Nicht benötigt für belegten Raum
+!! 4.7.2011: OBJ_ID geändert auf OID AS UUIDOID (Antrag an SIA 405 Kommission)
+!! Zur Diskussion 4.7.2011: Bezeichnung wieder einführen gemäss http://www.geo.admin.ch -> Geodaten -> Geobasisdaten -> Geodatenmodelle -> KOGIS (2011): Allgemeine Empfehlungen zur Methodik der Definition "minimaler Geodatenmodelle
+!! 4.7.2011: Linie neu ungerichtet (DIRECTED gelöscht)
+!! rückgängig 6.6.2011 - geht nicht bei Höhen: neu Abmessung = 0 .. 4000 [Units.mm]; statt 99999 !! Einheit Milimeter [mm], falls grösser als Fläche abbilden.
+!! 5.7.2011: MD_ weggenommen bei Datenherr / Datenlieferant. Reihenfolge neu wieder alphabetisch angepasst. MD_ist im GM03 Metamodell für Klassen als Präfix reserviert.
+!! 27.6.2011: Anpassung Kabelpunkt - für die Darstellung im LK sind nur die Kabelschächte relevant. Kabelpunkte sind Punkte die zur Erfassung des Linienzuges des Fernwirkkabels erfasst werden, aber danach nicht mehr dargestellt werden müssen.
+!! 27.6.2011: Fernwirkabel, Kabelpunkt auch bei weitereMedien
+!! 2.8.2011 Anpassung 3D - neu Maechtigkeit statt Obj_Kote1 und Obj_Kote2 bei LKPunkt
+!! 2.8.2011 Anpassung 3D - neu Maechtigkeit statt Obj_Dimension1 bei LKLinie
+!! 2.8.2011 Dimension1 statt Obj_Dimension1 bei LKPunkt, dito für Dimension2
+!! 2.8.2011 OID Definition so angepasst, dass der Compiler sie für Richtig hält - UNIQUE rausgenommen.
+!! 2.8.2011 erledigt 3D Version als extends von 2D Version formulieren. SIA405_LKMap3D extends SIA405_LKMap
+!! 4.8.2011 neu (wieder) Abmessung = 0 .. 4000 [Units.mm]; statt 99999 !! Einheit Milimeter [mm], falls grösser als Fläche abbilden.
+!! 4.8.2011 neu AbmessungMaechtigkeit bei 3D = 0 .. 99999 [Units.mm]
+!! 5.8.2011 Lagebestimmung und Hoehenbestimmung MANDATORY gesetzt, sonst kann man Linienart nicht ableiten für Darstellung
+!! 5.8.2011 LKLinie.Haltung neu Haltung_Kanal, Kommentar ergänzt
+!! 5.8.2011 LKPunkt.Haltungspunkt gelöscht - wird in 3D nicht dargestellt - Haltungspunkt.Kote wird für die Haltung(_Kanal) Darstellung verwendet, aber nicht seperat notwendig
+!! 29.8.2011 LKObjekt.Eigentuemer neu TEXT*80 statt 40
+!! 29.8.2011 LKFlaeche Fernwaerme: nur noch Kammer, Station, Spezialbauwerk (Zusammenfassung)
+!! 29.8.2011 LKLinie.weitereMedien: neuer Wert Schutzrohr
+!! 29.8.2011 Diverse Fehlerkorrekturen in den Kommentaren
+!! 29.8.2011 Textinhalt in SIA405_Base MANDATORY gesetzt
+!! 21.2.2012 Abmessung in SIA405_Base verschoben - neu Breite: SIA405_Base.Abmessung;
+!! 21.2.2012 Einzelflaechen neu geerbt von Base.Polyline
+!! 21.2.2012 Eigentuemer neu SIA405_Base.OrganisationBezeichnung
+!! 21.2.2012 LKLine.Breite: SIA405_Base.Breite; statt Abmessung
+!! 21.2.2012 DOMAIN Abmessung neu geerbt von SIA045_Base, dito Einzelflaechen
+!! 21.2.2012 DOMAIN Orientierung neu in Base.ili
+!! 2.4.2012 Umsetzung Sicherheitskorridor - allenfalls als LKLinie statt LKFlaeche - noch klären -> nein
+!! 4.4.2012 Neu Einleitstelle statt Vorflutereinlauf bei Abwasser
+!! 23.5.2012 überflüssige Kommentare gelöscht
+!! 23.5.2012 Anpassungen Liste Zusammenfassung für Abwasser.Funktion = weitere an Modellversion 2012
+!! 8.6.2012 ASSOCIATION LKObjekt_LKObjektTextAssoc = !! neu als Komposition (statt Assoziation)
+!! LKObjektRef -<#> {1} LKObjekt; !! Rolle1 - Klasse1 / Rôle1 - Classe1
+!! Korrektur 24.1.2013 - Einleitstelle statt Vorflutereinlauf bei LKFlaeche - Anpassung INTERLIS an MB 2015
+!! Korrektur 24.1.2013 - Einleitstelle statt Vorflutereinlauf bei LKPunkt - Anpassung INTERLIS an MB 2015
+!! Korrektur 11.3.2013 Fehler in Script (fehlende Kommata)
+!! Korrektur 22.8.2013 Elektrizitat -> OeffentlicherVerbraucher statt Oeffentlicher_Verbraucher - Anpassung an Objektkatalog Elektrizität, Fehler in Objektkatalog LKMap
+!! Korrektur 22.8.2013 LKLinie.Objektart.
+!! Trasse ( !! LKLinie Objekt (oder LKFlaeche Objekt), neu Trasse statt Trassee
+!! oberirdisch, !! neu 22.8.2013 Matching: Trassetyp = Freileitung
+!! unterirdisch !! neu 22.8.2013 Matching alle anderen Werte von Trassetyp inkl. unbekannt
+!! ),
+!! Korrektur 25.9.2013 LKFlaeche.Objetkart.Elektrizitaet und Fernwaerme neu ohne Subwert unterirdisch (wie Kommunikation). Unterscheidung macht nur Sinn wenn auch oberirdisch. Flaechen sind eigentlich immer unterirdisch. (Feedback LK Baselland
+!! 28.6.2014 LKPunkt.Dimension1 und Dimension2 neu in LKMap - verschoben von LKMap3D. Wunsch aus Praxisanwendung
+!! 27.4.2018 Trasse, !! Darstellung S. 136 2.6.5 (Kapitelangabe korrigiert)
+!! 27.4.2018 !! Geprueft mit Compiler Version 4.7.7 (8.02.2018)
+
+UNIT
+
+DOMAIN
+
+!! Definition Datentypen nach INTERLIS 2.3
+
+TOPIC SIA405_LKMap =
+
+DOMAIN
+
+STRUCTURE Eigenschaften =
+!! Weitere Attribute zum LKObjekt gemäss bilateralen Vereinbarungen und medienspezifisch, die über die Darstellung der belegten Fläche hinausgehen.
+ Bezeichnung: MANDATORY TEXT * 80; !! Bezeichnung des weiteren Attributs zum LKObjekt (Attributname)
+ Wert: MANDATORY TEXT * 80; !! Wert des weiteren Attributs zum LKObjekt als Text
+END Eigenschaften;
+
+CLASS LKObjekt (ABSTRACT) EXTENDS SIA405_Base_LV95.SIA405_BaseClass =
+!! Klasse für alle Sachobjekte
+ Eigenschaft: BAG OF Eigenschaften; !! Weitere Attribute zum LKObjekt gemäss bilateralen Vereinbarungen und medienspezifisch, die über die Darstellung der belegten Fläche hinausgehen.
+ Eigentuemer: MANDATORY SIA405_Base_LV95.OrganisationBezeichnung; !! Text "Keine_Angabe" wenn Eigentümer nicht freigegeben wird.
+ Lagebestimmung: MANDATORY SIA405_Base_LV95.Genauigkeit;
+ Status: SIA405_Base_LV95.Status; !! Betriebs- und Planungszustand. Es können auch nur die Datensätze bestimmter Statuswerte geliefert werden.
+END LKObjekt;
+
+CLASS LKFlaeche EXTENDS LKObjekt =
+!! Flächiges LKObjekt
+ ATTRIBUTE
+ Flaeche: MANDATORY Base_LV95.Surface; !! Detaillierte Geometrie insbesondere bei Spezialbauwerken. Bei Normbauwerken mit Dimensionen arbeiten -> LKPunkt
+ Objektart: MANDATORY ( !! Es werden alle Objekte aufgelistet, die gemäss LK Umfang dargestellt werden
+ Abwasser ( !! nur falls Detailgeometrie vorhanden, sonst LKPunkt. Bei Normschacht nur in Ausnahmefällen
+ Einleitstelle,
+ Spezialbauwerk (
+ Oelabscheider_Schwimmstoffabscheider, !! Zusammenfassung von Oel- und Schwimmstoffabscheider
+!!* Oelabscheider,
+!!* Schwimmstoffabscheider,
+ Pumpwerk, !! Anlage zum Heben von Abwasser innerhalb eines Kanalnetzes
+ Regenbecken, !! Zusammenfassung aller Subwerte (Regenbecken_*)
+ weitere !! Zusammenfassung der folgenden Werte (Definitionen siehe Objektkatalog Merkblatt 2015 bzw. VSA-DSS):
+!!* Absturzbauwerk,
+!!* andere,
+!!* Be_Entlueftung,
+!!* Duekerkammer,
+!!* Duekeroberhaupt,
+!!* Entwaesserungsrinne,
+!!* Gelaendemulde,
+!!* Geschiebefang,
+!!* Hochwasserentlastung,
+!!* Jauchegrube,
+!!* Kanal, !! in Ausnahmefällen LKFlaeche (Staukanal), sonst wird Haltung als LKLinie abgebildet
+!!* Klaergrube,
+!!* Kontrollschacht, !! in Ausnahmefällen LKFlaeche, falls Detailgeometrie sonst LKPunkt Objekt.
+!!* seitlicherZugang,
+!!* Spuelschacht,
+!!* Trennbauwerk, !
+!!* Wirbelfallschacht,
+ ),
+ unbekannt, !! Spezialbauwerk.Funktion.unbekannt. LKFlaeche
+ Versickerungsanlage !! neu 2012 im Umfang LK
+!! Vorflutereinlauf !! neu 2012 im Umfang von LK
+!! Korrektur 24.1.2013 - Einleitstelle statt Vorflutereinlauf
+
+ ), !! Ende von Abwasser
+ Elektrizitaet (
+ Spezialbauwerk ( !! flächenhafte Spezialschächte (Kabine, Station, Oeffentlicher_Verbraucher, Schacht mit Geometrie), sonst als LKPunkt abbilden
+ Kabine, !! LKPunkt Objekt Symbol S. 65 oder LKFlaeche -> dann als Elektrizitaet.Spezialbauwerk abbilden
+!! rausgenommen 6.6.2011 Fehler Sonderbauwerk, !! LKFlaeche
+ Schacht, !! LKFlaeche Symbol S. 65 Darstellung als Fläche massstäblich
+ Station, !! LKPunkt Objekt Symbol S. 65 oder oder LKFlaeche -> dann als Elektrizitaet.Spezialbauwerk abbilden
+ !! Oeffentlicher_Verbraucher !! LKPunkt Objekt Symbol S.65 oder LKFlaeche -> dann als Elektrizitaet.Spezialbauwerk abbilden
+ OeffentlicherVerbraucher !! LKPunkt Objekt Symbol S.65 oder LKFlaeche -> dann als Elektrizitaet.Spezialbauwerk abbilden
+ ), !! End Spezialbauwerk
+ Tragwerk, !! LKPunkt Objekt oder LKFlaeche Objekt (bei grosser Fläche, z.B. Gittermast), Symbol S. 65. Tragwerke werden in der Regela als Symbol dargestellt. Bei Tragwerken mit grosser Fläche (z.B. Gittermast kann optional auch die Fläche dargestellt werden
+!! neu eingefügt 26.5.2011
+ Trasse, !! Darstellung S. 65, Korrigiert 25.9.2013 (kein Subwert unterirdisch mehr, Unterscheidung macht nur Sinn wenn auch oberirdisch. Flaechen sind eigentlich immer unterirdisch.
+!! unterirdisch !! LKFlaeche Objekt oder LKLinie Objekt, Symbol S. 65 -> Flächen von Trasse sollen grundsätzlich als LinieLKObjekt mit Breite angegeben werden. Es gibt aber zusätzliche Flächen, die man nicht so abbilden kann (komplizierte Formen die auch den belegten Raum abbilden), diese werden als Flächen übergeben
+ unbekannt !! LKFlaeche
+ ), !! Ende von Elektrizitaet
+ Fernwaerme (
+ Bauwerk ( !! LKFlaeche Objekt
+ Kammer, !! fasst folgende Werte zusammen
+!!* Entleeerungskammer,
+!!* Entlueftungskammer,
+!!* Hauptkammer,
+!!* Kompensatorenkammer,
+!!* Kontrollkammer,
+!!* Messkammer,
+!!* Steuerkammer,
+ Spezialbauwerk,
+ Station !! fasst folgende Werte zusammen:
+!!* Druckreduzierstation,
+!!* Umformerstation
+ ),
+!! Neu Eingefügt 26.5.2011 neu Trasse statt Trassee
+ Trasse, !! Darstellung S. 136 2.6.5, Korrigiert 25.9.2013 (kein Subwert unterirdisch mehr, Unterscheidung macht nur Sinn wenn auch oberirdisch. Flaechen sind eigentlich immer unterirdisch.
+!! unterirdisch !! LKFlaeche Objekt oder LKLinie Objekt, Symbol S. 65 -> Flächen von Trasse sollen grundsätzlich als LinieLKObjekt mit Breite angegeben werden. Es gibt aber zusätzliche Flächen, die man nicht so abbilden kann (komplizierte Formen die auch den belegten Raum abbilden), diese werden als Flächen übergeben
+ unbekannt !! LKFlaeche
+ ), !! Ende von Fernwaerme
+ Gas (
+!! neu 6.6.2011
+ Sicherheitskorridor, !! Die Rohrleitungsverordnung (RLV) schreibt im Abschnitt 5, Art. 26 vor, dass alle Bauvorhaben innerhalb eines waagrecht gemessenen Abstandes von 10 m von der Rohrleitung bewilligungspflichtig sind. Diese Information wird aus den Basisdaten der amtlichen Vermessung (TOPIC Rohrleitungen, Medium Gas) generiert. (eigener Datenlieferant)
+ Spezialbauwerk, !! LKFlaeche, alle Subwerte von Spezialbauwerk.Art
+!! weitere, !! Subwerte Spezialbauwerk.Art.weitere von Gas / Wasser wie Dueker etc. werden bei weitereMedien aufgeführt
+ unbekannt !! LKFlaeche, gibt es im Moment im WI Modell nicht, Antrag
+ ), !! Ende von Gas
+ Kommunikation ( !! Zusammenschluss von Tele- und Kabelkommmunikation
+!! gelöscht 16.5.2011 Spezialbauwerk, !! Schacht.Typ.Spezialbauwerk (Antrag statt Sonderbauwerk), LKFlaeche
+!! gelöscht 16.5.2011 Kabine, !! LKPunkt Objekt Symbol S. 69/75 oder LKFlaeche -> dann als Kommunikation.Spezialbauwerk abbilden
+!! gelöscht 16.5.2011 Konsole, !! LKPunkt Objekt Symbol S. 65/75 oder LKFlaeche -> dann als Kommunikation.Spezialbauwerk abbilden
+!! gelöscht 16.5.2011 TechnikCenter, !! LKPunkt Objekt Symbol S. 74 oder LKFlaeche -> dann als Kommunikation.Spezialbauwerk abbilden
+ Bauwerk, !! Schacht.Typ.Spezialbauwerk (Antrag statt Sonderbauwerk), LKFlaeche
+ Schacht, !!
+ Tragwerk, !! LKPunkt Objekt oder LKFlaeche Objekt (bei grosser Fläche, z.B. Gittermast), Symbol S. 75
+ Trasse,
+ !! In Kabelkommunikation INTERLIS 2 kann jeder Trasseknoten eine Flaeche haben??? -> besser auf Subklasse definieren?
+ unbekannt
+ ), !! Ende von Kommunikation
+ Wasser (
+ Spezialbauwerk, !! LKFlaeche, alle Subwerte von Spezialbauwerk.Art
+!! weitere, !! Subwerte weitere von Gas / Wasser wie Dueker etc. werden bei weitereMedien aufgeführt
+ unbekannt !! LKFlaeche, gibt es im Moment im WI Modell nicht, Antrag
+ ), !! Ende von Wasser
+ weitereMedien (
+!! neu 6.6.2011
+ Sicherheitskorridor, !! Die Rohrleitungsverordnung (RLV) schreibt im Abschnitt 5, Art. 26 vor, dass alle Bauvorhaben innerhalb eines waagrecht gemessenen Abstandes von 10 m von der Rohrleitung bewilligungspflichtig sind. Diese Information wird aus den Basisdaten der amtlichen Vermessung (TOPIC Rohrleitungen, alle Medien ausser Gas) generiert. (eigener Datenlieferant)
+ Spezialbauwerk, !! FlaecheLKObjekt Spezialbauwerk.Art.weitere von Gas/Wasser
+!!* weitere ( !! Flaeche LKObjekt (von Gas / Wasser übernommen -> oft mehr als ein Medium drin. Subwerte drinlassen?
+!!* Dueker,
+!!* Kulisse,
+!!* Futterrohr,
+!!* Leitungskanal (
+!!* begehbar,
+!!* nicht_begehbar),
+!!* Stollen (
+!!* begehbar,
+!!* nicht_begehbar),
+!!* uebrige
+!!* )
+ unbekannt !!
+ ) !! Ende von weitereMedien
+ ); !! Ende von Objektart
+END LKFlaeche;
+
+CLASS LKLinie EXTENDS LKObjekt =
+!! Linienförmiges LKObjekt
+ ATTRIBUTE
+ Breite: SIA405_Base_LV95.Breite; !! Breite eines Objektes [mm], Doppellinie >= 300 mm (Massstab 1:200) bzw. >= 600 mm (Mst. 1:500) für alle Medien. Falls die Breite kleiner ist wird nur ein Strich konstanter Breite gezeichnet.
+ !! Breite aus folgenden Attributen bestimmen:
+ !! Abwasser: Rohrprofil.Hoehenbreitenverhaeltnis, Haltung.Lichte_Hoehe -> Lichte_Breite = Lichte_Hoehe / Hoehenbreitenverhaeltnis
+ !! Wasser: Abhängig von Leitung.Material: bei Kunststoffrohren -> Leitung.DurchmesserAussen (mm), bei Metallrohren -> Leitung.Durchmesser (mm)
+ !! Gas: Abhängig von Leitung.Material: bei Kunststoffrohren -> Leitung.DurchmesserAussen (mm), bei Metallrohren -> Leitung.Durchmesser (mm)
+ !! Fernwärme: Trasseabschnitt.Trassebreite (mm)
+ !! Elektrizität: Trasseabschnitt.Breite (mm)
+ !! Kommunikation: Trasseabschnitt.Breite (mm)
+ Linie: MANDATORY Base_LV95.Polyline; !! Reihenfolge von Punkten die den Verlauf eines linienförmigen Elementes beschreibt.
+ Objektart: MANDATORY ( !! Es werden alle Objekte aufgelistet, die gemäss WI Modell dargestellt werden. Typ / Funktion / Art werden direkt übernommen und nicht zusammengefasst unter anderen Namen -> sonst braucht es wieder eine Matchinganweisung
+ Abwasser (
+ Fernwirkkabel, !! Steuer- und Signalkabel, Modellerweiterung 2010, noch nicht im aktuellen Release 2008 von SIA 405 Abwasser / VSA-DSS
+ Haltung_Kanal, !! LKLinie Objekt: Pro Haltung wird ein Objekt erzeugt. Falls mehrere Haltungen pro Kanal gibt es auch mehrere Lininenobjekte, da z.B. Lichte_Hoehe oder Gefälle ändern kann.
+ Schutzrohr !! neu 2010, noch nicht im aktuellen Release
+ ), !! Ende von Abwasser
+ Elektrizitaet (
+ AnkerStrebe, !! LKLinie Objekt, Darstellung S. 65
+ Trasse ( !! Darstellung S. 65
+ oberirdisch, !! LKLinie Objekt, Darstellung S. 65
+ unterirdisch !! (LKFlaeche Objekt oder) LKLinie Objekt, Symbol S. 65
+ )
+ ), !! Ende von Elektrizitaet
+ Fernwaerme (
+ Fernwirkkabel, !! Steuer- und Signalkabel
+ Trasse ( !! LKLinie Objekt (oder LKFlaeche Objekt), neu Trasse statt Trassee
+ oberirdisch, !! neu 22.8.2013 Matching: Trassetyp = Freileitung
+ unterirdisch !! neu 22.8.2013 Matching alle anderen Werte von Trassetyp inkl. unbekannt
+ ),
+ Schutzrohr !!
+ ), !! Ende von Fernwaerme
+ Gas (
+ Fernwirkkabel, !! Steuer- und Signalkabel
+ Leitung, !! LKLinie Objekt (Subwerte mit Art andere, Anschlussleitung etc. gehört eigentlich nicht hinein, sonst müsste man auch bei Abwasser machen). Falls gewünscht in BAG of Eigenschaft mitgeben
+ Schutzrohr !! neu 2010, noch nicht im aktuellen Release
+ ), !! Ende von Gas
+ Kommunikation (
+ Trasse ( !! Darstellung S. 69
+ oberirdisch, !! LKLinie Objekt, Darstellung S. 69
+ unterirdisch !! LKLinie Objekt, Darstellung S. 69
+ )
+ ), !! Ende von Kommunikation
+ Wasser (
+ Fernwirkkabel, !! Steuer- und Signalkabel
+ Leitung, !! LKLinie Objekt, Subwerte falls gewünscht in BAG of Eigenschaft mitgeben
+ Schutzrohr !! neu 2010, noch nicht im aktuellen Release
+ ), !! Ende von Wasser
+ weitereMedien (
+ Fernwirkkabel, !! Steuer- und Signalkabel
+ Leitung,
+ Schutzrohr
+ ) !! Ende von weitereMedien
+ ); !! Ende von Objektart
+ Profiltyp: ( !! Erweiterung 2D (für Beschriftung Leitung) und 3D - Typ des Profils, Zuordnung Werte siehe jeweiliges Medium (bis dato nur in Abwasser vorhanden, andere Medien müssten das ergänzen in WI
+ Eiprofil,
+ Kreisprofil,
+ Rechteckprofil,
+ unbekannt,
+ weitere !! Zusammenfassung von andere, Maulprofil, offenes_Profil, Spezialprofil. In 3D Darstellung als genähertes Rechteck.
+!!* andere,
+!!* Maulprofil,
+!!* offenes_Profil,
+!!* Spezialprofil,
+ );
+END LKLinie;
+
+
+CLASS LKPunkt EXTENDS LKObjekt =
+!! Punktförmiges LKObjekt
+ ATTRIBUTE
+ Dimension1: SIA405_Base_LV95.Abmessung; !! neu 2014, grösseres (Innen-)Mass eines Objektes (z. B. Länge/Durchmesser)
+ Dimension2: SIA405_Base_LV95.Abmessung; !! neu 2014, kleineres (Innen-)Mass eines Objektes (z. B. Breite/Durchmesser
+ Objektart: MANDATORY ( !! Es werden alle Objekte aufgelistet, die gemäss WI Modell dargestellt werden. Typ / Funktion / Art werden direkt übernommen und nicht zusammengefasst unter anderen Namen -> sonst braucht es wieder eine Matchinganweisung
+ Abwasser (
+ Deckel, !! LKPunkt Objekt. Abnehmbare Abdeckung eines Schachtbauwerkes
+!! Haltungspunkt, !! Erweiterung 3D - wird nicht dargestellt
+ Einleitstelle,
+ Kabelpunkt ( !! neu 2010, Modellerweiterung 2010, noch nicht im aktuellen Release 2008 von SIA 405 Abwasser / VSA-DSS
+!! Kabelpunkt, !! werden im LK nicht dargestellt, da mit der Linie des Fernwirkkabels schon vorhanden
+!! Kabelmuffe, !! werden im LK nicht dargestellt
+ Kabelschacht,
+ Kabine
+ ),
+ Kaliberwechsel, !! LKPunkt Objekt. Funktion. Wird in LK dargestellt, Orientierung notwendig (senkrecht zum Kanal / Haltung)
+ Kanalanfang, !! LKPunkt Objekt. Funktion. Wird in LK dargestellt, Orientierung notwendig (senkrecht zur Haltung)
+ Normschacht (
+ Einlaufschacht, !! LKPunkt Objekt.
+ Geleiseschacht, !! LKPunkt Objekt.
+ Kontrollschacht, !! LKPunkt Objekt. Symbol siehe SIA MB 2015 (2005) Seite 21.
+ Oelabscheider_Schwimmstoffabscheider, !! Zusammenfassung von zwei Werten
+!!* Oelabscheider,
+!!* Schwimmstoffabscheider,
+ Schlammsammler, !! LKPunkt Objekt.
+ weitere !! Gruppierung der folgenden weiteren Objekte Normschacht.Funktion, Symbol wie Kontrollschacht S.21
+!!* Absturzbauwerk,
+!!* andere,
+!!* Be_Entlueftung, !
+!!* Dachwasserschacht,
+!!* Hochwasserentlastung,
+!!* Klaergrube,
+!!* Pumpwerk,
+!!* Spuelschacht,
+!!* Trennbauwerk,
+ ),
+!! Trockenwetterfallrohr ist ab Release 2012 nicht mehr im Umfang LK
+!! Trockenwetterfallrohr, !! LKPunkt Objekt. Alle Werte Klasse Trockenwetterfallrohr. .
+ unbekannt, !! LKPunkt Objekt
+ Versickerungsanlage !! neu 2011 im Umfang LK
+!! Vorflutereinlauf !! LKPunkt Objekt oder LKFlaeche Objekt, neu 2012 im Umfang von LK
+!! Korrektur 24.1.2013 - Einleitstelle statt Vorflutereinlauf
+ ), !! Ende von Abwasser
+ Elektrizitaet (
+ Kabine, !! LKPunkt Objekt, Symbol S. 65
+ OeffentlicherVerbraucher, !! LKPunkt Objekt, Symbol S. 65
+ Schacht ( !!
+ rechteckig, !! Attribut Schachtyp ergänzt in WI Modell mit Release 2012 (fehlte in Datenmodell WI 2004 -> Modellfehler), nur bei Darstellung S. 65 vorhanden
+ rund !! Attribut Schachtyp ergänzt in WI Modell mit Release 2012 (fehlte in Datenmodell WI 2004 -> Modellfehler), nur bei Darstellung S. 65 vorhanden
+!! rausgenommen 6.6.2011 Fehlerkorrektur Sonderbauwerk !! Schachttyp = spezial als LKFlaeche Objekt abbilden, neuer Name 2012: Bauwerk
+ ),
+ Station, !! LKPunkt Objekt, Symbol S. 65
+ Tragwerk, !! LKPunkt Objekt oder LKFlaeche Objekt (bei grosser Fläche, z.B. Gittermast), Symbol S. 65. In INTERLIS 2 nur als LKFlaeche Objekt drin? Fehler?
+ unbekannt !! kein Symbol bei Elektritzität in 2015:2005, Vorschlag gleich wie bei Kabelkommunikation S. 74
+ ), !! Ende von Elektrizitaet
+ Fernwaerme (
+ Kabelpunkt (
+!! Kabelpunkt, !! werden im LK nicht dargestellt, da mit der Linie des Fernwirkkabels schon vorhanden
+ Kabelschacht,
+ Kabine),
+ Trassepunkt (
+ Abstuetzung, !! kein Symbol
+ Ent_Belueftung, !! Symbol S. 56
+ Entwaesserung, !! Symbol S. 56
+ Fixpunkt, !! Symbol S. 56
+ Geometriepunkt, !! kein Symbol
+ Montageoeffnung_Schachteinstieg !! Zusammenfassung von zwei Werten
+!!* Montageoeffnung, !! Symbol S. 56
+!!* Schachteinstieg, !! Symbol S. 56
+ ),
+ unbekannt
+ ), !! Ende von Fernwaerme
+ Gas (
+ Absperrorgan, !!( !! Absperrorgan.Art
+!! unbekannt, !! Kein Symbol in SIA MB 2015 (2005)
+!! Schieber, !! Symbol siehe SIA MB 2015 (2005) Seite 35
+!! Klappe !! Symbol siehe SIA MB 2015 (2005) Seite 35
+ Gaslaterne, !! Symbol siehe SIA MB 2015 (2005) Seite 31 / 35
+ Kabelpunkt ( !! neu 2010, Erweiterung Fernwirkkabel
+!! Kabelpunkt, !! werden im LK nicht dargestellt, da mit der Linie des Fernwirkkabels schon vorhanden
+ Kabelschacht,
+ Kabine
+ ),
+ Rohrleitungsteil ( !! Erweiterung 3D
+ Bogen_horizontal,
+ Bogen_vertikal
+ ),
+ Schacht, !! kein Symbol vorhanden. In INTERLIS LK vorhanden. Vorschlag Symbol wie Messstation aber ohne MS
+ Siphon,
+!! Siphon.Art wird nicht berücksichtigt. Schreibfehler im Datenkatalog Seite 29 Syphon statt Siphon. Kein Kreuz im Datenkatalog bei Siphon.Art, nur bei Name_Nummer.
+ unbekannt !! wie werden diese dargestellt? Vorschlag wie Schacht
+!! weitere
+ ), !! Ende von Gas
+ Kommunikation ( !! muss Tele- und Kabelkommunikation noch unterschieden werden?
+!! AnkerStrebe, !! LKPunkt Objekt, Darstellung S. 69
+ Bauwerk, !! Zusammenfassung alle Subklassenelemente (Baugruppenelement, Kabine, Konsole, TechnikCenter
+!! Baugruppenelement, !! LKPunkt Objekt, Darstellung S. 69, falls keine Flaechengeometrie
+!! Kabine, !! Kabelkommunikation
+!! Konsole, !! Kabelkommunikation
+ Schacht (
+ rechteckig, !! LKPunkt Objekt, Darstellung S. 69 / 74
+ rund !! LKPunkt Objekt, Darstellung S. 69 / 74
+!! Sonderbauwerk !! als LKFlaeche Objekt abbilden
+ ),
+!! TechnikCenter, !! LKPunkt Objekt oder LKFlaeche Objekt, Darstellung S. 74 (Kabelkommunikation)
+ Tragwerk, !! LKPunkt Objekt
+ unbekannt !! Attribut Schacht.Typ. LKPunkt Objekt, Darstellung S. 69 / 74
+ ), !! Ende von Kommunikation
+ Wasser (
+!! Leitungspunkt (
+!! andere, !! wie werden diese dargestellt?
+ Absperrorgan, !! ( !! Absperrorgan.Art
+!! unbekannt, !! Kein Symbol in SIA MB 2015 (2005), Symbol für Oberflurhydrant verwenden?
+!! Schieber, !! Symbol siehe SIA MB 2015 (2005) Seite 49
+!! Klappe !! Symbol siehe SIA MB 2015 (2005) Seite 49
+!! Hydrant ( !! Hydrant.Art je einzeln
+ Gartenhydrant, !! Symbol siehe SIA MB 2015 (2005) Seite 49
+ Kabelpunkt ( !! neu 2010, Erweiterung Fernwirkkabel
+!! Kabelpunkt, !! werden im LK nicht dargestellt, da mit der Linie des Fernwirkkabels schon vorhanden
+ Kabelschacht,
+ Kabine
+ ),
+ Oberflurhydrant, !! Symbol siehe SIA MB 2015 (2005) Seite 49
+ Rohrleitungsteil ( !! Erweiterung 3D
+ Bogen_horizontal,
+ Bogen_vertikal
+ ),
+ Schacht,
+ unbekannt, !! wie werden diese dargestellt?
+ Unterflurhydrant !! Symbol siehe SIA MB 2015 (2005) Seite 49
+ ), !! Ende von Wasser
+ weitereMedien (
+ Kabelpunkt ( !! neu 2010, Erweiterung Fernwirkkabel
+!! Kabelpunkt, !! werden im LK nicht dargestellt, da mit der Linie des Fernwirkkabels schon vorhanden
+ Kabelschacht,
+ Kabine),
+ Leitungspunkt !!
+ ) !! Ende von weitereMedien
+ ); !! Ende von Objektart
+ SymbolPos: MANDATORY Base_LV95.LKoord; !! Landeskoordinate Ost/Nord, 2D Koordinaten / analog wie bei Base_LV95.ili
+ SymbolOri: Base_LV95.Orientierung; !! Default: 90 Grad / analog wie Base_LV95.ili
+END LKPunkt;
+
+CLASS LKObjekt_Text EXTENDS SIA405_Base_LV95.SIA405_TextPos =
+END LKObjekt_Text;
+
+ASSOCIATION LKObjekt_LKObjektTextAssoc = !! Assoziation
+ LKObjektRef -<#> {1} LKObjekt; !! Rolle1 - Klasse1 / Rôle1 - Classe1 Komposition
+ LKObjekt_LKObjekt_TextAssocRef -- {0 .. *} LKObjekt_Text; !! Rolle2 - Klasse2 / Rôle2 - Classe2
+END LKObjekt_LKObjektTextAssoc;
+
+
+END SIA405_LKMap; !! Ende des Topic
+
+END SIA405_LKMap_2015_LV95. !! Ende des Modells / Fin du modèle
+
+
diff --git a/src/main/resources/models/SIA405_LKMap_2015_2_f-20180427.ili b/src/main/resources/models/SIA405_LKMap_2015_2_f-20180427.ili
new file mode 100644
index 0000000..ed7f2f1
--- /dev/null
+++ b/src/main/resources/models/SIA405_LKMap_2015_2_f-20180427.ili
@@ -0,0 +1,679 @@
+INTERLIS 2.3;
+
+MODEL SIA405_LKMap_2015_f (fr) AT "http://www.sia.ch/405"
+ VERSION "27.04.2018" TRANSLATION OF SIA405_LKMap_2015 [ "27.04.2018" ] =
+
+ IMPORTS UNQUALIFIED INTERLIS; !! neu 8.11.2004, importiert INTERLIS 2 Basisunits
+ IMPORTS Units;
+ IMPORTS Base_f;
+ IMPORTS SIA405_Base_f;
+
+!! Copyright 2011 - 2018
+!! SIA, Zürich - www.sia.ch
+
+!! Die Nutzung dieser INTERLIS-Datei ist lizenzpflichtig!
+
+!! Les fichiers modèles originaux et les versions
+!! modifiées à partir de ceux-ci ne peuvent pas être revendus.
+
+!! Freigegeben für öffentlichen Gebrauch und kommerzielle Anwendung mit Lizenz.
+!! Vérifié avec Compiler version 4.7.7 (8.02.2018)
+!! Greffier: Stefan Burckhardt / Sepp Dorfschmied / Commission SIA 405
+
+!! 25.8.2015 Première version française
+!! 30.10.2017 Base_f.Polyligne au lieu de Polyline
+!! 4.11.2017 Correction LKPOINT.TYPE_OBJET.Communication.Chambre_rond au lieu de rund
+!! 27.4.2018 !! Vérifié avec Compiler version 4.7.7 (8.02.2018)
+
+UNIT
+
+DOMAIN
+
+!! Definition types des dates selon INTERLIS 2.3
+
+TOPIC SIA405_LKMap_f =
+
+DOMAIN
+
+STRUCTURE CHARACTERISTIQUES =
+!! Les attributs suivants du LKOBJET dont l’illustration dépasse les surfaces concernées selon les conventions bilatérales et spécifiques du fluide.
+ DESIGNATION: MANDATORY TEXT * 80; !! Désignation des attributs suivants du LKOBJET
+ VALEUR: MANDATORY TEXT * 80; !! Valeur des attributs suivants du LKOBJET en tant que texte
+END CHARACTERISTIQUES;
+
+CLASS LKOBJET (ABSTRACT) EXTENDS SIA405_Base_f.SIA405_BaseClass =
+!! Klasse für alle Sachobjekte
+ CHARACTERISTIQUES: BAG OF CHARACTERISTIQUES; !! autre Attribute zum LKOBJET gemäss bilateralen Vereinbarungen und medienspezifisch, die über die Darstellung der belegten Fläche hinausgehen.
+ PROPRIETAIRE: MANDATORY SIA405_Base_f.Organisation_Designation; !! texte avec valeur aucune_indication si le propriétaire est connu, mais pas indiqué
+ DETERMINATION_PLANIMETRIQUE: MANDATORY SIA405_Base_f.Determination_planimetrique;
+ ETAT: SIA405_Base_f.Etat; !! Betriebs- und Planungszustand. Es können auch nur die Datensätze bestimmter StatusVALEURe geliefert werden.
+END LKOBJET;
+
+CLASS LKSURFACE EXTENDS LKOBJET =
+!! Flächiges LKOBJET
+ ATTRIBUTE
+ !! Corrections 26.8.2015 (pas encore change dans le catalogue des objets - SURFACE est un mot reservé en INTERLIS - nouvelle Nom française SURFACE2D
+ SURFACE2D: MANDATORY Base_f.Surface; !! Detaillierte Geometrie insbesondere bei construction_speciale. Bei Normbauwerken mit Dimensionen arbeiten -> LKPOINT
+ !! SURFACE: MANDATORY Base_f.Surface; !! Detaillierte Geometrie insbesondere bei construction_speciale. Bei Normbauwerken mit Dimensionen arbeiten -> LKPOINT
+ TYPE_OBJET: MANDATORY ( !! Es werden alle Objekte aufgelistet, die gemäss LK Umfang dargestellt werden
+ eaux_usees ( !! seulement si geometrie detaillée existe - sinon LKPoint. Bei Normschacht nur in Ausnahmefällen
+ exutoire_milieu_recepteur,
+ ouvrage_special (
+ separateur_d_hydrocarbures_separateur_de_materiaux_flottants, !! réunion des séparateurs d’hydrocarbures et matériaux flottants
+ station_de_pompage, !! Anlage zum Heben von eaux_usees innerhalb eines Kanalnetzes
+ BEP, !! réunion de tous les types de bassins d’eaux pluviales (BEP)
+ autre !! ouvrage de chute, autre, aération, chambre avec siphon inversé, rigole de drainage, dépression de terrain, dépotoir pour alluvions, déversoir d’orage, fosse à purin, canalisation, fosse septique, regard de visite, accès latéral, chambre de chasse, ouvrage de répartition, chambre de chute à vortex
+ ),
+ inconnu, !! construction_speciale.Funktion.inconnu. LKSURFACE
+ installation_infiltration !! neu 2012 im Umfang LK
+
+ ), !! Ende von eaux_usees
+ electricite (
+ installation ( !! objets surfaciques (cabine, utilisateur public, chambre,station avec géométrie) sinon illustrer par LKPOINT
+ cabine, !! si la surface est saisie, à exporter par LKSURFACE
+ chambre, !! si la surface est saisie, à exporter par LKSURFACE
+ station, !! si la surface est saisie, à exporter par LKSURFACE
+ utilisateur_public !! si la surface est saisie, à exporter par LKSURFACE
+ ), !! End installation
+ support, !! Les supports sont généralement représentés par des symboles. La surface peut être représentée en option (support d’une certaine dimension tels que des mâts à treillis).
+ trace, !! Les surfaces des tracés sont à transférer comme objet LKLIGNE avec la largeur mentionnée. Si des surfaces compliquées doivent être saisies, elles sont à transférer comme surfaces.
+ inconnu !! LKSURFACE
+ ), !! Ende von electricite
+ chauffage_a_distance (
+ ouvrage ( !! LKSURFACE Objekt
+ chambre, !! fasst folgende VALEURe zusammen
+!!* Entleeerungskammer,
+!!* Entlueftungskammer,
+!!* Hauptkammer,
+!!* Kompensatorenkammer,
+!!* Kontrollkammer,
+!!* Messkammer,
+!!* Steuerkammer,
+ ouvrage_special,
+ station !! fasst folgende VALEURe zusammen:
+!!* Druckreduzierstation,
+!!* Umformerstation
+ ),
+ trace, !! Les surfaces des tracés sont à transférer comme objet LKLIGNE avec la largeur mentionnée. Si des surfaces compliquées doivent être saisies, elles sont à transférer comme surfaces.
+ inconnu !! LKSURFACE
+ ), !! End chauffage_a_distance
+ gaz (
+ couloir_de_securite, !! Conformément à l’art. 26, alinéa 5, de l’Ordonnance sur les installations de transport par conduites (OITC), les projets de construction (travaux de fouilles) à l’intérieur d’une bande de terrain de 10 m, mesurée horizontalement de part et d’autre d’une conduite sont soumis à autorisation préalable. Ces informations sont générées par mensuration officielle (TOPIC conduites, fluide gaz) par un fournisseur séparé.
+ construction_speciale, !! LKSURFACE, tous les subvaleurs de construction_speciale.genre
+!! autre, !! SubVALEURe Spezialbauwerk.Art.autre von gaz / eau wie Dueker etc. werden bei weitereMedien aufgeführt
+ inconnu !! LKSURFACE, gibt es im Moment im WI Modell nicht, Antrag
+ ), !! Ende von gaz
+ communication ( !! réunion de télécommunications et communication par câble
+ ouvrage, !! objets surfaciques (armoire, console, centre techniques avec géométrie) à représenter par LKPOINT
+ chambre, !! surface supplémentaire pour chambre
+ support, !! LKPOINT Objekt oder LKSURFACE Objekt (bei grosser Fläche, z.B. Gittermast), Symbol S. 75
+ trace, !! Les supports sont généralement représentés par des symboles. La surface peut être représentée en option (support d’une certaine dimension tels que des mâts à treillis).
+ inconnu
+ ), !! End communication
+ eau (
+ construction_speciale, !! LKSURFACE, alle SubVALEURe von construction_speciale.Art
+!! autre, !! SubVALEURe autre von gaz / eau wie Dueker etc. werden bei weitereMedien aufgeführt
+ inconnu !! LKSURFACE, gibt es im Moment im WI Modell nicht, Antrag
+ ), !! Ende von eau
+ autres_fluides (
+ couloir_de_securite, !! Conformément à l’art. 26, alinéa 5, de l’Ordonnance sur les installations de transport par conduites (OITC), les projets de construction (travaux de fouilles) à l’intérieur d’une bande de terrain de 10 m, mesurée horizontalement de part et d’autre d’une conduite sont soumis à autorisation préalable. Ces informations sont générées par mensuration officielle (TOPIC conduites, fluide gaz) par un fournisseur séparé.
+ ouvrage_special, !! par ex. siphon
+ inconnu !!
+ ) !! End autres_fluides
+ ); !! End TYPE_OBJET
+END LKSURFACE;
+
+CLASS LKLIGNE EXTENDS LKOBJET =
+!! Linienförmiges LKOBJET
+ ATTRIBUTE
+ LARGEUR: SIA405_Base_f.Largeur; !! largeur d’un objet [mm], ligne double 0 300 mm (échelle 1:200) resp. 0 600 mm (échelle 1:500) pour tous les fluides
+ !! Breite aus folgenden Attributen bestimmen:
+ !! eaux_usees: Rohrprofil.Hoehenbreitenverhaeltnis, Haltung.Lichte_Hoehe -> Lichte_Breite = Lichte_Hoehe / Hoehenbreitenverhaeltnis
+ !! eau: Abhängig von Leitung.Material: bei Kunststoffrohren -> Leitung.DurchmesserAussen (mm), bei Metallrohren -> Leitung.Durchmesser (mm)
+ !! gaz: Abhängig von Leitung.Material: bei Kunststoffrohren -> Leitung.DurchmesserAussen (mm), bei Metallrohren -> Leitung.Durchmesser (mm)
+ !! Fernwärme: Trasseabschnitt.Trassebreite (mm)
+ !! Elektrizität: Trasseabschnitt.Breite (mm)
+ !! communication: Trasseabschnitt.Breite (mm)
+ !! LIGNE: MANDATORY Base_f.Polyline; !! Reihenfolge von Punkten die den Verlauf eines linienförmigen Elementes beschreibt.
+ LIGNE: MANDATORY Base_f.Polyligne; !! Reihenfolge von Punkten die den Verlauf eines linienförmigen Elementes beschreibt.
+ TYPE_OBJET: MANDATORY ( !! Es werden alle Objekte aufgelistet, die gemäss WI Modell dargestellt werden. Typ / Funktion / Art werden direkt übernommen und nicht zusammengefasst unter anderen Namen -> sonst braucht es wieder eine Matchinganweisung
+ eaux_usees (
+ cable_de_controle_a_distance, !! câble de commande et signal
+ troncon_canalisation, !! Un objet est créé par tronçon. Si plusieurs tronçons forment une canalisation, plusieurs objets lignes sont à créer, car la hauteur max. du profil ou la pente peuvent changer.
+ tube_de_protection !! neu 2010, noch nicht im aktuellen Release
+ ), !! Ende von eaux_usees
+ electricite (
+ hauban_contrefiche, !! LKLIGNE Objekt, Darstellung S. 65
+ trace ( !! Darstellung S. 65
+ aerien, !! LKLIGNE Objekt, Darstellung S. 65
+ souterrain !! (LKSURFACE Objekt oder) LKLIGNE Objekt, Symbol S. 65
+ )
+ ), !! Ende von electricite
+ chauffage_a_distance (
+ cable_de_controle_a_distance, !! Steuer- und Signalkabel
+ trace ( !! LKLIGNE Objekt (oder LKSURFACE Objekt), neu Trasse statt Trassee
+ aerien, !! neu 22.8.2013 Matching: Trassetyp = Freileitung
+ souterrain !! neu 22.8.2013 Matching alle anderen VALEURe von Trassetyp inkl. inconnu
+ ),
+ tube_de_protection !!
+ ), !! End chauffage_a_distance
+ gaz (
+ cable_de_controle_a_distance, !! Steuer- und Signalkabel
+ conduite, !! LKLIGNE Objekt (SubVALEURe mit Art andere, Anschlussleitung etc. gehört eigentlich nicht hinein, sonst müsste man auch bei eaux_usees machen). Falls gewünscht in BAG of Eigenschaft mitgeben
+ tube_de_protection !! neu 2010, noch nicht im aktuellen Release
+ ), !! End gaz
+ communication (
+ trace ( !! Darstellung S. 69
+ aerien, !! LKLIGNE Objekt, Darstellung S. 69
+ souterrain !! LKLIGNE Objekt, Darstellung S. 69
+ )
+ ), !! End communication
+ eau (
+ cable_de_controle_a_distance, !! Steuer- und Signalkabel
+ conduite, !! LKLIGNE Objekt, SubVALEURe falls gewünscht in BAG of Eigenschaft mitgeben
+ tube_de_protection !! neu 2010, noch nicht im aktuellen Release
+ ), !! End eau
+ autres_fluides (
+ cable_de_controle_a_distance, !! Steuer- und Signalkabel
+ conduite,
+ tube_de_protection
+ ) !! Ende von weitereMedien
+ ); !! Ende von TYPE_OBJET
+ TYPE_PROFIL: ( !! Erweiterung 2D (für Beschriftung Leitung) und 3D - Typ des Profils, Zuordnung VALEURe siehe jeweiliges Medium (bis dato nur in eaux_usees vorhanden, andere Medien müssten das ergänzen in WI
+ ovoide, !! attribution de la valeur voir le fluide concerné
+ circulaire, !! attribution de la valeur voir le fluide concerné
+ rectangulaire, !! attribution de la valeur voir le fluide concerné
+ inconnu, !! attribution de la valeur voir le fluide concerné
+ autre !! Zusammenfassung von andere, Maulprofil, offenes_Profil, Spezialprofil. In 3D Darstellung als genähertes Rechteck.
+!!* andere,
+!!* Maulprofil,
+!!* offenes_Profil,
+!!* Spezialprofil,
+ );
+END LKLIGNE;
+
+
+CLASS LKPOINT EXTENDS LKOBJET =
+!! Punktförmiges LKOBJET
+ ATTRIBUTE
+ DIMENSION1: SIA405_Base_f.Metrage; !! neu 2014, grösseres (Innen-)Mass eines Objektes (z. B. Länge/Durchmesser)
+ DIMENSION2: SIA405_Base_f.Metrage; !! neu 2014, kleineres (Innen-)Mass eines Objektes (z. B. Breite/Durchmesser
+ TYPE_OBJET: MANDATORY ( !! Es werden alle Objekte aufgelistet, die gemäss WI Modell dargestellt werden. Typ / Funktion / Art werden direkt übernommen und nicht zusammengefasst unter anderen Namen -> sonst braucht es wieder eine Matchinganweisung
+ eaux_usees (
+ couvercle, !! LKPOINT Objekt. Abnehmbare Abdeckung eines Schachtbauwerkes
+!! Haltungspunkt, !! Erweiterung 3D - wird nicht dargestellt
+ exutoire_milieu_recepteur,
+ point_de_cable ( !! neu 2010, Modellerweiterung 2010, noch nicht im aktuellen Release 2008 von SIA 405 eaux_usees / VSA-DSS
+!! point_de_cable, !! werden im LK nicht dargestellt, da mit der Linie des Fernwirkkabels schon vorhanden
+!! Kabelmuffe, !! werden im LK nicht dargestellt
+ chambre_a_cable,
+ cabine
+ ),
+ changement_de_diametre, !! LKPOINT Objekt. Funktion. fonction du fluide eaux usées. Wird in LK dargestellt, Orientation notwendig (senkrecht zum Kanal / Haltung)
+ debut_de_canalisation, !! LKPOINT Objekt. Funktion. fonction du fluide eaux usées. Wird in LK dargestellt, Orientation notwendig (senkrecht zur Haltung)
+ chambre_standard (
+ chambre_avec_grille_d_entree, !! LKPOINT Objekt.
+ evacuation_des_eaux_des_voies_ferrees, !! LKPOINT Objekt.
+ regard_de_visite, !! LKPOINT Objekt. Symbol siehe SIA MB 2015 (2005) Seite 21.
+ separateur_d_hydrocarbures_separateur_de_materiaux_flottants, !! Zusammenfassung von zwei VALEURen
+!!* Oelabscheider,
+!!* Schwimmstoffabscheider,
+ depotoir, !! LKPOINT Objekt.
+ autre !! autre = ouvrage de chute, aération, récolte des eaux de toitures, déversoir d’orage, fosse septique, station depompage, chambre de chasse, ouvrage de répartition
+ ),
+ inconnu, !! LKPOINT Objekt
+ installation_infiltration !! neu 2011 im Umfang LK
+ ), !! Ende von eaux_usees
+ electricite (
+ cabine, !! LKPOINT Objekt, Symbol S. 65
+ utilisateur_public, !! LKPOINT Objekt, Symbol S. 65
+ chambre ( !!
+ rectangulaire, !! Attribut Schachtyp ergänzt in WI Modell mit Release 2012 (fehlte in Datenmodell WI 2004 -> Modellfehler), nur bei Darstellung S. 65 vorhanden
+ rond !! Attribut Schachtyp ergänzt in WI Modell mit Release 2012 (fehlte in Datenmodell WI 2004 -> Modellfehler), nur bei Darstellung S. 65 vorhanden
+ ),
+ station, !! LKPOINT Objekt, Symbol S. 65
+ support, !! LKPOINT Objekt oder LKSURFACE Objekt (bei grosser Fläche, z.B. Gittermast), Symbol S. 65. In INTERLIS 2 nur als LKSURFACE Objekt drin? Fehler?
+ inconnu !! kein Symbol bei Elektritzität in 2015:2005, Vorschlag gleich wie bei Kabelcommunication S. 74
+ ), !! Ende von electricite
+ chauffage_a_distance (
+ point_de_cable (
+!! point_de_cable, !! werden im LK nicht dargestellt, da mit der Linie des Fernwirkkabels schon vorhanden
+ chambre_a_cable,
+ cabine),
+ point_du_trace (
+ support, !! kein Symbol - nächste Version aufheben
+ ventilation_drainage, !! Symbol S. 56
+ drainage, !! Symbol S. 56
+ point_fixe, !! Symbol S. 56
+ point_de_geometrie, !! kein Symbol - nächste Version aufheben
+ ouverture_de_montage_acces_de_chambre !! Zusammenfassung von zwei VALEURen
+!!* Montageoeffnung, !! Symbol S. 56
+!!* Schachteinstieg, !! Symbol S. 56
+ ),
+ inconnu
+ ), !! Ende von chauffage_a_distance
+ gaz (
+ organe_de_fermeture, !!( !! organe_de_fermeture.Art
+!! inconnu, !! Kein Symbol in SIA MB 2015 (2005)
+!! Schieber, !! Symbol siehe SIA MB 2015 (2005) Seite 35
+!! Klappe !! Symbol siehe SIA MB 2015 (2005) Seite 35
+ reverbere_a_gaz, !! Symbol siehe SIA MB 2015 (2005) Seite 31 / 35
+ point_de_cable ( !! neu 2010, Erweiterung cable_de_controle_a_distance
+!! point_de_cable, !! werden im LK nicht dargestellt, da mit der Linie des Fernwirkkabels schon vorhanden
+ chambre_a_cable,
+ cabine
+ ),
+ composant ( !! Erweiterung 3D
+ coude_horizontal,
+ coude_vertical
+ ),
+ chambre, !! kein Symbol vorhanden. In INTERLIS LK vorhanden. Vorschlag Symbol wie Messstation aber ohne MS
+ siphon,
+!! Siphon.Art wird nicht berücksichtigt. Schreibfehler im Datenkatalog Seite 29 Syphon statt Siphon. Kein Kreuz im Datenkatalog bei Siphon.Art, nur bei Name_Nummer.
+ inconnu !! wie werden diese dargestellt? Vorschlag wie Schacht
+!! autre
+ ), !! Ende von gaz
+ communication ( !! muss Tele- und Kabelcommunication noch unterschieden werden?
+!! AnkerStrebe, !! LKPOINT Objekt, Darstellung S. 69
+ ouvrage, !! Zusammenfassung alle Subklassenelemente (Baugruppenelement, Kabine, Konsole, TechnikCenter
+!! Baugruppenelement, !! LKPOINT Objekt, Darstellung S. 69, falls keine Flaechengeometrie
+!! Kabine, !! Kabelcommunication
+!! Konsole, !! Kabelcommunication
+ chambre (
+ rectangulaire, !! LKPOINT Objekt, Darstellung S. 69 / 74
+ !! rund !! LKPOINT Objekt, Darstellung S. 69 / 74
+ rond !! LKPOINT Objekt, Darstellung S. 69 / 74
+!! Sonderbauwerk !! als LKSURFACE Objekt abbilden
+ ),
+!! TechnikCenter, !! LKPOINT Objekt oder LKSURFACE Objekt, Darstellung S. 74 (Kabelcommunication)
+ support, !! LKPOINT Objekt
+ inconnu !! Attribut Schacht.Typ. LKPOINT Objekt, Darstellung S. 69 / 74
+ ), !! Ende von communication
+ eau (
+!! Leitungspunkt (
+!! andere, !! wie werden diese dargestellt?
+ organe_de_fermeture, !! ( !! organe_de_fermeture.Art
+!! inconnu, !! Kein Symbol in SIA MB 2015 (2005), Symbol für Oberflurhydrant verwenden?
+!! Schieber, !! Symbol siehe SIA MB 2015 (2005) Seite 49
+!! Klappe !! Symbol siehe SIA MB 2015 (2005) Seite 49
+!! Hydrant ( !! Hydrant.Art je einzeln
+ bouche_arrosage, !! Symbol siehe SIA MB 2015 (2005) Seite 49
+ point_de_cable ( !! neu 2010, Erweiterung cable_de_controle_a_distance
+!! point_de_cable, !! werden im LK nicht dargestellt, da mit der Linie des Fernwirkkabels schon vorhanden
+ chambre_a_cable,
+ cabine
+ ),
+ borne_hydrant, !! Symbol siehe SIA MB 2015 (2005) Seite 49
+ composant ( !! Erweiterung 3D
+ coude_horizontal,
+ coude_vertical
+ ),
+ chambre,
+ inconnu, !! wie werden diese dargestellt?
+ hydrant_souterrain !! Symbol siehe SIA MB 2015 (2005) Seite 49
+ ), !! Ende von eau
+ autres_fluides (
+ point_de_cable ( !! neu 2010, Erweiterung cable_de_controle_a_distance
+!! point_de_cable, !! werden im LK nicht dargestellt, da mit der Linie des Fernwirkkabels schon vorhanden
+ chambre_a_cable,
+ cabine),
+ point_de_conduite !!
+ ) !! Ende von weitereMedien
+ ); !! Ende von TYPE_OBJET
+ SYMBOLEPOS: MANDATORY Base_f.CoordNat; !! Landeskoordinate Ost/Nord, 2D Koordinaten / analog wie bei Base_f.ili
+ SYMBOLEORI: Base_f.Orientation; !! Default: 90 Grad / analog wie Base_f.ili
+END LKPOINT;
+
+CLASS LKOBJET_Texte EXTENDS SIA405_Base_f.SIA405_TextePos =
+END LKOBJET_Texte;
+
+ASSOCIATION LKOBJET_LKOBJETTexteAssoc = !! Assoziation
+ LKOBJETRef -<#> {1} LKOBJET; !! Rolle1 - Klasse1 / Rôle1 - Classe1 Komposition
+ LKOBJET_LKOBJET_TexteAssocRef -- {0 .. *} LKOBJET_Texte; !! Rolle2 - Klasse2 / Rôle2 - Classe2
+END LKOBJET_LKOBJETTexteAssoc;
+
+
+END SIA405_LKMap_f; !! Ende des Topic
+
+END SIA405_LKMap_2015_f. !! Ende des Modells / Fin du modèle
+
+
+
+
+!! INTERLIS 2.3;
+
+MODEL SIA405_LKMap_2015_f_LV95 (fr) AT "http://www.sia.ch/405"
+ VERSION "27.04.2018" TRANSLATION OF SIA405_LKMap_2015_LV95 [ "27.04.2018" ] =
+
+ IMPORTS UNQUALIFIED INTERLIS;
+ IMPORTS Units;
+ IMPORTS Base_f_LV95;
+ IMPORTS SIA405_Base_f_LV95;
+
+!! Copyright 2011 - 2018
+!! SIA, Zürich - www.sia.ch
+
+!! Die Nutzung dieser INTERLIS-Datei ist lizenzpflichtig!
+
+!! Les fichiers modèles originaux et les versions
+!! modifiées à partir de ceux-ci ne peuvent pas être revendus.
+
+!! Freigegeben für öffentlichen Gebrauch und kommerzielle Anwendung mit Lizenz.
+!! Vérifié avec Compiler version 4.7.7 (8.02.2018)
+!! Greffier: Stefan Burckhardt / Sepp Dorfschmied / Commission SIA 405
+
+!! 27.4.2018 Nouvelle version _LV95
+!! 27.4.2018 !! Vérifié avec Compiler version 4.7.7 (8.02.2018)
+
+
+UNIT
+
+DOMAIN
+
+!! Definition types des dates selon INTERLIS 2.3
+
+TOPIC SIA405_LKMap_f =
+
+DOMAIN
+
+STRUCTURE CHARACTERISTIQUES =
+!! Les attributs suivants du LKOBJET dont l’illustration dépasse les surfaces concernées selon les conventions bilatérales et spécifiques du fluide.
+ DESIGNATION: MANDATORY TEXT * 80; !! Désignation des attributs suivants du LKOBJET
+ VALEUR: MANDATORY TEXT * 80; !! Valeur des attributs suivants du LKOBJET en tant que texte
+END CHARACTERISTIQUES;
+
+CLASS LKOBJET (ABSTRACT) EXTENDS SIA405_Base_f_LV95.SIA405_BaseClass =
+!! Klasse für alle Sachobjekte
+ CHARACTERISTIQUES: BAG OF CHARACTERISTIQUES; !! autre Attribute zum LKOBJET gemäss bilateralen Vereinbarungen und medienspezifisch, die über die Darstellung der belegten Fläche hinausgehen.
+ PROPRIETAIRE: MANDATORY SIA405_Base_f_LV95.Organisation_Designation; !! texte avec valeur aucune_indication si le propriétaire est connu, mais pas indiqué
+ DETERMINATION_PLANIMETRIQUE: MANDATORY SIA405_Base_f_LV95.Determination_planimetrique;
+ ETAT: SIA405_Base_f_LV95.Etat; !! Betriebs- und Planungszustand. Es können auch nur die Datensätze bestimmter StatusVALEURe geliefert werden.
+END LKOBJET;
+
+CLASS LKSURFACE EXTENDS LKOBJET =
+!! Flächiges LKOBJET
+ ATTRIBUTE
+ !! Corrections 26.8.2015 (pas encore change dans le catalogue des objets - SURFACE est un mot reservé en INTERLIS - nouvelle Nom française SURFACE2D
+ SURFACE2D: MANDATORY Base_f_LV95.Surface; !! Detaillierte Geometrie insbesondere bei construction_speciale. Bei Normbauwerken mit Dimensionen arbeiten -> LKPOINT
+ TYPE_OBJET: MANDATORY ( !! Es werden alle Objekte aufgelistet, die gemäss LK Umfang dargestellt werden
+ eaux_usees ( !! seulement si geometrie detaillée existe - sinon LKPoint. Bei Normschacht nur in Ausnahmefällen
+ exutoire_milieu_recepteur,
+ ouvrage_special (
+ separateur_d_hydrocarbures_separateur_de_materiaux_flottants, !! réunion des séparateurs d’hydrocarbures et matériaux flottants
+ station_de_pompage, !! Anlage zum Heben von eaux_usees innerhalb eines Kanalnetzes
+ BEP, !! réunion de tous les types de bassins d’eaux pluviales (BEP)
+ autre !! ouvrage de chute, autre, aération, chambre avec siphon inversé, rigole de drainage, dépression de terrain, dépotoir pour alluvions, déversoir d’orage, fosse à purin, canalisation, fosse septique, regard de visite, accès latéral, chambre de chasse, ouvrage de répartition, chambre de chute à vortex
+ ),
+ inconnu, !! construction_speciale.Funktion.inconnu. LKSURFACE
+ installation_infiltration !! neu 2012 im Umfang LK
+
+ ), !! Ende von eaux_usees
+ electricite (
+ installation ( !! objets surfaciques (cabine, utilisateur public, chambre,station avec géométrie) sinon illustrer par LKPOINT
+ cabine, !! si la surface est saisie, à exporter par LKSURFACE
+ chambre, !! si la surface est saisie, à exporter par LKSURFACE
+ station, !! si la surface est saisie, à exporter par LKSURFACE
+ utilisateur_public !! si la surface est saisie, à exporter par LKSURFACE
+ ), !! End installation
+ support, !! Les supports sont généralement représentés par des symboles. La surface peut être représentée en option (support d’une certaine dimension tels que des mâts à treillis).
+ trace, !! Les surfaces des tracés sont à transférer comme objet LKLIGNE avec la largeur mentionnée. Si des surfaces compliquées doivent être saisies, elles sont à transférer comme surfaces.
+ inconnu !! LKSURFACE
+ ), !! Ende von electricite
+ chauffage_a_distance (
+ ouvrage ( !! LKSURFACE Objekt
+ chambre, !! fasst folgende VALEURe zusammen
+!!* Entleeerungskammer,
+!!* Entlueftungskammer,
+!!* Hauptkammer,
+!!* Kompensatorenkammer,
+!!* Kontrollkammer,
+!!* Messkammer,
+!!* Steuerkammer,
+ ouvrage_special,
+ station !! fasst folgende VALEURe zusammen:
+!!* Druckreduzierstation,
+!!* Umformerstation
+ ),
+ trace, !! Les surfaces des tracés sont à transférer comme objet LKLIGNE avec la largeur mentionnée. Si des surfaces compliquées doivent être saisies, elles sont à transférer comme surfaces.
+ inconnu !! LKSURFACE
+ ), !! End chauffage_a_distance
+ gaz (
+ couloir_de_securite, !! Conformément à l’art. 26, alinéa 5, de l’Ordonnance sur les installations de transport par conduites (OITC), les projets de construction (travaux de fouilles) à l’intérieur d’une bande de terrain de 10 m, mesurée horizontalement de part et d’autre d’une conduite sont soumis à autorisation préalable. Ces informations sont générées par mensuration officielle (TOPIC conduites, fluide gaz) par un fournisseur séparé.
+ construction_speciale, !! LKSURFACE, tous les subvaleurs de construction_speciale.genre
+!! autre, !! SubVALEURe Spezialbauwerk.Art.autre von gaz / eau wie Dueker etc. werden bei weitereMedien aufgeführt
+ inconnu !! LKSURFACE, gibt es im Moment im WI Modell nicht, Antrag
+ ), !! Ende von gaz
+ communication ( !! réunion de télécommunications et communication par câble
+ ouvrage, !! objets surfaciques (armoire, console, centre techniques avec géométrie) à représenter par LKPOINT
+ chambre, !! surface supplémentaire pour chambre
+ support, !! LKPOINT Objekt oder LKSURFACE Objekt (bei grosser Fläche, z.B. Gittermast), Symbol S. 75
+ trace, !! Les supports sont généralement représentés par des symboles. La surface peut être représentée en option (support d’une certaine dimension tels que des mâts à treillis).
+ inconnu
+ ), !! End communication
+ eau (
+ construction_speciale, !! LKSURFACE, alle SubVALEURe von construction_speciale.Art
+!! autre, !! SubVALEURe autre von gaz / eau wie Dueker etc. werden bei weitereMedien aufgeführt
+ inconnu !! LKSURFACE, gibt es im Moment im WI Modell nicht, Antrag
+ ), !! Ende von eau
+ autres_fluides (
+ couloir_de_securite, !! Conformément à l’art. 26, alinéa 5, de l’Ordonnance sur les installations de transport par conduites (OITC), les projets de construction (travaux de fouilles) à l’intérieur d’une bande de terrain de 10 m, mesurée horizontalement de part et d’autre d’une conduite sont soumis à autorisation préalable. Ces informations sont générées par mensuration officielle (TOPIC conduites, fluide gaz) par un fournisseur séparé.
+ ouvrage_special, !! par ex. siphon
+ inconnu !!
+ ) !! End autres_fluides
+ ); !! End TYPE_OBJET
+END LKSURFACE;
+
+CLASS LKLIGNE EXTENDS LKOBJET =
+!! Linienförmiges LKOBJET
+ ATTRIBUTE
+ LARGEUR: SIA405_Base_f_LV95.Largeur; !! largeur d’un objet [mm], ligne double 0 300 mm (échelle 1:200) resp. 0 600 mm (échelle 1:500) pour tous les fluides
+ !! Breite aus folgenden Attributen bestimmen:
+ !! eaux_usees: Rohrprofil.Hoehenbreitenverhaeltnis, Haltung.Lichte_Hoehe -> Lichte_Breite = Lichte_Hoehe / Hoehenbreitenverhaeltnis
+ !! eau: Abhängig von Leitung.Material: bei Kunststoffrohren -> Leitung.DurchmesserAussen (mm), bei Metallrohren -> Leitung.Durchmesser (mm)
+ !! gaz: Abhängig von Leitung.Material: bei Kunststoffrohren -> Leitung.DurchmesserAussen (mm), bei Metallrohren -> Leitung.Durchmesser (mm)
+ !! Fernwärme: Trasseabschnitt.Trassebreite (mm)
+ !! Elektrizität: Trasseabschnitt.Breite (mm)
+ !! communication: Trasseabschnitt.Breite (mm)
+ LIGNE: MANDATORY Base_f_LV95.Polyligne; !! Reihenfolge von Punkten die den Verlauf eines linienförmigen Elementes beschreibt.
+ TYPE_OBJET: MANDATORY ( !! Es werden alle Objekte aufgelistet, die gemäss WI Modell dargestellt werden. Typ / Funktion / Art werden direkt übernommen und nicht zusammengefasst unter anderen Namen -> sonst braucht es wieder eine Matchinganweisung
+ eaux_usees (
+ cable_de_controle_a_distance, !! câble de commande et signal
+ troncon_canalisation, !! Un objet est créé par tronçon. Si plusieurs tronçons forment une canalisation, plusieurs objets lignes sont à créer, car la hauteur max. du profil ou la pente peuvent changer.
+ tube_de_protection !! neu 2010, noch nicht im aktuellen Release
+ ), !! Ende von eaux_usees
+ electricite (
+ hauban_contrefiche, !! LKLIGNE Objekt, Darstellung S. 65
+ trace ( !! Darstellung S. 65
+ aerien, !! LKLIGNE Objekt, Darstellung S. 65
+ souterrain !! (LKSURFACE Objekt oder) LKLIGNE Objekt, Symbol S. 65
+ )
+ ), !! Ende von electricite
+ chauffage_a_distance (
+ cable_de_controle_a_distance, !! Steuer- und Signalkabel
+ trace ( !! LKLIGNE Objekt (oder LKSURFACE Objekt), neu Trasse statt Trassee
+ aerien, !! neu 22.8.2013 Matching: Trassetyp = Freileitung
+ souterrain !! neu 22.8.2013 Matching alle anderen VALEURe von Trassetyp inkl. inconnu
+ ),
+ tube_de_protection !!
+ ), !! End chauffage_a_distance
+ gaz (
+ cable_de_controle_a_distance, !! Steuer- und Signalkabel
+ conduite, !! LKLIGNE Objekt (SubVALEURe mit Art andere, Anschlussleitung etc. gehört eigentlich nicht hinein, sonst müsste man auch bei eaux_usees machen). Falls gewünscht in BAG of Eigenschaft mitgeben
+ tube_de_protection !! neu 2010, noch nicht im aktuellen Release
+ ), !! End gaz
+ communication (
+ trace ( !! Darstellung S. 69
+ aerien, !! LKLIGNE Objekt, Darstellung S. 69
+ souterrain !! LKLIGNE Objekt, Darstellung S. 69
+ )
+ ), !! End communication
+ eau (
+ cable_de_controle_a_distance, !! Steuer- und Signalkabel
+ conduite, !! LKLIGNE Objekt, SubVALEURe falls gewünscht in BAG of Eigenschaft mitgeben
+ tube_de_protection !! neu 2010, noch nicht im aktuellen Release
+ ), !! End eau
+ autres_fluides (
+ cable_de_controle_a_distance, !! Steuer- und Signalkabel
+ conduite,
+ tube_de_protection
+ ) !! Ende von weitereMedien
+ ); !! Ende von TYPE_OBJET
+ TYPE_PROFIL: ( !! Erweiterung 2D (für Beschriftung Leitung) und 3D - Typ des Profils, Zuordnung VALEURe siehe jeweiliges Medium (bis dato nur in eaux_usees vorhanden, andere Medien müssten das ergänzen in WI
+ ovoide, !! attribution de la valeur voir le fluide concerné
+ circulaire, !! attribution de la valeur voir le fluide concerné
+ rectangulaire, !! attribution de la valeur voir le fluide concerné
+ inconnu, !! attribution de la valeur voir le fluide concerné
+ autre !! Zusammenfassung von andere, Maulprofil, offenes_Profil, Spezialprofil. In 3D Darstellung als genähertes Rechteck.
+!!* andere,
+!!* Maulprofil,
+!!* offenes_Profil,
+!!* Spezialprofil,
+ );
+END LKLIGNE;
+
+
+CLASS LKPOINT EXTENDS LKOBJET =
+!! Punktförmiges LKOBJET
+ ATTRIBUTE
+ DIMENSION1: SIA405_Base_f_LV95.Metrage; !! neu 2014, grösseres (Innen-)Mass eines Objektes (z. B. Länge/Durchmesser)
+ DIMENSION2: SIA405_Base_f_LV95.Metrage; !! neu 2014, kleineres (Innen-)Mass eines Objektes (z. B. Breite/Durchmesser
+ TYPE_OBJET: MANDATORY ( !! Es werden alle Objekte aufgelistet, die gemäss WI Modell dargestellt werden. Typ / Funktion / Art werden direkt übernommen und nicht zusammengefasst unter anderen Namen -> sonst braucht es wieder eine Matchinganweisung
+ eaux_usees (
+ couvercle, !! LKPOINT Objekt. Abnehmbare Abdeckung eines Schachtbauwerkes
+!! Haltungspunkt, !! Erweiterung 3D - wird nicht dargestellt
+ exutoire_milieu_recepteur,
+ point_de_cable ( !! neu 2010, Modellerweiterung 2010, noch nicht im aktuellen Release 2008 von SIA 405 eaux_usees / VSA-DSS
+!! point_de_cable, !! werden im LK nicht dargestellt, da mit der Linie des Fernwirkkabels schon vorhanden
+!! Kabelmuffe, !! werden im LK nicht dargestellt
+ chambre_a_cable,
+ cabine
+ ),
+ changement_de_diametre, !! LKPOINT Objekt. Funktion. fonction du fluide eaux usées. Wird in LK dargestellt, Orientation notwendig (senkrecht zum Kanal / Haltung)
+ debut_de_canalisation, !! LKPOINT Objekt. Funktion. fonction du fluide eaux usées. Wird in LK dargestellt, Orientation notwendig (senkrecht zur Haltung)
+ chambre_standard (
+ chambre_avec_grille_d_entree, !! LKPOINT Objekt.
+ evacuation_des_eaux_des_voies_ferrees, !! LKPOINT Objekt.
+ regard_de_visite, !! LKPOINT Objekt. Symbol siehe SIA MB 2015 (2005) Seite 21.
+ separateur_d_hydrocarbures_separateur_de_materiaux_flottants, !! Zusammenfassung von zwei VALEURen
+!!* Oelabscheider,
+!!* Schwimmstoffabscheider,
+ depotoir, !! LKPOINT Objekt.
+ autre !! autre = ouvrage de chute, aération, récolte des eaux de toitures, déversoir d’orage, fosse septique, station depompage, chambre de chasse, ouvrage de répartition
+ ),
+ inconnu, !! LKPOINT Objekt
+ installation_infiltration !! neu 2011 im Umfang LK
+ ), !! Ende von eaux_usees
+ electricite (
+ cabine, !! LKPOINT Objekt, Symbol S. 65
+ utilisateur_public, !! LKPOINT Objekt, Symbol S. 65
+ chambre ( !!
+ rectangulaire, !! Attribut Schachtyp ergänzt in WI Modell mit Release 2012 (fehlte in Datenmodell WI 2004 -> Modellfehler), nur bei Darstellung S. 65 vorhanden
+ rond !! Attribut Schachtyp ergänzt in WI Modell mit Release 2012 (fehlte in Datenmodell WI 2004 -> Modellfehler), nur bei Darstellung S. 65 vorhanden
+ ),
+ station, !! LKPOINT Objekt, Symbol S. 65
+ support, !! LKPOINT Objekt oder LKSURFACE Objekt (bei grosser Fläche, z.B. Gittermast), Symbol S. 65. In INTERLIS 2 nur als LKSURFACE Objekt drin? Fehler?
+ inconnu !! kein Symbol bei Elektritzität in 2015:2005, Vorschlag gleich wie bei Kabelcommunication S. 74
+ ), !! Ende von electricite
+ chauffage_a_distance (
+ point_de_cable (
+!! point_de_cable, !! werden im LK nicht dargestellt, da mit der Linie des Fernwirkkabels schon vorhanden
+ chambre_a_cable,
+ cabine),
+ point_du_trace (
+ support, !! kein Symbol - nächste Version aufheben
+ ventilation_drainage, !! Symbol S. 56
+ drainage, !! Symbol S. 56
+ point_fixe, !! Symbol S. 56
+ point_de_geometrie, !! kein Symbol - nächste Version aufheben
+ ouverture_de_montage_acces_de_chambre !! Zusammenfassung von zwei VALEURen
+!!* Montageoeffnung, !! Symbol S. 56
+!!* Schachteinstieg, !! Symbol S. 56
+ ),
+ inconnu
+ ), !! Ende von chauffage_a_distance
+ gaz (
+ organe_de_fermeture, !!( !! organe_de_fermeture.Art
+!! inconnu, !! Kein Symbol in SIA MB 2015 (2005)
+!! Schieber, !! Symbol siehe SIA MB 2015 (2005) Seite 35
+!! Klappe !! Symbol siehe SIA MB 2015 (2005) Seite 35
+ reverbere_a_gaz, !! Symbol siehe SIA MB 2015 (2005) Seite 31 / 35
+ point_de_cable ( !! neu 2010, Erweiterung cable_de_controle_a_distance
+!! point_de_cable, !! werden im LK nicht dargestellt, da mit der Linie des Fernwirkkabels schon vorhanden
+ chambre_a_cable,
+ cabine
+ ),
+ composant ( !! Erweiterung 3D
+ coude_horizontal,
+ coude_vertical
+ ),
+ chambre, !! kein Symbol vorhanden. In INTERLIS LK vorhanden. Vorschlag Symbol wie Messstation aber ohne MS
+ siphon,
+!! Siphon.Art wird nicht berücksichtigt. Schreibfehler im Datenkatalog Seite 29 Syphon statt Siphon. Kein Kreuz im Datenkatalog bei Siphon.Art, nur bei Name_Nummer.
+ inconnu !! wie werden diese dargestellt? Vorschlag wie Schacht
+!! autre
+ ), !! Ende von gaz
+ communication ( !! muss Tele- und Kabelcommunication noch unterschieden werden?
+!! AnkerStrebe, !! LKPOINT Objekt, Darstellung S. 69
+ ouvrage, !! Zusammenfassung alle Subklassenelemente (Baugruppenelement, Kabine, Konsole, TechnikCenter
+!! Baugruppenelement, !! LKPOINT Objekt, Darstellung S. 69, falls keine Flaechengeometrie
+!! Kabine, !! Kabelcommunication
+!! Konsole, !! Kabelcommunication
+ chambre (
+ rectangulaire, !! LKPOINT Objekt, Darstellung S. 69 / 74
+ !! rund !! LKPOINT Objekt, Darstellung S. 69 / 74
+ rond !! LKPOINT Objekt, Darstellung S. 69 / 74
+!! Sonderbauwerk !! als LKSURFACE Objekt abbilden
+ ),
+!! TechnikCenter, !! LKPOINT Objekt oder LKSURFACE Objekt, Darstellung S. 74 (Kabelcommunication)
+ support, !! LKPOINT Objekt
+ inconnu !! Attribut Schacht.Typ. LKPOINT Objekt, Darstellung S. 69 / 74
+ ), !! Ende von communication
+ eau (
+!! Leitungspunkt (
+!! andere, !! wie werden diese dargestellt?
+ organe_de_fermeture, !! ( !! organe_de_fermeture.Art
+!! inconnu, !! Kein Symbol in SIA MB 2015 (2005), Symbol für Oberflurhydrant verwenden?
+!! Schieber, !! Symbol siehe SIA MB 2015 (2005) Seite 49
+!! Klappe !! Symbol siehe SIA MB 2015 (2005) Seite 49
+!! Hydrant ( !! Hydrant.Art je einzeln
+ bouche_arrosage, !! Symbol siehe SIA MB 2015 (2005) Seite 49
+ point_de_cable ( !! neu 2010, Erweiterung cable_de_controle_a_distance
+!! point_de_cable, !! werden im LK nicht dargestellt, da mit der Linie des Fernwirkkabels schon vorhanden
+ chambre_a_cable,
+ cabine
+ ),
+ borne_hydrant, !! Symbol siehe SIA MB 2015 (2005) Seite 49
+ composant ( !! Erweiterung 3D
+ coude_horizontal,
+ coude_vertical
+ ),
+ chambre,
+ inconnu, !! wie werden diese dargestellt?
+ hydrant_souterrain !! Symbol siehe SIA MB 2015 (2005) Seite 49
+ ), !! Ende von eau
+ autres_fluides (
+ point_de_cable ( !! neu 2010, Erweiterung cable_de_controle_a_distance
+!! point_de_cable, !! werden im LK nicht dargestellt, da mit der Linie des Fernwirkkabels schon vorhanden
+ chambre_a_cable,
+ cabine),
+ point_de_conduite !!
+ ) !! Ende von weitereMedien
+ ); !! Ende von TYPE_OBJET
+ SYMBOLEPOS: MANDATORY Base_f_LV95.CoordNat; !! Landeskoordinate Ost/Nord, 2D Koordinaten / analog wie bei Base_f_LV95.ili
+ SYMBOLEORI: Base_f_LV95.Orientation; !! Default: 90 Grad / analog wie Base_f_LV95.ili
+END LKPOINT;
+
+CLASS LKOBJET_Texte EXTENDS SIA405_Base_f_LV95.SIA405_TextePos =
+END LKOBJET_Texte;
+
+ASSOCIATION LKOBJET_LKOBJETTexteAssoc = !! Assoziation
+ LKOBJETRef -<#> {1} LKOBJET; !! Rolle1 - Klasse1 / Rôle1 - Classe1 Komposition
+ LKOBJET_LKOBJET_TexteAssocRef -- {0 .. *} LKOBJET_Texte; !! Rolle2 - Klasse2 / Rôle2 - Classe2
+END LKOBJET_LKOBJETTexteAssoc;
+
+
+END SIA405_LKMap_f; !! Ende des Topic
+
+END SIA405_LKMap_2015_f_LV95. !! Ende des Modells / Fin du modèle
+
+
diff --git a/src/main/resources/models/Units-20120220.ili b/src/main/resources/models/Units-20120220.ili
new file mode 100644
index 0000000..a2939e8
--- /dev/null
+++ b/src/main/resources/models/Units-20120220.ili
@@ -0,0 +1,96 @@
+!! File Units.ili Release 2012-02-20
+
+INTERLIS 2.3;
+
+!! 2012-02-20 definition of "Bar [bar]" corrected
+!!@precursorVersion = 2005-06-06
+
+CONTRACTED TYPE MODEL Units (en) AT "http://www.interlis.ch/models"
+ VERSION "2012-02-20" =
+
+ UNIT
+ !! abstract Units
+ Area (ABSTRACT) = (INTERLIS.LENGTH*INTERLIS.LENGTH);
+ Volume (ABSTRACT) = (INTERLIS.LENGTH*INTERLIS.LENGTH*INTERLIS.LENGTH);
+ Velocity (ABSTRACT) = (INTERLIS.LENGTH/INTERLIS.TIME);
+ Acceleration (ABSTRACT) = (Velocity/INTERLIS.TIME);
+ Force (ABSTRACT) = (INTERLIS.MASS*INTERLIS.LENGTH/INTERLIS.TIME/INTERLIS.TIME);
+ Pressure (ABSTRACT) = (Force/Area);
+ Energy (ABSTRACT) = (Force*INTERLIS.LENGTH);
+ Power (ABSTRACT) = (Energy/INTERLIS.TIME);
+ Electric_Potential (ABSTRACT) = (Power/INTERLIS.ELECTRIC_CURRENT);
+ Frequency (ABSTRACT) = (INTERLIS.DIMENSIONLESS/INTERLIS.TIME);
+
+ Millimeter [mm] = 0.001 [INTERLIS.m];
+ Centimeter [cm] = 0.01 [INTERLIS.m];
+ Decimeter [dm] = 0.1 [INTERLIS.m];
+ Kilometer [km] = 1000 [INTERLIS.m];
+
+ Square_Meter [m2] EXTENDS Area = (INTERLIS.m*INTERLIS.m);
+ Cubic_Meter [m3] EXTENDS Volume = (INTERLIS.m*INTERLIS.m*INTERLIS.m);
+
+ Minute [min] = 60 [INTERLIS.s];
+ Hour [h] = 60 [min];
+ Day [d] = 24 [h];
+
+ Kilometer_per_Hour [kmh] EXTENDS Velocity = (km/h);
+ Meter_per_Second [ms] = 3.6 [kmh];
+ Newton [N] EXTENDS Force = (INTERLIS.kg*INTERLIS.m/INTERLIS.s/INTERLIS.s);
+ Pascal [Pa] EXTENDS Pressure = (N/m2);
+ Joule [J] EXTENDS Energy = (N*INTERLIS.m);
+ Watt [W] EXTENDS Power = (J/INTERLIS.s);
+ Volt [V] EXTENDS Electric_Potential = (W/INTERLIS.A);
+
+ Inch [in] = 2.54 [cm];
+ Foot [ft] = 0.3048 [INTERLIS.m];
+ Mile [mi] = 1.609344 [km];
+
+ Are [a] = 100 [m2];
+ Hectare [ha] = 100 [a];
+ Square_Kilometer [km2] = 100 [ha];
+ Acre [acre] = 4046.873 [m2];
+
+ Liter [L] = 1 / 1000 [m3];
+ US_Gallon [USgal] = 3.785412 [L];
+
+ Angle_Degree = 180 / PI [INTERLIS.rad];
+ Angle_Minute = 1 / 60 [Angle_Degree];
+ Angle_Second = 1 / 60 [Angle_Minute];
+
+ Gon = 200 / PI [INTERLIS.rad];
+
+ Gram [g] = 1 / 1000 [INTERLIS.kg];
+ Ton [t] = 1000 [INTERLIS.kg];
+ Pound [lb] = 0.4535924 [INTERLIS.kg];
+
+ Calorie [cal] = 4.1868 [J];
+ Kilowatt_Hour [kWh] = 0.36E7 [J];
+
+ Horsepower = 746 [W];
+
+ Techn_Atmosphere [at] = 98066.5 [Pa];
+ Atmosphere [atm] = 101325 [Pa];
+ Bar [bar] = 100000 [Pa];
+ Millimeter_Mercury [mmHg] = 133.3224 [Pa];
+ Torr = 133.3224 [Pa]; !! Torr = [mmHg]
+
+ Decibel [dB] = FUNCTION // 10**(dB/20) * 0.00002 // [Pa];
+
+ Degree_Celsius [oC] = FUNCTION // oC+273.15 // [INTERLIS.K];
+ Degree_Fahrenheit [oF] = FUNCTION // (oF+459.67)/1.8 // [INTERLIS.K];
+
+ CountedObjects EXTENDS INTERLIS.DIMENSIONLESS;
+
+ Hertz [Hz] EXTENDS Frequency = (CountedObjects/INTERLIS.s);
+ KiloHertz [KHz] = 1000 [Hz];
+ MegaHertz [MHz] = 1000 [KHz];
+
+ Percent = 0.01 [CountedObjects];
+ Permille = 0.001 [CountedObjects];
+
+ !! ISO 4217 Currency Abbreviation
+ USDollar [USD] EXTENDS INTERLIS.MONEY;
+ Euro [EUR] EXTENDS INTERLIS.MONEY;
+ SwissFrancs [CHF] EXTENDS INTERLIS.MONEY;
+
+END Units.
diff --git a/src/test/java/ch/geowerkstatt/lk2dxf/DxfWriterTest.java b/src/test/java/ch/geowerkstatt/lk2dxf/DxfWriterTest.java
index 2e776a7..6c3299f 100644
--- a/src/test/java/ch/geowerkstatt/lk2dxf/DxfWriterTest.java
+++ b/src/test/java/ch/geowerkstatt/lk2dxf/DxfWriterTest.java
@@ -152,7 +152,7 @@ public void writeTextAlignment() throws Exception {
int y = 0;
for (var vAlign : List.of("Top", "Cap", "Half", "Base", "Bottom")) {
for (var hAlign : List.of("Left", "Center", "Right")) {
- dxfWriter.writeText("Test", "arial", vAlign + "-" + hAlign, hAlign, vAlign, 90, IomObjectHelper.createCoord("0", Integer.toString(y)));
+ dxfWriter.writeText("Test", "arial", vAlign + "-" + hAlign, hAlign, vAlign, 90, 1.25, IomObjectHelper.createCoord("0", Integer.toString(y)));
dxfWriter.writeCircle("Anchor", 0, y, 0.5);
y += 4;
}
@@ -168,7 +168,7 @@ public void writeTextOrientation() throws Exception {
stringWriter.getBuffer().setLength(0);
for (int orientation = 0; orientation < 360; orientation += 45) {
- dxfWriter.writeText("Test", "arial", "Orientation: " + orientation + "°", "Left", "Base", orientation, IomObjectHelper.createCoord("0", "0"));
+ dxfWriter.writeText("Test", "arial", "Orientation: " + orientation + "°", "Left", "Base", orientation, 1.25, IomObjectHelper.createCoord("0", "0"));
}
assertEquals("0\nTEXT\n5\n1E\n100\nAcDbEntity\n8\nTest\n100\nAcDbText\n7\narial\n10\n0\n20\n0\n40\n1.25\n1\nOrientation: 0°\n50\n90\n100\nAcDbText\n0\nTEXT\n5\n1F\n100\nAcDbEntity\n8\nTest\n100\nAcDbText\n7\narial\n10\n0\n20\n0\n40\n1.25\n1\nOrientation: 45°\n50\n45\n100\nAcDbText\n0\nTEXT\n5\n20\n100\nAcDbEntity\n8\nTest\n100\nAcDbText\n7\narial\n10\n0\n20\n0\n40\n1.25\n1\nOrientation: 90°\n100\nAcDbText\n0\nTEXT\n5\n21\n100\nAcDbEntity\n8\nTest\n100\nAcDbText\n7\narial\n10\n0\n20\n0\n40\n1.25\n1\nOrientation: 135°\n50\n315\n100\nAcDbText\n0\nTEXT\n5\n22\n100\nAcDbEntity\n8\nTest\n100\nAcDbText\n7\narial\n10\n0\n20\n0\n40\n1.25\n1\nOrientation: 180°\n50\n270\n100\nAcDbText\n0\nTEXT\n5\n23\n100\nAcDbEntity\n8\nTest\n100\nAcDbText\n7\narial\n10\n0\n20\n0\n40\n1.25\n1\nOrientation: 225°\n50\n225\n100\nAcDbText\n0\nTEXT\n5\n24\n100\nAcDbEntity\n8\nTest\n100\nAcDbText\n7\narial\n10\n0\n20\n0\n40\n1.25\n1\nOrientation: 270°\n50\n180\n100\nAcDbText\n0\nTEXT\n5\n25\n100\nAcDbEntity\n8\nTest\n100\nAcDbText\n7\narial\n10\n0\n20\n0\n40\n1.25\n1\nOrientation: 315°\n50\n135\n100\nAcDbText\n", stringWriter.toString());
}
@@ -191,6 +191,6 @@ private IomObject[] createArcTestSegments(double pointRadius, double midPointRad
}
private Collection createTestLayerMappings() {
- return List.of(new LayerMapping("Test", "", "", "", 1, "", "", "", "", "TestSymbol", "", 0.25, 1.25, "arial", null));
+ return List.of(new LayerMapping("Test", List.of(), LayerMapping.OutputType.SURFACE, "", 1, "", "", "", "", "TestSymbol", "", 0.25, 1.25, "arial", null));
}
}
diff --git a/src/test/java/ch/geowerkstatt/lk2dxf/LKMapXtfReaderTest.java b/src/test/java/ch/geowerkstatt/lk2dxf/XtfStreamReaderTest.java
similarity index 70%
rename from src/test/java/ch/geowerkstatt/lk2dxf/LKMapXtfReaderTest.java
rename to src/test/java/ch/geowerkstatt/lk2dxf/XtfStreamReaderTest.java
index 7df1b93..8963bd3 100644
--- a/src/test/java/ch/geowerkstatt/lk2dxf/LKMapXtfReaderTest.java
+++ b/src/test/java/ch/geowerkstatt/lk2dxf/XtfStreamReaderTest.java
@@ -7,14 +7,15 @@
import java.util.stream.Stream;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
-public final class LKMapXtfReaderTest {
+public final class XtfStreamReaderTest {
private static final String TEST_DIR = "src/test/data/LKMapXtfReaderTest/";
@Test
public void readValidXtf() throws Exception {
- try (LKMapXtfReader reader = new LKMapXtfReader(new File(TEST_DIR + "Valid.xtf"))) {
+ try (XtfStreamReader reader = new XtfStreamReader(new File(TEST_DIR + "Valid.xtf"))) {
String[] objectIds = reader
.readObjects()
.map(IomObject::getobjectoid)
@@ -26,7 +27,7 @@ public void readValidXtf() throws Exception {
@Test
public void readValidXtfMultipleBaskets() throws Exception {
- try (LKMapXtfReader reader = new LKMapXtfReader(new File(TEST_DIR + "ValidMultipleBaskets.xtf"))) {
+ try (XtfStreamReader reader = new XtfStreamReader(new File(TEST_DIR + "ValidMultipleBaskets.xtf"))) {
String[] objectIds = reader
.readObjects()
.map(IomObject::getobjectoid)
@@ -38,15 +39,15 @@ public void readValidXtfMultipleBaskets() throws Exception {
@Test
public void readXtfForWrongModel() throws Exception {
- try (LKMapXtfReader reader = new LKMapXtfReader(new File(TEST_DIR + "WrongModel.xtf"))) {
+ try (XtfStreamReader reader = new XtfStreamReader(new File(TEST_DIR + "WrongModel.xtf"))) {
Stream objectStream = reader.readObjects();
- assertThrows(IllegalStateException.class, objectStream::toList, "Streaming invalid data should throw an exception");
+ assertEquals(1, objectStream.count(), "Reading unknown data should add the objects to the stream anyway");
}
}
@Test
public void multipleReadsNotAllowed() throws Exception {
- try (LKMapXtfReader reader = new LKMapXtfReader(new File(TEST_DIR + "Valid.xtf"))) {
+ try (XtfStreamReader reader = new XtfStreamReader(new File(TEST_DIR + "Valid.xtf"))) {
reader.readObjects();
assertThrows(IllegalStateException.class, reader::readObjects, "Multiple calls to readObjects should throw an exception");
}
diff --git a/src/test/java/ch/geowerkstatt/lk2dxf/mapping/MappingReaderTest.java b/src/test/java/ch/geowerkstatt/lk2dxf/mapping/MappingReaderTest.java
index e729035..5cb63c6 100644
--- a/src/test/java/ch/geowerkstatt/lk2dxf/mapping/MappingReaderTest.java
+++ b/src/test/java/ch/geowerkstatt/lk2dxf/mapping/MappingReaderTest.java
@@ -14,8 +14,8 @@ public void readMappings() throws IOException {
List mappings = MappingReader.readMappings();
assertTrue(mappings.stream().noneMatch(m -> m.layer().isBlank()), "Layer is required");
- assertTrue(mappings.stream().noneMatch(m -> m.objectClass().isBlank()), "ObjectType is required");
- assertTrue(mappings.stream().noneMatch(m -> m.geometryType().isBlank()), "GeometryType is required");
+ assertTrue(mappings.stream().noneMatch(m -> m.objectClass().isEmpty()), "ObjectType is required");
+ assertTrue(mappings.stream().noneMatch(m -> m.output().toString().isBlank()), "GeometryType is required");
assertTrue(mappings.stream().noneMatch(m -> m.geometry().isBlank()), "Geometry is required");
assertTrue(mappings.stream().noneMatch(m -> m.mapping().isEmpty()), "Mapping is required");
assertEquals("STILLGELEGTE-LEITUNGEN", mappings.getFirst().layer());
diff --git a/src/test/java/ch/geowerkstatt/lk2dxf/mapping/ObjectMapperTest.java b/src/test/java/ch/geowerkstatt/lk2dxf/mapping/ObjectMapperTest.java
index 40476e9..ed21d04 100644
--- a/src/test/java/ch/geowerkstatt/lk2dxf/mapping/ObjectMapperTest.java
+++ b/src/test/java/ch/geowerkstatt/lk2dxf/mapping/ObjectMapperTest.java
@@ -1,6 +1,6 @@
package ch.geowerkstatt.lk2dxf.mapping;
-import ch.geowerkstatt.lk2dxf.LKMapXtfReader;
+import ch.geowerkstatt.lk2dxf.XtfStreamReader;
import ch.interlis.iom.IomObject;
import org.junit.jupiter.api.Test;
@@ -15,7 +15,7 @@ public final class ObjectMapperTest {
@Test
public void mapObject() throws Exception {
- try (LKMapXtfReader xtfReader = new LKMapXtfReader(new File(TEST_FILE))) {
+ try (XtfStreamReader xtfReader = new XtfStreamReader(new File(TEST_FILE))) {
ObjectMapper mapper = new ObjectMapper();
List objects = xtfReader.readObjects().toList();