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();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章