Matraz con código de muestra de GeoAlchemy

¿Alguien puede proporcionar algún código de muestra para Flask con GeoAlchemy?

Usando SQLAlchemy 0.8, Flask-SQLAlchemy y Geoalchemy 2:

from app import db from geoalchemy2.types import Geometry class 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)) 

Consulta de muestra:

 from geoalchemy2.elements import WKTElement from app import models def 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() 

Una forma de convertir el resultado en coordenadas x e y (convertir a GeoJSON y extraer las coordenadas):

 import geoalchemy2.functions as func import json from app import db def 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'] 

Si no está limitado a usar Flask, es posible que desee probar MapFish , que se basa en Pilones y usa GeoAlchemy.

Puedes usarlo con Flask-SQLAlchemy , pero también puedes usarlo con SQLAlchemy. Simplemente traduzca los modelos de muestra de GeoAlchemy a Flask-SQLAlchemy. Algo como esto:

 class Spot(db.Model): __tablename__ = 'spots' id = db.Column(Integer, primary_key=True) name = db.Column(Unicode, nullable=False) height = db.Column(Integer) created = db.Column(DateTime, default=datetime.now()) geom = db.GeometryColumn(Point(2)) 

No he probado el código, pero debería ser una transcripción justa.

 from myapp import db from geoalchemy import GeometryColumn, Point class FixXX(db.Model): __tablename__ = 'fixXX' fix_pk = db.Column(db.Integer, primary_key=True) fix = db.Column(db.String) geometry = GeometryColumn(Point(2, srid=4326)) GeometryDDL(FixXX.__table__)