开发工具:VC++6.0 & MapObject2.2我现要将世界地图投影成地球的形状,即圆球状。使用如下代码可以实现:CMoProjCoordSys CSMap;
if(!CSMap.CreateDispatch("MapObjects2.ProjCoordSys"))
return;
CSMap.SetType(54019);
VARIANT vt;
vt.vt = VT_DISPATCH;
vt.pdispVal = CSMap;
m_Map.SetCoordinateSystem(vt);但是这样做地图只是固定投影方式,现在想让地球转动起来,我想通过不停的改变投影坐标系的
投影点来实现,该怎么做?另外投影后的经纬度坐标如何转换为原来的-180~180?[email protected]
if(!CSMap.CreateDispatch("MapObjects2.ProjCoordSys"))
return;
CSMap.SetType(54019);
VARIANT vt;
vt.vt = VT_DISPATCH;
vt.pdispVal = CSMap;
m_Map.SetCoordinateSystem(vt);但是这样做地图只是固定投影方式,现在想让地球转动起来,我想通过不停的改变投影坐标系的
投影点来实现,该怎么做?另外投影后的经纬度坐标如何转换为原来的-180~180?[email protected]
创建CMoProjCoordSys,设置其Unit, Projection, GeoCoordSys.
但是有些问题不能解决,如projection如何设置中心子午线,从MAP得来的GeoGoordsys如何附值线CMoProjCoordSys等,请各位大侠帮忙.
正确呀,那是中国与台湾实现了祖国的统一呀.HEHE~~路过,不懂.UPUP
一个shp,它的投影(应该叫CoordinateSystem)是固定的,固有的属性(一对一的关系),
就算你没有设置它的CoordinateSystem类型,m_Map.SetCoordinateSystem(vt)。它的CoordinateSystem是一定的(唯一的一种)。
如果你想用m_Map.SetCoordinateSystem(vt)设置它的CoordinateSystem的话,
必需设为正确的CoordinateSystem,设为其他的CoordinateSystem是不正确的.
当然也可以不设置,因为它是唯一的你的目的是想把 shpA,CoordinateSystem为csA转换为shpB,CoordinateSystem为csB;
Set newShape = ProjCoordsysobject.Transform fromCoordSys, fromShape,
densifyTol, geoTrans
可以做到.还有一个问题是CoordinateSystem的两种类型,
CoordinateSystem有两种类型:ProjCoordsys和GeoCoordsys,这两种Coordsys有联系
一个ProjCoordsys与一个GeoCoordsys对应,这一点对你实现动画非常重要一个GeoCoordsys与一个PrimeMeridian object 对象关联,
通过改变shpA的csA的GeoCoordsys的PrimeMeridian的Longitude属性(哈哈...),
来定义 shpB的csB
由csB,csA,ShpA,用ProjCoordsysobject.Transform fromCoordSys, fromShape
可以得到shpB
//伪代码
ProjCoordsys csA;
csA.settype(54019);
ProjCoordsys csB;
csB.settype(54019);
csB.geocoordsys.PrimeMeridian.Longitude =
csA.geocoordsys.PrimeMeridian.Longitude + 10;//10表示每一次旋转的经线的度数
csB.geocoordsys.Datum.settype(...);//选择一个Datum
shpB= csB.Transform (csA,shpA) ;