Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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中处理上载的KML文件_Django_Geodjango_Gdal - Fatal编程技术网

如何在GeoDjango中处理上载的KML文件

如何在GeoDjango中处理上载的KML文件,django,geodjango,gdal,Django,Geodjango,Gdal,我编写了一个cmd行例程,将kml文件导入到geoDjango应用程序中,当您向它提供本地保存的kml文件路径(使用datasource对象)时,它可以正常工作 现在我正在写一个网页文件上传对话框,实现同样的事情。这是我的代码的开头,问题是GDAL数据源对象似乎不理解Djangos UploadedFile格式。它保存在内存中,而不是预期的文件路径 将上载的文件转换为普通文件并通过路径访问该文件的最佳策略是什么?处理后我不想保留该文件 def createFeatureSet(request):

我编写了一个cmd行例程,将kml文件导入到geoDjango应用程序中,当您向它提供本地保存的kml文件路径(使用datasource对象)时,它可以正常工作

现在我正在写一个网页文件上传对话框,实现同样的事情。这是我的代码的开头,问题是GDAL数据源对象似乎不理解Djangos UploadedFile格式。它保存在内存中,而不是预期的文件路径

将上载的文件转换为普通文件并通过路径访问该文件的最佳策略是什么?处理后我不想保留该文件

def createFeatureSet(request):
if request.method == 'POST':
    inMemoryFile = request.FILES['myfile']
    name = inMemoryFile.name
    POSTGIS_SRID = 900913
    ds = DataSource(inMemoryFile) #This line doesnt work!!! 
    for layer in ds:
        if layer.geom_type in (OGRGeomType('Point'), OGRGeomType('Point25D'), OGRGeomType('MultiPoint'), OGRGeomType('MultiPoint25D')):
            layerGeomType = OGRGeomType('MultiPoint').django
        elif layer.geom_type in (OGRGeomType('LineString'),OGRGeomType('LineString25D'), OGRGeomType('MultiLineString'), OGRGeomType('MultiLineString25D')):
            layerGeomType = OGRGeomType('MultiLineString').django
        elif layer.geom_type in (OGRGeomType('Polygon'), OGRGeomType('Polygon25D'), OGRGeomType('MultiPolygon'), OGRGeomType('MultiPolygon25D')):
             layerGeomType = OGRGeomType('MultiPolygon').django

DataSource是GDAL的C API的包装器,需要一个实际的文件。你需要把你的上传文件写在磁盘上的某个地方,因为你使用了一个。然后您可以将文件传递给DataSource。

DataSource是GDAL的C API的包装器,需要一个实际的文件。你需要把你的上传文件写在磁盘上的某个地方,因为你使用了一个。然后,您可以将该文件传递给数据源。

下面是一个使用临时文件的建议解决方案。我将处理代码放在它自己的函数中,该函数现在被调用

    f = request.FILES['myfile']
    temp = tempfile.NamedTemporaryFile(delete=False)
    temp.write(f.read())
    temp.close()
    createFeatureSet(temp.name, source_SRID= 900913)

下面是使用临时文件的建议解决方案。我将处理代码放在它自己的函数中,该函数现在被调用

    f = request.FILES['myfile']
    temp = tempfile.NamedTemporaryFile(delete=False)
    temp.write(f.read())
    temp.close()
    createFeatureSet(temp.name, source_SRID= 900913)