哪个 SRID 适用于 SpatiaLite db 中的添加和排序?

Posted

技术标签:

【中文标题】哪个 SRID 适用于 SpatiaLite db 中的添加和排序?【英文标题】:Which SRID works with adding and sorting in SpatiaLite db? 【发布时间】:2015-02-03 10:52:10 【问题描述】:

我正在尝试制作 geodjango 应用程序。我正在使用 SQLite 和 SpatialLite。 我想添加商店,并能够从离我的位置最近到最远的位置对它们进行排序。

当我在我的模型中时:

location = gis_models.PointField(srid=4326, blank=True, null=True)

然后添加工作,但按距离排序不起作用,我得到:

SQLite does not support linear distance calculations on geodetic coordinate systems.

当我有:

location = gis_models.PointField(srid=3857, blank=True, null=True)

添加不起作用,排序工作,我得到:

geo_shop.location violates Geometry constraint [geom-type or SRID not allowed]

我该怎么做才能让它们同时工作?

【问题讨论】:

【参考方案1】:

添加位置时出错与 srid 不匹配有关。

使用 srid=3857 进行排序,但是当您添加位置时,请使用以下方法(来自 this answer)将它们从 4326 转换为 3857:

>>> from django.contrib.gis.gdal import SpatialReference, CoordTransform
>>> from django.contrib.gis.geos import Point
>>> gcoord = SpatialReference(4326)
>>> mycoord = SpatialReference(22186)
>>> trans = CoordTransform(gcoord, mycoord)

>>> pnt = Point(30, 50, srid=4326)
>>> print 'x: %s; y: %s; srid: %s' % (pnt.x, pnt.y, pnt.srid)
x: 30.0; y: 50.0; srid: 4326
>>> pnt.transform(trans)
>>> print 'x: %s; y: %s; srid: %s' % (pnt.x, pnt.y, pnt.srid)
x: 11160773.5712; y: 19724623.9117; srid: 22186

【讨论】:

以上是关于哪个 SRID 适用于 SpatiaLite db 中的添加和排序?的主要内容,如果未能解决你的问题,请参考以下文章

常规笛卡尔坐标系的 PostGIS 空间参考 ID(SRID)?

Django无法在Ubuntu上加载SpatiaLite库扩展mod_spatialite

灵活查询适用于 HANA DB,但不适用于 HSQL DB

db2audit 审计 (适用于db2 9.7)

哪个功能,算法适用于说话人验证

烧瓶关系,仅适用于同一个人的唯一列名称