geoserver发布tif 暨 通过高德api调用wmts服务 暨 epsg:4326转epsg:3857 暨 一些坑

本文详细介绍了如何使用GeoServer发布大尺寸的.tif图像,并将其集成到高德地图API中,包括解决坐标系转换、图像缩放及显示等问题。
部署运行你感兴趣的模型镜像

写在前面:因为不是专业,所以希望有大神不吝赐教。

用的工具有:tomcat-9.0.30; geoserver 2.11.2; Arc Map(ArcGis 10.4.1); Global Mapper 20 等必要编程环境

可能有用的网站:https://spatialreference.org/ ;

 https://docs.geoserver.org/stable/en/user/configuration/crshandling/coordtransforms.html

gdal: https://pan.baidu.com/s/1X9120CoHySWcUIV7FndaWQ

需求:通过高德api 访问一张坐标系为epsg:4326的tif图

因为tif图有三百多m,只能通过geoserver来曲线救国

高德1.4.5版本的api 已经支持了WMTS服务 https://lbs.amap.com/api/javascript-api/example/thirdlayer/wmts

第一步:部署tif图到geoserver

很顺利,添加工作区,添加数据存储,选择工作区,选择tif图数据,然后点击发布;这个网上教程很多。

然后因为高德说了,自己的api只支持epsg:3857,因此要自己额外加一个gridset,如下图查找epsg:3857, 添加18级level,level名改成高德要的那样,18级不够也可以再加

 然后回到之前发布的图层的Tile Cacheing ,如下保存即可,没什么大坑。

 你的wmts服务地址在欢迎界面里有写

 然后贴上高德代码即可,就是贴上栅格图会覆盖路网不知道怎么解决,倒是地名都会在上面

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <title>TileLayer.WMTS</title>
    <style>
        html,
        body,
        #container {
            margin: 0;
            padding: 0;
            width: 100%;
            height: 100%;
        }
    </style>
</head>
<body>
<div id="container"></div>
<script src="http://webapi.amap.com/maps?v=1.4.5&key=你的高德key"></script>
<script>
    var map = new AMap.Map('container', {
		layers: [
            // 卫星
            new AMap.TileLayer.Satellite(),
            // 路网
            new AMap.TileLayer.RoadNet()
        ],
        resizeEnable: true,
        zoom: 12,
        //
        //center: [地图中心的经纬度]
    });

    var wms = new AMap.TileLayer.WMTS({
        url: '你的wmts服务地址',
        blend: false,
        tileSize: 256,
        params: {
            layer: '你的工作区:你的图层',
			style: '',
			Service: 'WMTS',
			Request: 'GetTile',
			Version: '1.0.0',
			Format: 'image/png',
        }
    });

    wms.setMap(map);

</script>
</body>
</html>

结果发现epsg:4326的图即使发布成epsg:3857贴到高德地图上还是epsg:4326的坐标

第二步:把tif图 epsg:4326转成epsg:3857

我这门外汉被这一步坑惨了

安装ArcMap,添加数据,工具箱-》数据管理-》投影 , 发现只能转元素,不知是啥

工具箱-》数据管理-》栅格-》投影栅格 这个好像可以转tif图,投影栅格选择源坐标系为图层,目的坐标系为投影坐标系:Mercator(Auxiliary Sphere), 把导出的位置改成文件夹而不是默认的地理数据库,就可以把选择格式为tif了。ArcMap可能会出bug,选择工具栏里的地理处理,把后台的勾去掉即可。

图导出了,但是发现geoserver添加数据时,识别不了这个,会报如下这种错误Could not list layers for this store, an error occurred retrieving them: Failed to create reader from file:...

搜了下是说TIFF的头文件有问题或者geoserver无法识别投影坐标系,下了gdal,gdal_translate -of GTiff -scale 输入文件 输出文件 没有用。我也试了下这个 gdal_translate -of GTiff -co tiled=yes -a_srs epsg:3857  input.tif output.tif  也没有用,那么答案应该是geoserver不识别这坐标系,我还试着Global Mapper 又转了一遍,也没用。

Global Mapper 转是先添加文件,再在工具栏里的tools->configuration->projection 在search for epsg里搜3857,然后就可以转了,但转后的图会缩水不知道在哪有压缩选项。

最后只能用下鸡贼的方法,使用ArcMap的地图校准,虽然GM也有,但我没找着。

ArcMap右键工具栏勾选地理配准,先去掉自动校正,然后点击在地图上添加控制点,右键x与y填写经纬度,填的经纬度当然是从高德地图上的啦。

可以从高德开发平台页面,开发者工具,坐标拾取器里找到。

控制点根据网上教程最好找马路交叉点。觉得控制点加的差不多了,再勾上自动校正。然后点更新地理配准把坐标改到原图上,校正是新生成一个图,我试了下geoserver也不识别,所以最好先复制一份。

因为手动校正有偏差,数据导出后会有一丝黑边,这黑边的颜色其实就是导出时的nodata。这就超出我的能力范围了,暂且可以凑合用。  黑边解决了参考这篇文章:https://blog.youkuaiyun.com/hayaqi0504/article/details/92793102

 

把校正好的图部署到geoserver,就行了。

最后,希望在以上任意操作有更好解决方法的大神能留言,谢谢

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### 如何在 Cesium 中加载 EPSG:4326 格式的瓦片地图 在 Cesium 中加载 EPSG:4326 格式的瓦片地图需要使用 `GeographicTilingScheme`,因为默认的切片方案是基于 Web 墨卡托投影(EPSG:3857)。为了支持 EPSG:4326 投影,必须显式设置 `tilingScheme` 参数为 `Cesium.GeographicTilingScheme`[^1]。 以下是实现此功能的完整代码示例: ```javascript var wmtsprovider = new Cesium.WebMapTileServiceImageryProvider({ url: 'http://10.19.151.72:8080/geoserver/gwc/service/wmts?', layer: "wmts_test:beijing", format: 'image/png', minimumLevel: 1, maximumLevel: 19, style: "", proxy: new Cesium.DefaultProxy('/proxy/'), tileMatrixSetID: 'EPSG:4326', tileMatrixLabels: [ 'EPSG:4326:0', 'EPSG:4326:1', 'EPSG:4326:2', 'EPSG:4326:3', 'EPSG:4326:4', 'EPSG:4326:5', 'EPSG:4326:6', 'EPSG:4326:7', 'EPSG:4326:8', 'EPSG:4326:9', 'EPSG:4326:10', 'EPSG:4326:11', 'EPSG:4326:12', 'EPSG:4326:13', 'EPSG:4326:14', 'EPSG:4326:15', 'EPSG:4326:16', 'EPSG:4326:17', 'EPSG:4326:18', 'EPSG:4326:19', 'EPSG:4326:20', 'EPSG:4326:21' ], tilingScheme: new Cesium.GeographicTilingScheme({ // 设置为 GeographicTilingScheme numberOfLevelZeroTilesX: 2, numberOfLevelZeroTilesY: 1 }) }); viewer.imageryLayers.addImageryProvider(wmtsprovider); ``` #### 关键点解析 1. **`tilingScheme` 参数**: 默认情况下,Cesium 使用 `WebMercatorTilingScheme`,对应于 EPSG:3857 投影。为了支持 EPSG:4326 投影,需要将 `tilingScheme` 设置为 `Cesium.GeographicTilingScheme`[^2]。 2. **`tileMatrixSetID` 参数**: 必须明确指定为 `'EPSG:4326'`,以确保瓦片服务按照正确的投影加载[^3]。 3. **`tileMatrixLabels` 参数**: 需要提供与瓦片层级对应的标签列表,例如 `'EPSG:4326:0'` 到 `'EPSG:4326:21'`,以匹配 GeoServer 的瓦片矩阵定义。 4. **`numberOfLevelZeroTilesX` 和 `numberOfLevelZeroTilesY` 参数**: 定义了第 0 层级的瓦片数量。这些值通常由瓦片服务提供商指定,或者可以根据需求调整。 通过以上配置,可以成功加载 EPSG:4326 格式的瓦片地图。 ### 注意事项 - 如果地图显示异常或无法加载,请检查 `url` 是否正确以及服务器是否支持指定的 `tileMatrixSetID`。 - 确保 GeoServer 或其他瓦片服务已正确配置 EPSG:4326 投影的支持。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值