from pydal import geoPoint, geoLine, geoPolygon
# table with two geometry columns, one as WGS84, one as World Equidistant Cylindrical
trans_test = db.define_table('transform_test',
Field('point', 'geometry()'),
Field('point_wec', 'geometry(public, 4087, 2)'))
trans_test.bulk_insert([{'point': geoPoint(0,0)}, {'point': geoPoint(3,0)}])
db(db.transform_test.id).select(db.transform_test.point).as_list()
#[{'point': 'POINT(0 0)'}, {'point': 'POINT(3 0)'}]
db(db.transform_test).select(db.transform_test.point.st_astext()).as_list()
#[{'_extra': {'ST_AsText("transform_test"."point")': 'POINT(0 0)'}},
# {'_extra': {'ST_AsText("transform_test"."point")': 'POINT(3 0)'}}]
db(db.transform_test).select(db.transform_test.point.st_simplify(0)).as_list()
#[{'_extra': {'ST_Simplify("transform_test"."point",0.0)': '0101000020E610000000000000000000000000000000000000'}},
# {'_extra': {'ST_Simplify("transform_test"."point",0.0)': '0101000020E610000000000000000008400000000000000000'}}]
db(db.transform_test).select(db.transform_test.point.st_simplify(0).st_astext()).as_list()
#[{'_extra': {'ST_AsText(ST_Simplify("transform_test"."point",0.0))': 'POINT(0 0)'}},
# {'_extra': {'ST_AsText(ST_Simplify("transform_test"."point",0.0))': 'POINT(3 0)'}}]
simplified = db(db.transform_test.id == 2).select(db.transform_test.point.st_simplify(0).st_astext().with_alias('simp')).first()
rec = db.transform_test[2]
rec.update_record(point = simplified['simp'])
# <Row {'point_wec': None, 'id': 2L, 'point': 'POINT(3 0)'}>
db(db.transform_test.id == 2).update(point = db.transform_test.point.st_simplify(0))
db(db.transform_test.id).select(db.transform_test.point.st_transform(4087)).as_list()
#[{'_extra': {'ST_Transform("transform_test"."point",4087)': '0101000020F70F000000000000000000000000000000000000'}},
# {'_extra': {'ST_Transform("transform_test"."point",4087)': '0101000020F70F00002589B7E3196214410000000000000000'}}]
db(db.transform_test.id).select(db.transform_test.point.st_transform(4087).st_astext()).as_list()
#[{'_extra': {'ST_AsText(ST_Transform("transform_test"."point",4087))': 'POINT(0 0)'}},
# {'_extra': {'ST_AsText(ST_Transform("transform_test"."point",4087))': 'POINT(333958.472379821 0)'}}]
import math
(6378137 * 2 * math.pi) / 120
333958.4723798207
transformed = db(db.transform_test.id == 2).select(db.transform_test.point.st_transform(4087).st_astext().with_alias('wec')).first()
rec = db.transform_test[2]
rec.update_record(point_wec = transformed['wec'])
#<Row {'point_wec': 'POINT(333958.472379821 0)', 'id': 2L, 'point': 'POINT(3 0)'}>
db(db.transform_test.id == 2).update(point_wec = db.transform_test.point.st_transform(4087))
from pydal import geoPoint, geoLine,
geoPolygon
trans_test = db.define_table('transform_test',
Field('point', 'geometry()'),
Field('point_wec', 'geometry(public, 4087, 2)'))
trans_test.bulk_insert([{'point': geoPoint(0,0)}, {'point': geoPoint(3,0)}])
# [1L, 2L]
db(db.transform_test).select().as_list()
# [{'id': 1L, 'point': 'POINT(0 0)', 'point_wec': None},
# {'id': 2L, 'point': 'POINT(3 0)', 'point_wec': None}]
copy_wkb = db(db.transform_test.id == 1).select(db.transform_test.point.st_aswkb().with_alias('wkb')).first()
rec = db.transform_test[2]
rec.update_record(point=copy_wkb['wkb'])
# <Row {'point_wec': None, 'id': 2L, 'point': '0101000020E610000000000000000000000000000000000000'}>
db(db.transform_test).select().as_list()
# [{'id': 1L, 'point': 'POINT(0 0)', 'point_wec': None},
# {'id': 2L, 'point': 'POINT(0 0)', 'point_wec': None}]
In [10]: rec.update_record(point_wec=copy_wkb['wkb'])
---------------------------------------------------------------------------
ProgrammingError Traceback (most recent call last)
# <snip>
ProgrammingError: ('ERROR', '22023', 'Geometry SRID (4326) does not match column SRID (4087)')