-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathgeojson.py
126 lines (103 loc) · 2.8 KB
/
geojson.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/bin/python
import json
import logging
logger = logging.getLogger(__name__)
# logger.setLevel(logging.INFO)
# "type":"Feature",
# "type":"FeatureCollection",
# "type":"Geometry",
tmpl = """
{
"type":"FeatureCollection",
"features":[
{
"type":"Feature",
"geometry":{"type":"Point","coordinates":[102,0.5]},
"properties":{"prop0":"value0"}
},
{
"type":"Feature",
"geometry":{"type":"LineString","coordinates":[[102,0],[103,1],[104,0],[105,1]]},
"properties":{"prop0":"value0","prop1":0}
},
{
"type":"Feature",
"geometry":{"type":"Polygon","coordinates":[[[100,0],[101,0],[101,1],[100,1],[100,0]]]},
"properties":{"prop0":"value0","prop1":{"this":"that"}}
}
]
}
"""
tmpl = """
{
"type":"FeatureCollection",
"features":[
{
"type":"Feature",
"geometry":{"type":"LineString","coordinates":[[102,0],[103,1],[104,0],[105,1]]},
"properties":{"stroke":"red"}
}
]
}
"""
class LineString(object):
def __init__(self):
self.coordinates = []
def add_point(self, point):
# lat, lon = point
# logger.debug('add %s', point)
self.coordinates.append(point)
def data(self):
tmpl = {
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": []
},
"properties": {}
}
for p in self.coordinates:
if p:
tmpl['geometry']['coordinates'].append(p)
return tmpl
def dump(self):
return self.data
class GeoJsonFeatureCollection(object):
def __init__(self):
self.features = []
def add_feature(self, feature):
# lat, lon = point
# logger.debug('add %s', point)
self.features.append(feature)
def data(self):
tmpl = {
"type": "FeatureCollection",
"features": []
}
for f in self.features:
if f.coordinates:
tmpl['features'].append(f.data())
return tmpl
def dump(self):
return json.dumps(self.data(), sort_keys=True, indent=' ')
class GeoJson(object):
def __init__(self):
self.data = {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": []
},
"properties": {"stroke": "red"}
}
]
}
def add_point(self, point):
# lat, lon = point
# logger.debug('add %s', point)
self.data['features'][0]['geometry']['coordinates'].append(point)
def dump(self):
return json.dumps(self.data, sort_keys=True, indent=' ')