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

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

第一步:部署tif图到geoserver

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

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

geoServer在centos启动_geoServer在centos启动

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

geoServer在centos启动_栅格_02

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

geoServer在centos启动_图层_03

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

<!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,添加数据,geoServer在centos启动_html_04工具箱-》数据管理-》投影 , 发现只能转元素,不知是啥

工具箱-》数据管理-》栅格-》投影栅格 这个好像可以转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右键工具栏勾选地理配准,

geoServer在centos启动_栅格_05

先去掉自动校正,然后点击geoServer在centos启动_html_06在地图上添加控制点,右键x与y填写经纬度,填的经纬度当然是从高德地图上的啦。

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

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

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

 

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

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