基本信息
源码名称:python通过geoserver将tiff影像发布到wms服务
源码大小:4.87KB
文件格式:.py
开发语言:Python
更新时间:2025-07-15
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
python通过geoserver将tiff影像发布到wms服务
def publish_tif_to_geoserver(geoserver_url, username, password, workspace, store_name, tif_file_path, layer_name):
"""
将TIF文件发布到GeoServer
参数:
geoserver_url: GeoServer基础URL (例如: http://localhost:8080/geoserver)
username: GeoServer用户名
password: GeoServer密码
workspace: 工作区名称
store_name: 数据存储名称
tif_file_path: TIF文件路径
layer_name: 图层名称
返回:
发布的服务URL
"""
auth = HTTPBasicAuth(username, password)
headers = {"Content-type": "application/json"}
# 1. 检查工作区是否存在,若不存在则创建
workspace_url = f"{geoserver_url}/rest/workspaces/{workspace}"
try:
check_response = requests.get(workspace_url, auth=auth)
if check_response.status_code == 404: # 工作区不存在,进行创建
create_workspace_url = f"{geoserver_url}/rest/workspaces"
response = requests.post(
create_workspace_url,
auth=auth,
headers=headers,
json={"workspace": {"name": workspace}}
)
if response.status_code not in (200, 201):
print(f"创建工作区失败 (状态码 {response.status_code}): {response.text}")
return None
except Exception as e:
print(f"检查或创建工作区时出错: {str(e)}")
return None
# 2. 创建数据存储并上传TIF文件
store_url = f"{geoserver_url}/rest/workspaces/{workspace}/coveragestores/{store_name}/file.geotiff"
with open(tif_file_path, 'rb') as f:
try:
response = requests.put(
store_url,
auth=auth,
headers={"Content-type": "image/tiff"},
data=f
)
if response.status_code != 201:
print(f"创建数据存储失败 (状态码 {response.status_code}): {response.text}")
return None
else:
print("数据存储创建成功")
except Exception as e:
print(f"上传TIF文件时出错: {str(e)}")
return None
# 获取自动生成的图层名称
coverage_url = f"{geoserver_url}/rest/workspaces/{workspace}/coveragestores/{store_name}/coverages.json"
try:
coverage_response = requests.get(coverage_url, auth=auth)
if coverage_response.status_code == 200:
coverages = coverage_response.json().get('coverages', {}).get('coverage', [])
if coverages:
layer_name = coverages[0].get('name', layer_name)
except Exception as e:
print(f"获取图层名称时出错: {str(e)}")
# 3. 发布图层
layer_url = f"{geoserver_url}/rest/workspaces/{workspace}/coveragestores/{store_name}/coverages/{layer_name}"
layer_xml = f"""
<coverage>
<name>{layer_name}</name>
<title>{layer_name}</title>
<enabled>true</enabled>
</coverage>
"""
try:
response = requests.put(
layer_url,
auth=auth,
headers={"Content-type": "text/xml"},
data=layer_xml
)
if response.status_code not in (200, 201):
print(f"发布图层失败 (状态码 {response.status_code}): {response.text}")
return None
except Exception as e:
print(f"发布图层时出错: {str(e)}")
return None
# 4. 返回服务URL
wms_url = f"{geoserver_url}/{workspace}/wms?service=WMS&version=1.1.0&request=GetMap&layers={workspace}:{layer_name}&styles=&bbox={{bbox}}&width=768&height=330&srs=EPSG:4326&format=image/png"
wfs_url = f"{geoserver_url}/{workspace}/ows?service=WFS&version=1.0.0&request=GetFeature&typeName={workspace}:{layer_name}&maxFeatures=50&outputFormat=application/json"
return {
"wms_url": wms_url,
"wfs_url": wfs_url,
"layer_url": f"{geoserver_url}/{workspace}/wms?layers={workspace}:{layer_name}"
}
python通过geoserver将tiff影像发布到wms服务
def publish_tif_to_geoserver(geoserver_url, username, password, workspace, store_name, tif_file_path, layer_name):
"""
将TIF文件发布到GeoServer
参数:
geoserver_url: GeoServer基础URL (例如: http://localhost:8080/geoserver)
username: GeoServer用户名
password: GeoServer密码
workspace: 工作区名称
store_name: 数据存储名称
tif_file_path: TIF文件路径
layer_name: 图层名称
返回:
发布的服务URL
"""
auth = HTTPBasicAuth(username, password)
headers = {"Content-type": "application/json"}
# 1. 检查工作区是否存在,若不存在则创建
workspace_url = f"{geoserver_url}/rest/workspaces/{workspace}"
try:
check_response = requests.get(workspace_url, auth=auth)
if check_response.status_code == 404: # 工作区不存在,进行创建
create_workspace_url = f"{geoserver_url}/rest/workspaces"
response = requests.post(
create_workspace_url,
auth=auth,
headers=headers,
json={"workspace": {"name": workspace}}
)
if response.status_code not in (200, 201):
print(f"创建工作区失败 (状态码 {response.status_code}): {response.text}")
return None
except Exception as e:
print(f"检查或创建工作区时出错: {str(e)}")
return None
# 2. 创建数据存储并上传TIF文件
store_url = f"{geoserver_url}/rest/workspaces/{workspace}/coveragestores/{store_name}/file.geotiff"
with open(tif_file_path, 'rb') as f:
try:
response = requests.put(
store_url,
auth=auth,
headers={"Content-type": "image/tiff"},
data=f
)
if response.status_code != 201:
print(f"创建数据存储失败 (状态码 {response.status_code}): {response.text}")
return None
else:
print("数据存储创建成功")
except Exception as e:
print(f"上传TIF文件时出错: {str(e)}")
return None
# 获取自动生成的图层名称
coverage_url = f"{geoserver_url}/rest/workspaces/{workspace}/coveragestores/{store_name}/coverages.json"
try:
coverage_response = requests.get(coverage_url, auth=auth)
if coverage_response.status_code == 200:
coverages = coverage_response.json().get('coverages', {}).get('coverage', [])
if coverages:
layer_name = coverages[0].get('name', layer_name)
except Exception as e:
print(f"获取图层名称时出错: {str(e)}")
# 3. 发布图层
layer_url = f"{geoserver_url}/rest/workspaces/{workspace}/coveragestores/{store_name}/coverages/{layer_name}"
layer_xml = f"""
<coverage>
<name>{layer_name}</name>
<title>{layer_name}</title>
<enabled>true</enabled>
</coverage>
"""
try:
response = requests.put(
layer_url,
auth=auth,
headers={"Content-type": "text/xml"},
data=layer_xml
)
if response.status_code not in (200, 201):
print(f"发布图层失败 (状态码 {response.status_code}): {response.text}")
return None
except Exception as e:
print(f"发布图层时出错: {str(e)}")
return None
# 4. 返回服务URL
wms_url = f"{geoserver_url}/{workspace}/wms?service=WMS&version=1.1.0&request=GetMap&layers={workspace}:{layer_name}&styles=&bbox={{bbox}}&width=768&height=330&srs=EPSG:4326&format=image/png"
wfs_url = f"{geoserver_url}/{workspace}/ows?service=WFS&version=1.0.0&request=GetFeature&typeName={workspace}:{layer_name}&maxFeatures=50&outputFormat=application/json"
return {
"wms_url": wms_url,
"wfs_url": wfs_url,
"layer_url": f"{geoserver_url}/{workspace}/wms?layers={workspace}:{layer_name}"
}