python字节到geojson点

2w2cym1i  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(430)

我有一个mysql数据库,其中有点类型的位置数据,还有一个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 "", line 1, in
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf4 in position 13: invalid continuation byte

即使使用mysql函数从django执行原始查询,也会得到相同的字节数组 `St_AsGeoJson(location)` . 
然后我尝试了geojson。当我把这些字节输入 `geojson.Point()` 我得到了一个geojson,但不是2个浮动 `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中检索点数据?
jv4diomz

jv4diomz1#

我遇到这个问题是因为我使用的是普通的django,django模型没有处理地理数据的字段类型。我用的是 CharField 用一个 max_length=255 然后试图分析 CharField 从数据库检索。我使用geodjango和django rest框架gis解决了这个问题。django rest框架gis是不必要的。我使用它是因为我使用的是django rest框架,它以一种很好的格式输出地理数据。
步骤是
安装gdal(地理空间数据抽象库) sudo apt-get install gdal-bin sudo apt-get install python3-gdal 添加 django.contrib.gis 以及 rest_framework_gissettings.INSTALLED_APPSGDAL_LIBRARY_PATHsettings 对我来说 GDAL_LIBRARY_PATH = os.getenv('GDAL_LIBRARY_PATH') 从更新模型导入 from django.db import modelsfrom django.contrib.gis.db import models 更新模型以使用地理场。更多:https://docs.djangoproject.com/en/2.1/ref/contrib/gis/model-api/
链接
https://docs.djangoproject.com/en/2.1/ref/contrib/gis/
https://github.com/djangonauts/django-rest-framework-gis
https://github.com/domlysz/blendergis/wiki/how-to-install-gdal

相关问题