- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 sqlalchemy 和 alembic 进行迁移(和 flask-sqlalchemy)。我有一个使用 EARTH 数据类型的 postgres 表。
CREATE TABLE things
(
id INTEGER PRIMARY KEY NOT NULL,
name TEXT,
earth_location EARTH
)
这是我的 sqlalchemy 映射:
class Thing(db.Model):
__tablename__ = 'things'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.UnicodeText, nullable=False)
earth_location = db.Column(???)
如何映射地球柱?
alembic 迁移是否能够处理它?</p>
谢谢!
最佳答案
使用来自 earthdistance extension 的 earth
类型的列使用 SQLAlchemy 是可能的:
column_property
, 如果您只想将纬度和经度值映射到属性UserDefinedType
, 如果您希望拥有一个支持例如表创建的完整类型column_property
实现起来有些简单,但仅限于只读,并且如果声明性列不可用,则需要一些非正统的语法:
from sqlalchemy import Float, column, func
from sqlalchemy.orm import column_property
class Thing(db.Model):
__tablename__ = 'things'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.UnicodeText, nullable=False)
_earth_location = column('earth_location', _selectable=Thing.__table__)
Thing.earth_location_latitude = column_property(func.latitude(
_earth_location, type_=Float))
Thing.earth_location_longitude = column_property(func.longitude(
_earth_location, type_=Float))
为了产生column
对于正确的 _selectable,必须在类 Thing
创建后将属性添加到类中,因为以声明方式创建的 Table
在期间不可用在类主体中创建。这允许像
session.query(Thing.earth_location_longitude).scalar()
按预期工作。如果没有 _selectable,发出的 SQL 将是:
SELECT longitude(loc)
不幸的是,这使得映射表完全忘记了底层列things.earth_location
,因此 Alembic 也不会更明智。 Alembic 中的表创建必须通过执行原始 SQL 字符串来完成。
UserDefinedType
的优点是能够支持表创建。原始 earth
值在 python 上下文中非常无用,因此一些来回使用 ll_to_earth
、latitude
和 longitude
函数是必须的。将 UserDefinedType
与 column_property
结合使用可能会提供“两全其美”的解决方案:
from sqlalchemy.types import UserDefinedType
from sqlalchemy.orm import deferred
class EARTH(UserDefinedType):
def get_col_spec(self, **kw):
return 'EARTH'
class Thing(db.Model)
__tablename__ = 'things'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.UnicodeText, nullable=False)
# defer loading, as the raw value is pretty useless in python
earth_location = deferred(db.Column(EARTH))
# A deferred column, aka column_property cannot be adapted, extract the
# real column. A bit of an ugly hack.
latitude = column_property(func.latitude(*earth_location.columns,
type_=Float))
longitude = column_property(func.longitude(*earth_location.columns,
type_=Float))
检查表创建:
In [21]: t = Table('test', meta, Column('loc', EARTH))
In [22]: print(CreateTable(t))
CREATE TABLE test (
loc earth
)
添加一个新的事物
:
>>> latitude = 65.012089
>>> longitude = 25.465077
>>> t = Thing(name='some name',
earth_location=func.ll_to_earth(latitude, longitude))
>>> session.add(t)
>>> session.commit()
请注意,对 ll_to_earth
的绑定(bind)函数调用作为值提供。
一个更复杂的自定义类型支持访问 lat 和 lon 作为属性等是完全可能的,但可能超出了这个 q/a 的范围。
关于python - 如何在 sqlalchemy 中映射 postgres EARTH 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37245931/
似乎在应用程序中使用 Google 地球的首选方式是将其嵌入网页,然后通过 javascript API 访问它。 但是,不是将其嵌入到网页中,而是可以让一些代码将新功能嵌入到 Google 地球桌面
我刚刚开始使用 .Net 的 GEPlugin 控件使用 Google Earth 进行编码,但仍有很多东西要学习。 让我感到困惑的是当我尝试拖动多边形时。 每当 mousemove 事件触发时调用下
我正在尝试为 google earth api 提供一个我从中返回的起点谷歌地图 Api v3(我有经纬度)。我想做的是给一个位置Google Earth,它可以自动移动到街景级别。 到目前为止,我所
我正在尝试为 google earth api 提供一个我从中返回的起点谷歌地图 Api v3(我有经纬度)。我想做的是给一个位置Google Earth,它可以自动移动到街景级别。 到目前为止,我所
在Google Earth Engine中,是否可以获得图像的像素值?下面的代码显示了图像的细节,我们可以看到图像的波段 2,3 和 4 有 10980*10980 像素。我们如何获得波段 3 在 (
在Google Earth Engine中,是否可以获得图像的像素值?下面的代码显示了图像的细节,我们可以看到图像的波段 2,3 和 4 有 10980*10980 像素。我们如何获得波段 3 在 (
当我将光栅文件导出到我的驱动器时,它被分成 4 个部分。为什么会这样? 它可能与我不使用的 dimensions 属性有关。但是没有给出默认值。 我使用了这个命令: Export.image.toDr
我想在 table 面应用程序中使用Google Earth。 我的问题是,您认为Google提供的这两个API中的哪一个具有更多功能和/或最佳支持? 非常感谢你 最佳答案 Google Earth
我在使用 Google Earth Engine 时遇到问题。我正在处理一些矢量文件。我得到以下代码: 最佳答案 几何图形有太多顶点。您可以尝试使用以下方法来简化它: // Get a feature
我想重新分类全局森林数据值,例如 0 - 20% --> 1 21 - 49 % --> 0.5 50 - 100% --> 0 但是,我无法找到如何在 GEE 中为范围执行此操作。可以在此处找到对个
我想重新分类全局森林数据值,例如 0 - 20% --> 1 21 - 49 % --> 0.5 50 - 100% --> 0 但是,我无法找到如何在 GEE 中为范围执行此操作。可以在此处找到对个
我需要为我的论文下载一堆 Landsat 图像。我的问题看起来很简单,但我对 JavaScript 一无所知,文档也没有提供足够的帮助。我已将集合过滤到我的区域和时间段,我想将所有图像分别导出到云端硬
我应该使用一个利用 [google-earth-plugin] 的网页浏览器 问题是我使用的是 Linux (ubuntu),并且没有适合我们的 [google-earth-plugin]。 我想知道
我想在企业网络上使用 Earthly,该网络使用 SSL 探测来颁发自签名证书。 我有自定义的 ca-cert pem 文件,我已经成功地将其与 python、curl 等其他工具和工具链一起使用。
我有一组点地标分布在 google earth 插件上的一个小区域,如何获得这些点地标子集的平均范围(边界矩形)并缩放到该范围? 问候,湿婆神 最佳答案 你应该看看 GEarthExtensions
程序应如何确定 Google Earth API 已获取某个位置的准确高度? Google Earth Plugin API 有以下获取地面高度的方法: double GEGlobe.getGroun
在初始化 API 时,在看似成功的服务身份验证之后,我收到了初始化错误。我们的小组正在 react 框架上运行。 这是抛出错误的日志: Server listening on port 8080...
我正在使用 WebGL 的 Globe API 及其旋转动画功能,但我希望用户能够通过双击地球来停止和重新启动动画。 目前我有以下运行 onload 的动画代码: function performAn
我对 google earth 的 kml 文件有疑问。当我使用高度模式 clampToGround 时,它完全符合我的预期,它很好地跟随地面。 pm1kml
我正在编写一个带有 WebBrowser 控件的 WinForms 应用程序。我在此应用程序中使用了 Google Earth Plugin,需要在 Google Earth 上创建一些地标。根据当前
我是一名优秀的程序员,十分优秀!