GeoDjango从json或点保存数据

时间:2018-01-09 09:44:56

标签: django geodjango

如果我已经在文件(作为列表)或内存或json格式中存在MultiString cordinates, 如何覆盖保存功能以保存这些点而不是用户在地图上创建对象?或者更准确地说,我如何将这些点加载到模型和数据库?

内存/文件中的坐标

[[36.66678428649903, -1.5474249907643578], [36.670904159545906, -1.542620219636788], [36.66635513305665,-1.5353272427374922],[36.662406921386726, -1.5403894293513378]]

models.py

class LogsUpload(models.Model):
    name = models.CharField(max_length=240)
    geom  = gis_models.MultiLineStringField(blank=True, null=True)

如何使用cordinates并将其保存在geom字段中?

2 个答案:

答案 0 :(得分:3)

使用GEOS API中的for /?LineString类在内存中创建行和多行,并将它们分配到模型的字段中:

MultiLineString

使用Django 2.0和PostGIS进行测试。

答案 1 :(得分:2)

使用 gis.db PointField来存储[lat, long]数据。

from django.contrib.gis.db import models as gis_model

geom = gis_model.PointField(null=True, spatial_index=True, geography=True)

PointField接受GEOSGeometry对象,因此您可以创建数据,如。

import json
from django.contrib.gis.geos import GEOSGeometry

data_coordinates = [[36.66678428649903, -1.5474249907643578], [36.670904159545906, -1.542620219636788], [36.66635513305665,-1.5353272427374922],[36.662406921386726, -1.5403894293513378]]

for coordinate in data_coordinates:
    point = {
        "type": "Point",
        "coordinates": coordinate 
    }

    LogsUpload.objects.create(name="your location name", geom=GEOSGeometry(json.dumps(point)))
  

了解更多Storing, querying & serializing location data with Django using PostGIS

<强>更新

如果您想将所有这些内容保存在LogsUpload模型的一个对象中,只需使用django.db.models的{​​{3}}或ArrayField