将KML文件添加到GeoDjango字段中

时间:2018-05-31 15:41:29

标签: django kml geodjango

我正在尝试将KML文件添加到GeoDjango中的字段。 Link to KML file。我试着按照on this question的答案,但这大多是错误的。

我的模特:

class School(models.Model):
    boundaries = models.PolygonField(null=True)
i = School.objects.get(...)
ds = DataSource('school.aspx')
layer = ds[0]   #The file only has 1 layer
geom = layer.get_geoms()
boundary = GEOSGeometry(geom[0])
i.boundaries = boundary
i.save()

上面的代码给出了以下错误:

TypeError: Improper geometry input type: <class 'django.contrib.gis.gdal.geometries.Polygon'>

当我尝试直接添加字段时,如下所示:

i = School.objects.get(...)
ds = DataSource('school.aspx')
layer = ds[0]
geom = layer.get_geoms()
i.boundaries = geom[0]
i.save()

我收到此错误:TypeError: Cannot set School SpatialProxy (POLYGON) with value of type: <class 'django.contrib.gis.gdal.geometries.Polygon'>

如何将KML文件中的多边形形状保存到我的数据库中?我很难过。

1 个答案:

答案 0 :(得分:1)

尝试使用gdal geoms的.geos属性:

ds = DataSource('school.kml')
o = School(boundaries=ds[0][0].geom.geos)
o.save()