<?xml encoding=”UTF-8″>By Balaji Ramamoorthy
Here is a code snippet to convert drawing point to a geo-location and vice-versa in a geo-located drawing. If you are looking for a .Net code sample, please refer to this blog post.
Acad::ErrorStatus es;
AcDbDatabase *pDb =
acdbHostApplicationServices()->workingDatabase();
AcDbObjectId geodataId = AcDbObjectId::kNull;
acdbGetGeoDataObjId(pDb, geodataId);
<span>if</span><span> (geodataId.isNull() == Adesk::kFalse)</span>
<span>{</span>
AcDbTransactionManager *pTM
= pDb->transactionManager();
AcTransaction *pTransaction
= pTM->startTransaction();
AcDbObject *pObj = NULL;
pTransaction->getObject(pObj,
geodataId,
AcDb::kForRead);
AcDbGeoData *pGeoData = AcDbGeoData::cast(pObj);
<span>if</span><span> (pGeoData != NULL)</span>
<span>{</span>
pGeoData->upgradeOpen();
<span>// convert from drawing point to Geolocation</span><span> </span>
AcGePoint3d geoPoint(dblLongitude,
dblLatitude,
dblAltitude);
AcGePoint3d drawingPt = AcGePoint3d::kOrigin;
es = pGeoData->transformFromLonLatAlt(
geoPoint, drawingPt);
<span>// convert from Geolocation to drawing point</span><span> </span>
es = pGeoData->transformToLonLatAlt(
dblDwgX, dblDwgY, dblDwgZ,
dblLongitude, dblLatitude, dblAltitude);
pTM->endTransaction();
<span>}</span>
<span>else</span><span> </span>
pTM->abortTransaction();
<span>}</span>

Leave a Reply