使用SQLAlchemy 0.8,Flask-SQLAlchemy和Geoalchemy 2:
from app import dbfrom geoalchemy2.types import Geometryclass Point(db.Model): """represents an x/y coordinate location.""" __tablename__ = 'point' id = db.Column(db.Integer, primary_key=True) geom = db.Column(Geometry(geometry_type='POINT', srid=4326))
查询样例:
from geoalchemy2.elements import WKTElementfrom app import modelsdef get_nearest(lat, lon): # find the nearest point to the input coordinates # convert the input coordinates to a WKT point and query for nearest point pt = WKTElement('POINT({0} {1})'.format(lon, lat), srid=4326) return models.Point.query.order_by(models.Point.geom.distance_box(pt)).first()将结果转换为x和y坐标的一种方法(转换为GeoJSON并提取坐标):
import geoalchemy2.functions as funcimport jsonfrom app import dbdef point_geom_to_xy(pt): # extract x and y coordinates from a point geometry geom_json = json.loads(db.session.scalar(func.ST_AsGeoJSON(pt.geom))) return geom_json['coordinates']



