python - Django获取PointField的坐标值

标签 python django gis postgis geodjango

我要获取xy从以下点开始的坐标 queryset :

user = User.objects.values('id', 'email', 'username', 'point').first()
这些是我的 models :
from django.db.models import Model

from django.contrib.gis.db.models import PointField

class BasePointModel(Model):

    point = PointField(null=True, spatial_index=True, geography=True)

    class Meta:
        abstract = True

class User(AbstractUser, BasePointModel, HashableModel):  # type: ignore

    # First Name and Last Name do not cover name patterns
    # around the globe.
    name = CharField(_("Name of User"), blank=True, max_length=255)
    is_online = BooleanField(_("Is online"), default=False)
我得到以下结果:
{'id': 85270,
 'email': 'username_0@email.com',
 'username': 'username_0',
 'point': <Point object at 0x7f8e061cc2b8>}
我怎样才能得到一个 xy , 使用 values 创建查询集?
我想得到这样的东西:
{'id': 85270,
 'email': 'username_0@email.com',
 'username': 'username_0',
 'point__x': '-4.266398314110177',
 'point__y': '-39.39432682357033'}
我发出从数据库返回 50,000 行的请求,我注意到由于数据序列化,性能越来越差。我想通过返回 values 来最小化序列化.
但是PointField总是返回 object ,而且我还没有找到以最佳方式对其进行序列化的方法。

最佳答案

您可以访问 __dict__对象的方法,然后直接使用几何图形:

user = User.objects.values('id', 'email', 'username', 'point').first()
user_dict = user.__dict__
user_dict.update({'point__x':user_dict['point'].x, {'point__y':user_dict['point'].y})

关于python - Django获取PointField的坐标值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54137877/

相关文章:

python - 使用 AWS S3 数据在 Django 中创建模型并指向它们

php - 将 Lat/Long 空间扩展插入 MySQL

python - 如何找到字符串的一部分?

python - 调试停止从 libc.so.6 到 std::cout 的 write()

Python:平均绘图数量(随机生成的数字)

python - 多处理忽略 "__setstate__"

mysql - Django 2.0 SQLite3 到 MySQL 加载数据错误 : "The database backend does not accept 0 as a value for AutoField."

django - 在 django 中与 cassandra 交互?

python - 基于集中度结合 GeoPandas Dataframe 和 Pandas Dataframe

mysql - 向函数 st_geometryfromwkb 提供的 GIS 数据无效