-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathgeojson.py
33 lines (26 loc) · 1019 Bytes
/
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
import json
import shapely.geometry
from .util import get_geo_column, from_spatialite_geom
def row_to_feature(row, geo_column):
return {
"type": "Feature",
"geometry": shapely.geometry.mapping(from_spatialite_geom(row[geo_column])),
"properties": {key: row[key] for key in row.keys() if key != geo_column},
}
def geojson_render(datasette, args, data, view_name):
if view_name not in ("row", "table"):
return None
geo_column = get_geo_column(datasette, data["database"], data["table"])
if geo_column is None:
return None
if view_name == "row":
gj = row_to_feature(data["rows"][0], geo_column)
elif view_name == "table":
gj = {
"type": "FeatureCollection",
"features": [row_to_feature(row, geo_column) for row in data["rows"]],
}
for k, v in data.items():
if k != 'rows':
gj[k] = v
return {"content_type": "application/vnd.geo+json", "body": json.dumps(gj)}