在好例子网,分享、交流、成长!
您当前所在位置:首页Python 开发实例Python语言基础 → python通过geoserver将tiff影像发布到wms服务

python通过geoserver将tiff影像发布到wms服务

Python语言基础

下载此实例
  • 开发语言:Python
  • 实例大小:4.87KB
  • 下载次数:0
  • 浏览次数:4
  • 发布时间:2025-07-15
  • 实例类别:Python语言基础
  • 发 布 人:huntwin
  • 文件格式:.py
  • 所需积分:2
 相关标签: Server python Tiff geoserver wms

实例介绍

【实例简介】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}"
    }

实例下载地址

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警