Mercurial > hg > events2kml
view harvestDataFromEvents.py @ 6:a7c8d212f5f4 JS-viewer tip
exchanged e4D for new JS-viewer (GeoTemCo)
+ whitespace-changes (sorry!)
author | Sebastian Kruse <skruse@mpiwg-berlin.mpg.de> |
---|---|
date | Tue, 22 Jan 2013 15:12:30 +0100 |
parents | f198c86dd1f6 |
children |
line wrap: on
line source
''' Created on 11.09.2012 @author: dwinter ''' from lxml import etree import os import codecs class Event: long="" lat="" oid="" placename="" date="" species="" description="" def __str__(self): ret="" ret="%s %s %s"%(self.oid,self.lat,self.long) return ret def toKML(self): ret=""" <Placemark> <name>%s</name> <address>%s</address> <description><![CDATA[%s]]></description> <TimeStamp><when>%s</when></TimeStamp> <Point> <coordinates>%s,%s</coordinates> </Point> </Placemark> """%(self.oid,self.placename,self.description,self.date,self.long,self.lat) return ret class EventKMLTransformer: def __init__(self,sqlFilename=None): self.cnt=0 #falls ein Filename anfgegeben wird dann wird ein sql-file erzeugt if sqlFilename is not None: self.f=codecs.open(sqlFilename,"w","utf-8") else: self.f=None #self.f = codecs.open("/tmp/out.sql","w","utf-8") def createDescription(self,element): xslt_root=etree.parse("../../XSLT/entryToXHTML.xsl") transform = etree.XSLT(xslt_root) res=transform(element) return unicode(res) def calcDate(self,date): splitted=date.split("-") if len(splitted)==3: year="20"+splitted[2] month=splitted[1] date=splitted[0] return "%s-%s-%s"%(year,month,date) return "2000" def writeToSQL(self,event,ident,cnt,f): insert=""" INSERT INTO locations (data, "idTxt",id) VALUES ('%s', '%s',%s);""" evString = etree.tostring(event).replace("'","") f.write(insert%(evString,ident,cnt)) def readString(self,xmlString,locationXPath,cnt): tree = etree.XML(xmlString) return self.analyseEventXML(tree,locationXPath,cnt) def readFile(self,filePath,locationXPath,cnt): tree = etree.parse(filePath) return self.analyseEventXML(tree,locationXPath,cnt) def analyseEventXML(self,tree,locationXPath,cnt): counter=0 ret=[] for event in tree.xpath("//event"): text=event.get("text") #erzeuge zunaechste eine id aus dem textname und dem counter #place_information=event.xpath(".//place_information") place_information=event.xpath(locationXPath) for place in place_information: ev=Event() ev.date=self.calcDate(event.get("date_filed")) ev.description=self.createDescription(event) ev.oid="%s.%s"%(text,counter) counter+=1 print ev.oid ev.placename=place.text ev.lat=place.get("latitude") ev.long=place.get("longitude") ret.append(ev) if self.f is not None: self.writeToSQL(event,ev.oid,cnt,self.f) cnt+=1 return ret,cnt def readFiles(self,path,locationXPath,cnt=0): ret=[] for f in os.listdir(path): ret2,cnt=self.readFile(path+f,locationXPath,cnt) ret+=ret2 return ret,cnt def toKML(self,events): ret="""<kml> """ ret+="<Document>" for event in events: ret+=event.toKML() ret+="</Document>" ret+="</kml>" return ret def close(self): if self.f is not None: self.f.close() if __name__ == '__main__': tf=EventKMLTransformer("/tmp/out.sql") x,cnt = tf.readFiles("/Users/dwinter/Documents/Projekte/mmpa-permit-etienne/events/",".//research_location/place_information") #x = readFiles("/Users/dwinter/Documents/Projekte/mmpa-permit-etienne/Results/events/") evs= tf.toKML(x) out = codecs.open("/tmp/outResearch.xml","w","utf-8") out.write(evs) out.close() x,cnt = tf.readFiles("/Users/dwinter/Documents/Projekte/mmpa-permit-etienne/events/",".//applicant_locations/place_information",cnt) #x = readFiles("/Users/dwinter/Documents/Projekte/mmpa-permit-etienne/Results/events/") evs= tf.toKML(x) out = codecs.open("/tmp/outApplicants.xml","w","utf-8") out.write(evs) out.close() tf.close()