Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GeoDjango从json或点保存数据_Django_Geodjango - Fatal编程技术网

GeoDjango从json或点保存数据

GeoDjango从json或点保存数据,django,geodjango,Django,Geodjango,如果文件(作为列表)或内存中或json格式中已经存在多字符串cordinate, 如何替代“保存”功能来保存这些点,而不是用户在地图上创建对象?或者更准确地说,如何将这些点加载到模型和数据库中 内存/文件中的坐标 [[36.66678428649903, -1.5474249907643578], [36.670904159545906, -1.542620219636788], [36.66635513305665,-1.5353272427374922],[36.66240692138672

如果文件(作为列表)或内存中或json格式中已经存在多字符串cordinate, 如何替代“保存”功能来保存这些点,而不是用户在地图上创建对象?或者更准确地说,如何将这些点加载到模型和数据库中

内存/文件中的坐标

[[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)

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

使用gis.db的
点字段
存储
[lat,long]
数据

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

geom = gis_model.PointField(null=True, spatial_index=True, geography=True)
PointField接受GeoGeometry对象,以便您可以像这样创建数据

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)))
阅读更多内容

更新


如果您想将它们保存在
LogsUpload
model的一个对象中,只需使用
django.db.models的或

使用中的
LineString
MultiLineString
类在内存中创建行和多行,并将它们分配给模型的字段:

>>> from django.contrib.gis.geos import LineString, MultiLineString
>>> DATA = [[36.66678428649903, -1.5474249907643578], [36.670904159545906, -1.542620219636788], [36.66635513305665,-1.5353272427374922],[36.662406921386726, -1.5403894293513378]]
>>> line = LineString(DATA)
>>> line
<LineString object at 0x7f96538f49a0>
>>> line.length
0.02134446840090856
>>> line.geojson
'{ "type": "LineString", "coordinates": [ [ 36.666784286499031, -1.547424990764358 ], [ 36.670904159545906, -1.542620219636788 ], [ 36.666355133056648, -1.535327242737492 ], [ 36.662406921386726, -1.540389429351338 ] ] }'
>>> multi_line = MultiLineString(line)
>>> multi_line
<MultiLineString object at 0x7f96536ccbc0>
>>> multi_line[0]
<LineString object at 0x7f964187b3c8>
>>> multi_line.length
0.02134446840090856
>>> multi_line.geojson
'{ "type": "MultiLineString", "coordinates": [ [ [ 36.666784286499031, -1.547424990764358 ], [ 36.670904159545906, -1.542620219636788 ], [ 36.666355133056648, -1.535327242737492 ], [ 36.662406921386726, -1.540389429351338 ] ] ] }'

>>> from myapp.models import LogsUpload
>>> o = LogsUpload(name="foo", geom=multi_line)
>>> o.full_clean()
>>> o.save()
来自django.contrib.gis.geos的导入行字符串,多行字符串 >>>数据=[[36.66678428649903,-1.5474249907643578],[36.670904159545906,-1.542620219636788],[36.66635513305665,-1.5353272474922],[36.662406921386726,-1.5403894293513378]] >>>行=行字符串(数据) >>>线 >>>直线长度 0.02134446840090856 >>>line.geojson “{”type:“LineString”,“coordinates:[36.666784286499031,-1.547424990764358],[36.670904159545906,-1.542620219636788],[36.666355133056648,-1.535327247492],[36.662406921386726,-1.540389429351338]” >>>多线=多线(线) >>>多线 >>>多行[0] >>>多线长度 0.02134446840090856 >>>multi_line.geojson “{”类型“:”多行“,”坐标“:[[36.666784286499031,-1.547424990764358],[36.670904159545906,-1.542620219636788],[36.666355133056648,-1.535327247492],[36.662406921386726,-1.540389429351338]] >>>从myapp.models导入LogsUpload >>>o=日志加载(name=“foo”,geom=多行) >>>o.完全清洁() >>>o.保存()

使用Django 2.0和PostGIS进行测试。

谢谢Satendra。但为了澄清,我有多个来自多段线的横向/纵向,我想存储它们。PointField是否只存储一个点?是否要在LogsUpload的一个对象中保存所有lat/LONG?是的,我要将所有lat/LONG保存在模型中。如果要将所有lat/LONG保存在LogsUpload模型的一个对象中,您可以简单地使用或的
django.db.models
是否尝试将地理数据保存为:几个点,每个点都有自己的数据?一组行字符串?单行线?