view flys-backend/contrib/shpimporter/shpimporter.py @ 4835:8e72777c961c

Introduced a fake ConstantWQKms class to have type information to only generate w facets for curves which really carry w data.
author Sascha L. Teichmann <teichmann@intevation.de>
date Wed, 23 Jan 2013 05:53:44 +0100
parents 8654e4480fc6
children 890eaa0a5162
line wrap: on
line source
import ogr

import utils, optparse

from uesg  import UESG
from axis  import Axis
from km    import KM
from lines import Line
from fixpoints import Fixpoint
from buildings import Building
from crosssectiontracks import CrosssectionTrack
from floodplains import Floodplain
from boundaries import HydrBoundary, HydrBoundaryPoly
from hws import HWS
from gauges import GaugeLocation
from catchments import Catchment


VERBOSE_DEBUG=2
VERBOSE_INFO=1


def DEBUG(msg):
    config = getConfig()
    if config.verbose >= VERBOSE_DEBUG:
        print "DEBUG: %s" % msg

def INFO(msg):
    config = getConfig()
    if config.verbose >= VERBOSE_INFO:
        print "INFO: %s" % msg

def ERROR(msg):
    config = getConfig()
    print "ERROR: %s" % msg


def getImporters(config):
    return [
        Axis(config),
        KM(config),
        CrosssectionTrack(config),
        Line(config),
        Fixpoint(config),
        Building(config),
        Floodplain(config),
        HydrBoundary(config),
        HydrBoundaryPoly(config),
        HWS(config),
        GaugeLocation(config),
        Catchment(config),
        UESG(config)
        ]


def getConfig():
    parser = optparse.OptionParser()
    parser.add_option("--directory", type="string")
    parser.add_option("--target_srs", type="int")
    parser.add_option("--host", type="string")
    parser.add_option("--user", type="string")
    parser.add_option("--password", type="string")
    parser.add_option("--river_id", type="int")
    parser.add_option("--verbose", type="int", default=1)
    parser.add_option("--dry_run", type="int", default=0)
    parser.add_option("--skip_axis", type="int")
    parser.add_option("--skip_hydr_boundaries", type="int")
    parser.add_option("--skip_buildings", type="int")
    parser.add_option("--skip_crosssections", type="int")
    parser.add_option("--skip_lines", type="int")
    parser.add_option("--skip_fixpoints", type="int")
    parser.add_option("--skip_floodplains", type="int")
    parser.add_option("--skip_hws", type="int")
    parser.add_option("--skip_gauge_locations", type="int")
    parser.add_option("--skip_catchments", type="int")
    parser.add_option("--skip_kms", type="int")
    parser.add_option("--skip_uesgs", type="int")
    (config, args) = parser.parse_args()

    if config.directory == None:
        ERROR("No river directory specified!")
        raise Exception("Invalid config")
    elif config.host == None:
        ERROR("No database host specified!")
        raise Exception("Invalid config")
    elif config.user == None:
        ERROR("No databaser user specified!")
        raise Exception("Invalid config")
    elif config.password == None:
        ERROR("No password specified!")
        raise Exception("Invalid config")
    elif config.river_id == None:
        ERROR("No river id specified!")
        raise Exception("Invalid config")

    return config


def skip_importer(config, importer):
    if config.skip_axis == 1 and isinstance(importer, Axis):
        return True
    elif config.skip_hydr_boundaries == 1 and isinstance(importer, HydrBoundary):
        return True
    elif config.skip_hydr_boundaries == 1 and isinstance(importer, HydrBoundaryPoly):
        return True
    elif config.skip_buildings == 1 and isinstance(importer, Building):
        return True
    elif config.skip_crosssections == 1 and isinstance(importer, CrosssectionTrack):
        return True
    elif config.skip_lines == 1 and isinstance(importer, Line):
        return True
    elif config.skip_fixpoints == 1 and isinstance(importer, Fixpoint):
        return True
    elif config.skip_floodplains == 1 and isinstance(importer, Floodplain):
        return True
    elif config.skip_hws == 1 and isinstance(importer, HWS):
        return True
    elif config.skip_gauge_locations == 1 and isinstance(importer, GaugeLocation):
        return True
    elif config.skip_catchments == 1 and isinstance(importer, Catchment):
        return True
    elif config.skip_kms == 1 and isinstance(importer, KM):
        return True
    elif config.skip_uesgs == 1 and isinstance(importer, UESG):
        return True

    return False


def parse():
    config=None
    try:
        config = getConfig()
    except:
        return

    if config == None:
        ERROR("Unable to read config from command line!")
        return

    if config.dry_run > 0:
        INFO("You enable 'dry_run'. No database transaction will take place!")

    importers = getImporters(config)
    types = {}

    for importer in importers:
        if skip_importer(config, importer):
            INFO("Skip import of '%s'" % importer.getName())
            continue

        INFO("Start import of '%s'" % importer.getName())

        shapes = utils.findShapefiles(importer.getPath(config.directory))
        DEBUG("Found %i Shapefiles" % len(shapes))

        for shpTuple in shapes:
            geomType = importer.walkOverShapes(shpTuple)
            try:
                if geomType is not None:
                    num = types[geomType]
                    types[geomType] = num+1
            except:
                types[geomType] = 1

    for key in types:
        DEBUG("%i x geometry type %s" % (types[key], key))


if __name__ == '__main__':
    parse()

http://dive4elements.wald.intevation.org