文章目錄
- 前言
- 一、開發環境
- 二、具體思路
- 1.gdal-rasterIO
- 2.objectarx-自定義物體
- 3.坐標轉換
- 4.呼叫方法
前言
受制于AutoCAD中RasterImage物件的限制,原生CAD環境中加載大型檔案的影像時會例外卡頓,本文演示如何在AutoCAD中結合gdal加載幾十上百G的tif和WMS/TMS/WTMS發布的影像服務,
全球縮略圖

縮放至帝都

一、開發工具和環境
本次采用objectarx2020(64位)+vs2017+gdal3.14環境
objectarx2020可在autodesk官網下載
gdal開發環境推薦下載地址
https://www.gisinternals.com/release.php
二、具體思路
1.gdal RaterIO
關于rasterIO,gdal大神李民錄已經寫得很詳細,具體參考
https://blog.csdn.net/liminlu0314/article/details/7072224
raterIO可以打開WMS/WMTS/TMS/geogiff中指定位置的RGB資料
2.objectarx自定義物體
在cad自定義物體多載subworldDraw時根據當前螢屏范圍用gdal中的rasterIO方法去請求獲取RGB繪制資訊塊
在請求資料后根據指定長寬即可在CAD自定義物體中呼叫mode->rawGeometry()->image(....)方法繪制
CAD在View大小發生改變時即重新根據范圍去請求重繪圖片即可,最后結果是根據當前顯示范圍大小加載不同層級的影像,實際坐標與影像坐標1:1匹配,
3.坐標轉換
CAD螢屏坐標獲取方法
void ImageIOThread::getScreenCorners(AcGePoint2d& ptLeftLower, AcGePoint2d& ptRightUpper)
{
CRect rc;
CView* pCurView = acedGetAcadDwgView();
pCurView->GetClientRect(&rc);
CPoint ptTopLeft = rc.TopLeft();
CPoint ptBottomRight = rc.BottomRight();
acedDwgPoint pt1, pt2;
acedCoordFromPixelToWorld(ptTopLeft, pt1);
acedCoordFromPixelToWorld(ptBottomRight, pt2);
ptLeftLower.x = pt1[0];
ptLeftLower.y = pt2[1];
ptRightUpper.x = pt2[0];
ptRightUpper.y = pt1[1];
}
通過當前螢屏坐標去計算對應在Image中對應的行列號,這里需要注意的是WMS等服務采用的是EPSG3857即偽墨卡托托影,實際使用程序中需要將當前坐標轉至經緯度后再將經緯度轉換成 3857,具體轉換方法可參考李民錄blog,也可用proj庫進行坐標轉換,各地不同坐標系定義不同橢球引數或用4引數/7引數進行轉換,
4.呼叫方法

呼叫示例:
鏈接:https://pan.baidu.com/s/17xG5Sh1rhndPqq5fqizZqg
提取碼:bb7g
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/125955.html
標籤:其他
