class BagPreprocessor(): def __init__(self): # All arguments required to be able to run configure configreader parser = ArgParser(description='bag-extract, commandline tool voor het extraheren en inlezen van BAG bestanden', epilog="Configureer de database in extract.conf of geef eigen versie van extract.conf via -f of geef parameters via commando regel expliciet op") parser.add_argument('-f', '--config', metavar='<bestand>', help='gebruik dit configuratiebestand i.p.v. extract.conf') parser.add_argument('-a', '--config2', metavar='<bestand>', help='gebruik dit configuratiebestand i.p.v. extract.conf') parser.add_argument('-c', '--dbinit', action='store_true', help='verwijdert (DROP TABLE) alle tabellen en maakt (CREATE TABLE) nieuwe tabellen aan') parser.add_argument('-d', '--database', metavar='<naam>', help='geef naam van de database') parser.add_argument('-s', '--schema', metavar='<naam>', help='geef naam van het database schema') parser.add_argument('-q', '--query', metavar='<bestand>', help='voer database bewerkingen uit met opgegeven SQL bestand') parser.add_argument('-e', '--extract', metavar='<naam>', help='importeert of muteert de database met gegeven BAG-bestand of -directory') parser.add_argument('-H', '--host', metavar='<hostnaam of -adres>', help='verbind met de database op deze host') parser.add_argument('-U', '--username', metavar='<naam>', help='verbind met database met deze gebruikersnaam') parser.add_argument('-p', '--port', metavar='<poort>', help='verbind met database naar deze poort') parser.add_argument('-W', '--password', metavar='<paswoord>', help='gebruikt dit wachtwoord voor database gebruiker') parser.add_argument('-w', '--no-password', action='store_true', help='gebruik geen wachtwoord voor de database verbinding') parser.add_argument('-v', '--verbose', action='store_true', help='toon uitgebreide informatie tijdens het verwerken') parser.add_argument('-D', '--dbinitcode', action='store_true', help='createert een lijst met statements om het DB script aan te passen') # Initialiseer self.args = parser.parse_args() # Initialize singleton Log object so we can use one global instance Log(self.args) self.database = None def processData(self): self.connectDatabase(True); vbos = self.getVBOs() vboHeightDict = {} vbosIds = [] for vbo in vbos: vbosIds.append(vbo[0]) vboHeightDict[vbo[0]] = vbo[1] buildingVBOs = self.getVBOPandenByIdentificationList(vbosIds) buildingIds = [] totalAreaDict = {} for vboBuilding in buildingVBOs: if totalAreaDict.has_key(vboBuilding[1]): totalAreaDict[vboBuilding[1]] += vboHeightDict[vboBuilding[0]] else: totalAreaDict[vboBuilding[1]] = vboHeightDict[vboBuilding[0]] buildingIds.append(vboBuilding[1]) buildings = self.getPandenByIdentificationList(buildingIds); buildingObjectList = [] for building in buildings: gmlBase64String = building[1].encode('base64') buildingObjectList.append(BuildingInfo(building[0], gmlBase64String, building[2], totalAreaDict[building[0]], building[3])) # Write mode creates a new file or overwrites the existing content of the file. # Write mode will _always_ destroy the existing contents of a file. try: # This will create a new file or **overwrite an existing file**. f = open("buildings.xml", "w") try: xml = "<?xml version='1.0' encoding='UTF-8'?>\n"; xml += "<buildings>\n" for building in buildingObjectList: xml += building.toXML() xml += "</buildings>" f.write(xml) # Write a string to a file finally: f.close() except IOError: pass def connectDatabase(self, bag2=False): BAGConfig(self.args, bag2) self.database = Database() self.database.verbind() def getVBOs(self): sql = "Select identificatie, oppervlakteverblijfsobject " \ "FROM verblijfsObject" return self.database.selectQuery(sql) def getVBOPandenByIdentificationList(self, idsVBO): sql = "Select identificatie, gerelateerdpand " \ "FROM verblijfsobjectpandactueel " \ "WHERE identificatie IN %s" return self.database.selectQuery(sql, [tuple(idsVBO)]) def getPandenByIdentificationList(self, pandIds): sql = "Select identificatie, st_asgml(geovlak), st_area(geovlak), st_npoints(geovlak) " \ "FROM pand " \ "WHERE identificatie IN %s" return self.database.selectQuery(sql, [tuple(pandIds)])
class BagFilter(): def __init__(self): # All arguments required to be able to run configure configreader parser = ArgParser(description='bag-extract, commandline tool voor het extraheren en inlezen van BAG bestanden', epilog="Configureer de database in extract.conf of geef eigen versie van extract.conf via -f of geef parameters via commando regel expliciet op") parser.add_argument('-f', '--config', metavar='<bestand>', help='gebruik dit configuratiebestand i.p.v. extract.conf') parser.add_argument('-a', '--config2', metavar='<bestand>', help='gebruik dit configuratiebestand i.p.v. extract.conf') parser.add_argument('-c', '--dbinit', action='store_true', help='verwijdert (DROP TABLE) alle tabellen en maakt (CREATE TABLE) nieuwe tabellen aan') parser.add_argument('-d', '--database', metavar='<naam>', help='geef naam van de database') parser.add_argument('-s', '--schema', metavar='<naam>', help='geef naam van het database schema') parser.add_argument('-q', '--query', metavar='<bestand>', help='voer database bewerkingen uit met opgegeven SQL bestand') parser.add_argument('-e', '--extract', metavar='<naam>', help='importeert of muteert de database met gegeven BAG-bestand of -directory') parser.add_argument('-H', '--host', metavar='<hostnaam of -adres>', help='verbind met de database op deze host') parser.add_argument('-U', '--username', metavar='<naam>', help='verbind met database met deze gebruikersnaam') parser.add_argument('-p', '--port', metavar='<poort>', help='verbind met database naar deze poort') parser.add_argument('-W', '--password', metavar='<paswoord>', help='gebruikt dit wachtwoord voor database gebruiker') parser.add_argument('-w', '--no-password', action='store_true', help='gebruik geen wachtwoord voor de database verbinding') parser.add_argument('-v', '--verbose', action='store_true', help='toon uitgebreide informatie tijdens het verwerken') parser.add_argument('-D', '--dbinitcode', action='store_true', help='createert een lijst met statements om het DB script aan te passen') # Initialiseer self.args = parser.parse_args() # Initialize singleton Log object so we can use one global instance Log(self.args) self.database = None def filterBagData(self): self.connectDatabase() # Get list of addresses of VBOs in Eindhoven adressen = self.getEindhovenAdressen(True) print "Retrieved Adressen" # List of all VBO ids idsVBO = [row[0] for row in adressen] # Get vbo's and panden eindhoven vbos = self.getVBOByIdentificationList(idsVBO) vboPanden = self.getVBOPandenByIdentificationList(idsVBO) # Clear idsVBO for memory space idsVBO = [] print "Retrieved VBOs" panden = [row[6] for row in vboPanden] panden = self.getPandenByIdentificationList(panden) print "Retrieved Panden" self.database.close() self.connectDatabase(True) #database.insertMultiple("adres", adressen) self.database.insertMultiple("verblijfsobject", vbos) self.database.insertMultiple("verblijfsobjectpand", vboPanden) self.database.insertMultiple("pand", panden) self.database.close() def connectDatabase(self, bag2=False): BAGConfig(self.args, bag2) self.database = Database() self.database.verbind() def getEindhovenAdressen(self, vboIdsOnly=False): # Get list adressen of VBOs in Eindhoven if vboIdsOnly: sql = "SELECT adresseerbaarobject " \ "FROM adres " \ "WHERE woonplaatsnaam LIKE 'Eindhoven'" else: sql = "SELECT * " \ "FROM adres " \ "WHERE woonplaatsnaam LIKE 'Eindhoven'" return self.database.selectQuery(sql) def getVBOByIdentificationList(self, idsVBO): sql = "Select * " \ "FROM verblijfsobjectactuuelalles " \ "WHERE identificatie IN %s" return self.database.selectQuery(sql, [tuple(idsVBO)]) def getVBOPandenByIdentificationList(self, idsVBO): sql = "Select * " \ "FROM verblijfsobjectpandactueel " \ "WHERE identificatie IN %s" return self.database.selectQuery(sql, [tuple(idsVBO)]) def getPandenByIdentificationList(self, pandIds): sql = "Select * " \ "FROM pandactueelalles " \ "WHERE identificatie IN %s" return self.database.selectQuery(sql, [tuple(pandIds)])