mysql - Python 字节到 geojson 点

标签 mysql django python-3.x geojson

我有一个 MySQL 数据库,其中有 Point 类型位置数据和一个 Django(Django Rest Framework)后端,我试图在其中检索该数据。如果我尝试从 phpMyAdmin 获取位置数据,返回的位置类似于 POINT(23.89826 90.267535) 。然而,在我的 Django 后端,我得到一个 bytes作为返回的位置。返回值是这样的 b'\x00\x00\x00\x00\x01\x01\x00\x00\x00\x12N\x0b^\xf4\xe57@C\xe2\x1eK\x1f\x91V@'

数据库使用utf8mb4_unicode_ci整理。

如果我尝试将返回的字节转换为字符串 .decode('utf-8')我得到UnicodeDecodeError

>>> s = b'\x00\x00\x00\x00\x01\x01\x00\x00\x00\x12N\x0b^\xf4\xe57@C\xe2\x1eK\x1f\x91V@'
>>> s.decode('utf-8')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf4 in position 13: invalid continuation byte

即使我使用 MySQL 函数 St_AsGeoJson(location) 从 Django 执行原始查询,我也会得到相同的字节数组。 。

然后我尝试了 geojson。当我将这些字节输入 geojson.Point() 时我得到了一个 geojson,但不是 2 个 float ,而是 coordinates数组由 25 个整数值组成。

>>> s = b'\x00\x00\x00\x00\x01\x01\x00\x00\x00\x12N\x0b^\xf4\xe57@C\xe2\x1eK\x1f\x91V@'
>>> geojson.Point(s)
{"coordinates": [0, 0, 0, 0, 1, 1, 0, 0, 0, 18, 78, 11, 94, 244, 229, 55, 64, 67, 226, 30, 75, 31, 145, 86, 64], "type": "Point"}

如何从字节或此 geojson 中检索点数据?

最佳答案

我遇到这个问题是因为我使用的是普通 Django,而 Django 模型没有处理地理数据的字段类型。我将 CharFieldmax_length=255 一起使用,然后尝试解析从数据库检索到的 CharField 内容。我通过使用 GeoDjango 和 Django REST Framework GIS 解决了这个问题。 Django REST Framework GIS 不是必需的。我使用它是因为我使用 Django REST Framework 并且它以良好的格式输出地理数据。

步骤是

  1. 安装GDAL(地理空间数据抽象库)

    sudo apt-get install gdal-bin sudo apt-get install python3-gdal

  2. django.contrib.gisrest_framework_gis 添加到 settings.INSTALLED_APPS

  3. 设置中设置GDAL_LIBRARY_PATH,在我的例子中是GDAL_LIBRARY_PATH = os.getenv('GDAL_LIBRARY_PATH')
  4. 将模型导入从 from django.db import models 更新为 from django.contrib.gis.db import models
  5. 更新模型以使用地理字段。更多:https://docs.djangoproject.com/en/2.1/ref/contrib/gis/model-api/

链接

关于mysql - Python 字节到 geojson 点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52755396/

相关文章:

PHP 数组到图表

django - 根据 Django 应用程序中的 Drupal 用户数据库表进行身份验证

python - 需要提取查询集中每个项目的首字母并将其传递给模板

Django;是否可以为queryset设置默认值

python - 数组中重复元素的查找函数

python - python的符号链接(symbolic link)重要吗?

mysql - 房屋设施的数据库结构

php - 上传多张图片并在数据库 PHP MySQL 中保存名称

Python 枚举类构造与元类

mysql - 将 csv 加载到 mysql 选择列