-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkmlComperator.py
64 lines (52 loc) · 1.97 KB
/
kmlComperator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# -*- coding: utf-8 -*-
"""
Created on Sat Nov 22 16:48:55 2014
@author: adreyer
"""
import Polygon
from isySUR import kmlData
import argparse
class KMLComperator():
def __init__(self):
pass
def compare(self, kml1, kml2):
if isinstance(kml1,kmlData.KMLObject) and isinstance(kml2,kmlData.KMLObject):
poly1=self._buildPolygon(kml1)
poly2=self._buildPolygon(kml2)
numberOfPlacemarks1=len(kml1.placemarks)
numberOfPlacemarks2=len(kml2.placemarks)
overlap=poly1&poly2
percentage1=overlap.area()/poly1.area()
percentage2=overlap.area()/poly2.area()
percentage=(percentage1+percentage2)/2
if numberOfPlacemarks1==numberOfPlacemarks2:
result=compareResult(numberOfPlacemarks1, percentage)
else:
result=compareResult("different", percentage)
return result
else:
raise TypeError("compare can only compare two kmlObjects")
def _buildPolygon(self, kml):
poly=Polygon.Polygon()
for placemark in kml.placemarks:
coord=[]
for node in placemark.polygon:
pos = node.split(",")
coord.append((float(pos[0]),float(pos[1])))
tmppoly=Polygon.Polygon(coord)
poly=poly|tmppoly
return poly
class compareResult():
def __init__(self, numberOfPlacemarks, percentaceOfOverlap):
self.numberOfPlacemarks=numberOfPlacemarks
self.percentaceOfOverlap=percentaceOfOverlap
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='compares the Placemarks of two given .kml-files')
parser.add_argument('file', nargs=2, type=argparse.FileType('r'), help="valid .kml file")
args = parser.parse_args()
Comp = KMLComperator()
testKML1=kmlData.KMLObject.parseKML(args.file[0])
testKML2=kmlData.KMLObject.parseKML(args.file[1])
res = Comp.compare(testKML1,testKML2)
print "Number of Placemarks in the files: " + str(res.numberOfPlacemarks)
print "Percentage of Overlap: " + str(res.percentaceOfOverlap*100) + "%"