view backend/contrib/shpimporter/axis.py @ 5890:6ea004d51203

Datacage: Introduced <dc:group epxr="xpath" type="type"> ... </dc:group> and XPath function dc:group-key(). This splits the current result set into groups formed by expr. The type defaults to string. Afterwards all these groups are iterated by there natural order. The dc:group-key() gives access to the result of the grouping expression that forms a group. Say, you have a result set like this: name | description -----+------------ a | foo a | bar b | baz b | bla c | blub you can use: <dc:group expr="$name"> <group name="{dc:group-key()}"> <dc:for-each> <description value="{$description}"/> </dc:for-each> </group> </dc:group> to create: <group name="a"> <description name="foo"/> <description name="bar"/> </group> <group name="b"> <description name="baz"/> <description name="bla"/> </group> <group name="c"> <description name="blub"/> </group>
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 02 May 2013 20:52:18 +0200
parents 5aa05a7a34b7
children f1aeb6a60380
line wrap: on
line source
try:
    from osgeo import ogr
except ImportError:
    import ogr

from importer import Importer
import utils

NAME="Axis"
TABLE_NAME="river_axes"
PATH="Geodaesie/Flussachse+km"


class Axis(Importer):

    def getPath(self, base):
        return "%s/%s" % (base, PATH)


    def getTablename(self):
        return TABLE_NAME


    def getName(self):
        return NAME


    def isGeometryValid(self, geomType):
        return geomType in [ogr.wkbLineString,
                            ogr.wkbLineString25D,
                            ogr.wkbMultiLineString25D,
                            ogr.wkbMultiLineString]

    def isShapeRelevant(self, name, path):
        return "km.shp" not in path.lower()


    def createNewFeature(self, featureDef, feat, **args):
        newFeat = ogr.Feature(featureDef)
        geometry = feat.GetGeometryRef()
        geometry.SetCoordinateDimension(3)
        newFeat.SetGeometry(geometry)
        newFeat.SetField("name", args['name'])

        if self.IsFieldSet(feat, "river_id"):
            riverId = feat.GetField("river_id")
        else:
            riverId = self.river_id

        newFeat.SetField("river_id", riverId)
        if args.get("name", "").lower() == "achse":
            newFeat.SetField("kind_id", 1) # 1 is Current
        else:
            newFeat.SetField("kind_id", 2) # 2 Is Other

        return utils.convertToMultiLine(newFeat)

http://dive4elements.wald.intevation.org