0
|
1 '''
|
|
2 Created on 11.09.2012
|
|
3
|
|
4 @author: dwinter
|
|
5 '''
|
|
6
|
|
7
|
|
8 from lxml import etree
|
|
9 import os
|
|
10 import codecs
|
|
11
|
|
12 class Event:
|
|
13 long=""
|
|
14 lat=""
|
|
15 oid=""
|
|
16 placename=""
|
|
17 date=""
|
|
18 species=""
|
|
19 description=""
|
|
20
|
|
21 def __str__(self):
|
|
22 ret=""
|
|
23 ret="%s %s %s"%(self.oid,self.lat,self.long)
|
|
24
|
|
25 return ret
|
|
26
|
|
27
|
|
28 def toKML(self):
|
|
29 ret="""
|
|
30 <Placemark>
|
3
|
31 <name>%s</name>
|
|
32 <address>%s</address>
|
0
|
33 <description><![CDATA[%s]]></description>
|
|
34 <TimeStamp><when>%s</when></TimeStamp>
|
|
35 <Point>
|
|
36 <coordinates>%s,%s</coordinates>
|
|
37 </Point>
|
|
38 </Placemark>
|
|
39 """%(self.oid,self.placename,self.description,self.date,self.long,self.lat)
|
|
40
|
|
41
|
|
42
|
|
43
|
|
44 return ret
|
|
45
|
|
46 class EventKMLTransformer:
|
|
47
|
|
48 def __init__(self,sqlFilename=None):
|
|
49 self.cnt=0
|
|
50 #falls ein Filename anfgegeben wird dann wird ein sql-file erzeugt
|
|
51 if sqlFilename is not None:
|
|
52 self.f=codecs.open(sqlFilename,"w","utf-8")
|
|
53 else:
|
|
54 self.f=None
|
|
55 #self.f = codecs.open("/tmp/out.sql","w","utf-8")
|
|
56
|
|
57 def createDescription(self,element):
|
|
58 xslt_root=etree.parse("../../XSLT/entryToXHTML.xsl")
|
|
59 transform = etree.XSLT(xslt_root)
|
|
60 res=transform(element)
|
|
61 return unicode(res)
|
|
62
|
|
63
|
|
64 def calcDate(self,date):
|
|
65
|
|
66 splitted=date.split("-")
|
|
67
|
|
68 if len(splitted)==3:
|
|
69 year="20"+splitted[2]
|
|
70 month=splitted[1]
|
|
71 date=splitted[0]
|
|
72
|
|
73 return "%s-%s-%s"%(year,month,date)
|
|
74
|
|
75 return "2000"
|
|
76
|
|
77
|
|
78
|
|
79 def writeToSQL(self,event,ident,cnt,f):
|
|
80 insert="""
|
|
81 INSERT INTO locations (data, "idTxt",id) VALUES ('%s', '%s',%s);"""
|
|
82
|
|
83 evString = etree.tostring(event).replace("'","")
|
|
84 f.write(insert%(evString,ident,cnt))
|
|
85
|
|
86
|
|
87
|
|
88 def readString(self,xmlString,locationXPath,cnt):
|
|
89
|
|
90 tree = etree.XML(xmlString)
|
|
91 return self.analyseEventXML(tree,locationXPath,cnt)
|
|
92
|
|
93
|
|
94 def readFile(self,filePath,locationXPath,cnt):
|
|
95 tree = etree.parse(filePath)
|
|
96 return self.analyseEventXML(tree,locationXPath,cnt)
|
|
97
|
|
98 def analyseEventXML(self,tree,locationXPath,cnt):
|
|
99 counter=0
|
|
100
|
|
101 ret=[]
|
|
102 for event in tree.xpath("//event"):
|
|
103
|
|
104 text=event.get("text")
|
|
105
|
|
106
|
|
107 #erzeuge zunaechste eine id aus dem textname und dem counter
|
|
108
|
|
109
|
|
110
|
|
111 #place_information=event.xpath(".//place_information")
|
|
112 place_information=event.xpath(locationXPath)
|
|
113
|
|
114 for place in place_information:
|
|
115 ev=Event()
|
|
116 ev.date=self.calcDate(event.get("date_filed"))
|
|
117 ev.description=self.createDescription(event)
|
|
118 ev.oid="%s.%s"%(text,counter)
|
|
119 counter+=1
|
|
120 print ev.oid
|
|
121 ev.placename=place.text
|
|
122
|
|
123 ev.lat=place.get("latitude")
|
|
124 ev.long=place.get("longitude")
|
|
125
|
|
126 ret.append(ev)
|
|
127
|
|
128 if self.f is not None:
|
|
129 self.writeToSQL(event,ev.oid,cnt,self.f)
|
|
130 cnt+=1
|
|
131 return ret,cnt
|
|
132
|
1
|
133 def readFiles(self,path,locationXPath,cnt=0):
|
0
|
134 ret=[]
|
1
|
135
|
0
|
136 for f in os.listdir(path):
|
|
137 ret2,cnt=self.readFile(path+f,locationXPath,cnt)
|
|
138 ret+=ret2
|
|
139
|
1
|
140 return ret,cnt
|
0
|
141
|
|
142
|
|
143 def toKML(self,events):
|
|
144 ret="""<kml>
|
|
145 """
|
|
146 ret+="<Document>"
|
|
147
|
|
148 for event in events:
|
|
149 ret+=event.toKML()
|
|
150
|
|
151 ret+="</Document>"
|
|
152 ret+="</kml>"
|
|
153
|
|
154 return ret
|
|
155
|
|
156 def close(self):
|
|
157 if self.f is not None:
|
|
158 self.f.close()
|
|
159
|
|
160
|
|
161 if __name__ == '__main__':
|
|
162
|
|
163 tf=EventKMLTransformer("/tmp/out.sql")
|
|
164
|
1
|
165 x,cnt = tf.readFiles("/Users/dwinter/Documents/Projekte/mmpa-permit-etienne/events/",".//research_location/place_information")
|
0
|
166 #x = readFiles("/Users/dwinter/Documents/Projekte/mmpa-permit-etienne/Results/events/")
|
|
167 evs= tf.toKML(x)
|
|
168
|
|
169 out = codecs.open("/tmp/outResearch.xml","w","utf-8")
|
|
170
|
|
171 out.write(evs)
|
|
172 out.close()
|
|
173
|
1
|
174 x,cnt = tf.readFiles("/Users/dwinter/Documents/Projekte/mmpa-permit-etienne/events/",".//applicant_locations/place_information",cnt)
|
0
|
175 #x = readFiles("/Users/dwinter/Documents/Projekte/mmpa-permit-etienne/Results/events/")
|
|
176 evs= tf.toKML(x)
|
|
177
|
|
178 out = codecs.open("/tmp/outApplicants.xml","w","utf-8")
|
|
179
|
|
180 out.write(evs)
|
|
181 out.close()
|
|
182
|
|
183 tf.close() |