【问题标题】:Flask with GeoAlchemy sample code [closed]带有 GeoAlchemy 示例代码的烧瓶 [关闭]
【发布时间】:2011-05-03 10:42:22
【问题描述】:

谁能提供任何使用 GeoAlchemy 的 Flask 示例代码?

【问题讨论】:

    标签: python flask


    【解决方案1】:

    使用 SQLAlchemy 0.8、Flask-SQLAlchemy 和 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))
    

    示例查询:

    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()
    

    将结果转换为 x 和 y 坐标的一种方法(转换为 GeoJSON 并提取坐标):

    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']
    

    【讨论】:

    • srid 是什么,一定是那个数字吗?
    • @AbhishtaGatya 这只是投影的 ID (WGS84),您可以使用任何您喜欢的投影。
    【解决方案2】:

    如果您不限于使用 Flask,您可能想尝试一下 MapFish,它基于 Pylons 并使用 GeoAlchemy。

    【讨论】:

      【解决方案3】:

      您可以将它与Flask-SQLAlchemy 一起使用,但您也可以将它与普通的 SQLAlchemy 一起使用。只需将sample models from GeoAlchemy 转换为 Flask-SQLAlchemy。像这样的:

      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))
      

      我没有测试过代码,但它应该是一个公平的转录。

      【讨论】:

      • 这段代码不起作用:它给你AttributeError: 'SQLAlchemy' object has no attribute 'GeometryColumn'
      【解决方案4】:
      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__)
      

      【讨论】:

        猜你喜欢
        • 2014-05-21
        • 2019-01-03
        • 2015-01-30
        • 2012-10-30
        • 2011-08-07
        • 1970-01-01
        • 2014-03-09
        • 1970-01-01
        • 2010-11-21
        相关资源
        最近更新 更多