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()