Commit 933ea265 authored by Alex Kerney's avatar Alex Kerney

Changes to use Geoalchemy2/PostGIS functions. Doesn't currently work as it...

Changes to use Geoalchemy2/PostGIS functions. Doesn't currently work as it requires access to the db.session.
parent f5748f25
......@@ -2,6 +2,9 @@ import json
from wtforms.fields import TextAreaField
from shapely.geometry import shape, mapping
from .widgets import LeafletWidget
from sqlalchemy import func
import geoalchemy2
#from .. import db how do you get db.session in a Field?
class JSONField(TextAreaField):
......@@ -9,7 +12,7 @@ class JSONField(TextAreaField):
if self.raw_data:
return self.raw_data[0]
if self.data:
return self.to_json(self.data)
return self.data
return ""
def process_formdata(self, valuelist):
......@@ -34,18 +37,21 @@ class JSONField(TextAreaField):
class GeoJSONField(JSONField):
widget = LeafletWidget()
def __init__(self, label=None, validators=None, geometry_type="GEOMETRY", **kwargs):
def __init__(self, label=None, validators=None, geometry_type="GEOMETRY", srid='-1', **kwargs):
super(GeoJSONField, self).__init__(label, validators, **kwargs)
self.web_srid = 4326
self.srid = srid
self.geometry_type = geometry_type.upper()
def _value(self):
if self.raw_data:
return self.raw_data[0]
if self.data:
self.data = mapping(self.data)
if type(self.data) is geoalchemy2.elements.WKBElement:
self.data = db.session.scalar(func.ST_AsGeoJson(func.ST_Transform(self.data, self.web_srid)))
return super(GeoJSONField, self)._value()
def process_formdata(self, valuelist):
super(GeoJSONField, self).process_formdata(valuelist)
if self.data:
self.data = shape(self.data)
web_shape = db.session.scalar(func.ST_AsText(func.ST_Transform(func.ST_GeomFromText(shape(self.data).wkt, self.web_srid), self.srid)))
if type(self.data):
self.data = 'SRID='+str(self.srid)+';'+web_shape
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment