arcgis wmts 和天地图 服务叠加的偏移问题解决

首先直接说问题本质:

图层分辨率计算方式不一致,

arcgis 通常有两个分辨率矩阵:

天地图通常只有一个:

 

综合来看上面的两个服务 arcgis  有一个96dpi和90.7dpi( 25.4 / 0.28)的瓦片矩阵,  如果用90.7得当然不能和天地图96dpi得数据对得上, 有两种解决方法:

1:  不用arcgis 90.7dpi得矩阵, 用96的, 这种需要切片的时候设定

2:  使用90.7dpi的矩阵,但是显示的时候转成真实分辨率 也就是ScaleDenominstor 转分辨率, 即比例尺转分辨率

但是比例尺转分辨率跟椭球和dpi都相关

有以下转换函数:

	//地球的半径
	double m_dblEarthRadius; //地球半径  天地图请用6378137, arcgis服务请用6371000.7900074287815054264449
	//PI圆周率
	double m_dblPI; //3.1415926....
	//DPI屏幕分辨率 像素/英寸 (Point/Inch)
	double m_dblDPI;//96 或者90
	//英寸/米
	double m_dblInchPerMeter; //0.02539999918
	//是否是经纬度单位
	bool m_bDegreeUnit; // web墨卡托用false, cscg2000用true
	//分辨率
	double m_dblResolution; // 输入参数
	//比例尺
	double m_dblScale; //输入参数
	
	//从分辨率计算出比例尺
	double Scale()
	{
		double dblRes = m_dblResolution;
		//如果是度,经纬度则换算成M单位。
		if(m_bDegreeUnit)
			dblRes = m_dblEarthRadius * m_dblResolution * m_dblPI / 180.0;
		
		//一个像素的M大小
		//double dblInch = m_dblInchPerMeter * (1.0 / dblDPI);
		double dblM = m_dblInchPerMeter / m_dblDPI;
		
		//计算比例尺分母
		m_dblScale = dblRes  / dblM;
		return m_dblScale;
	}


	//从比例尺计算出分辨率
	double Resolution()
	{
		//一个像素的M大小
		//double dblInch = m_dblInchPerMeter * (1.0 / dblDPI);
		double dblM = m_dblInchPerMeter / m_dblDPI;
		//从屏幕分辨率计算实际长度。
		double dblRealLen = dblM * m_dblScale;
	
		//如果是度则需要转换。
		if(m_bDegreeUnit)
			dblRealLen = dblRealLen / (m_dblEarthRadius * m_dblPI / 180);
		
		m_dblResolution = dblRealLen;
		return m_dblResolution;
	}	

	//计算arcgis分辨率
	m_dblEarthRadius= 6371000.7900074287815054264449;
	m_dblPI= 3.14159265358979323846;
	m_dblDPI=25.4 / 0.28;
	m_dblInchPerMeter= 0.02539999918
	m_bDegreeUnit = true; // web墨卡托用false, cscg2000用true
	m_dblScale = 944940.476190;
	m_dblResolution = Resolution();
	//计算天地图分辨率
	m_dblEarthRadius= 6378137
	m_dblPI= 3.14159265358979323846;
	m_dblDPI= 96;
	m_dblInchPerMeter= 0.02539999918
	m_bDegreeUnit = true;
	m_dblScale = 944940.476190;
	m_dblResolution = Resolution();

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值