GeoDjango从json或点保存数据
如果文件(作为列表)或内存中或json格式中已经存在多字符串cordinate, 如何替代“保存”功能来保存这些点,而不是用户在地图上创建对象?或者更准确地说,如何将这些点加载到模型和数据库中 内存/文件中的坐标GeoDjango从json或点保存数据,django,geodjango,Django,Geodjango,如果文件(作为列表)或内存中或json格式中已经存在多字符串cordinate, 如何替代“保存”功能来保存这些点,而不是用户在地图上创建对象?或者更准确地说,如何将这些点加载到模型和数据库中 内存/文件中的坐标 [[36.66678428649903, -1.5474249907643578], [36.670904159545906, -1.542620219636788], [36.66635513305665,-1.5353272427374922],[36.66240692138672
[[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
是否尝试将地理数据保存为:几个点,每个点都有自己的数据?一组行字符串?单行线?