如何使用Python从GeoServer下载GeoTiff文件

2024-04-29 13:14:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用Python从GeoServer下载GeoTiff文件。我在网上找到了一些关于这类事情的资源,但我一直无法完成这项任务。在

例如,这里:https://gis.stackexchange.com/questions/181560/download-geotiff-from-geoserver似乎人们已经能够做我想做的事情,但是他们没有解释他们的过程。在

同样,这里接受的答案是:How to grab a TIFF image from python可以像http://imgsrc.hubblesite.org/hu/db/images/hs-2006-01-a-hires_tif.tif那样下载geotiff,但是GeoServer上没有GeoTiffs的下载链接。在

任何帮助都将不胜感激!在

编辑:以下是我迄今为止尝试过的更多细节。GeoServer在本地有一个restapi服务器,位于http://localhost:8080/geoserver/rest,所以我最初尝试用python访问这个url,然后在“Layers”中下载我想要的GeoTiff。但是,“Layers”中的每个文件都是一个html文件;我想知道是否有一个地方可以通过编程方式访问GeoTiff文件。我认为这是问题的根源——虽然我不太确定如何以编程方式下载geotiff,但我必须首先能够在GeoServer中实际访问它们。在

不过,就进展而言,我还没能取得什么进展。如上所述,我可以使用How to grab a TIFF image from python上的代码下载GeoTiff,但我无法为GeoServer上的GeoTiff执行此操作。我对GeoServer和GeoTiff格式都是新手,所以我不太确定如何解决这个问题。在


Tags: 文件tofromimagehttplayersgeoserver事情
2条回答

我的同事找到了解决这个问题的办法。使用下面的示例代码,我们可以从GeoServer下载GeoTiff文件。在

from owslib.csw import CatalogueServiceWeb
import urllib

def getLinkByIDCWS(url, id, user, pwd):
    csw = CatalogueServiceWeb(url, username=user, password=pwd)

    csw.getrecordbyid(id=[id])
    csw.records[id].references

    link = csw.records[id].references[2]['url']

    return link

def downloadImage(url, fileName):
    urllib.request.urlretrieve(url, fileName)

url = "http://localhost:8080/geoserver/csw?service=CSW&version=2.0.2&request=GetRecords&typeNames=gmd:MD_Metadata&resultType=results&elementSetName=full&outputSchema=http://www.isotc211.org/2005/gmd"
record = "nurc:Arc_Sample"
name = "<user>"
pwd = "<pwd>"

link = getLinkByIDCWS(url, record, name, pwd)
print(link)

downloadImage(link, "test.arc")

正如您的linked question的答案所说,您需要向GeoServer发出一个WCS request来获取GeoTiff。在

GeoServer manual提供了一个WCS reference,它将帮助您理解如何继续。您还可以转到GeoServer安装的demos页面,并使用WCS Request builder创建一个XML文件,您可以将其用作python程序中的模板。在

GeoServer WCS Request builder

相关问题 更多 >