免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 3626|回复: 1
收起左侧

坐标转换 坐标系是GIS系统的基石,正确设置坐标系是系统成败的关键。

[复制链接]

2072

主题

100000万

铜板

363

好友

地信专家组

每一次的分离都是为了下一次的相聚

Rank: 14Rank: 14Rank: 14Rank: 14

积分
17622

精华勋章宣传勋章爱心勋章组织勋章地信元老灌水勋章荣誉会员勋章活跃勋章贡献勋章

发表于 2009-11-15 16:27 | 显示全部楼层 |阅读模式
坐标转换 坐标系是GIS系统的基石,正确设置坐标系是系统成败的关键。
在MapX开发中需要特别注意地图坐标系问题,MapX地图坐标系分为地图显示坐标系和内部计算坐标系,两者互为独立,在GIS应用开发中根据应用需要设置好这两种坐标系非常重要,因为坐标系一方面影响软件系统的内部坐标处理,另一方面影响地图的外观显示。Map对象的坐标系及投影通过CoordSys对象的Set方法定义:
  Set(Type, [Datum], [Units], [OriginLongitude], [OriginLatitude],
   [StandardParallelOne], [StandardParallelTwo], [Azimuth], [ScaleFactor],
   [FalseEasting], [FalseNorthing], [Range], [Bounds], [AffineTransform])
其中主要参数:Type表示投影类型,Type为1时地图坐标以经纬度表示,后面都为可选参数,其中Datum为地球基准面;Units为坐标单位,如Units为7表示以米为单位;OriginLongitude、OriginLatitude分别为起始经度和纬度;StandardParallelOne、StandardParallelTwo为第一、第二标准纬线,该参数与地图投影相关。
通过设置Map对象的DisplayCoordSys和NumericCoordSys属性返回的CoordSys对象,就可设定地图显示坐标系和内部计算坐标系。举例如下:
   procedure TMain.DefineMapParam();
   var
    MapDatum: Variant;//地球基准面
   begin 
   try
MapDatum := CreateOleObject('MapX.Datum.4'); //建立基准面对象
//定义北京54坐标系基准面
// (Ellipsoid, ShiftX, ShiftY, ShiftZ, RotateX, RotateY, RotateZ, ScaleAdjust, PrimeMeridian)
MapDatum.set(3, 24, -123, -94, -0.02, 0.25, 0.13, 1.1, 0);
//定义北京54坐标系经纬度作为内部计算坐标系
Map1.NumericCoordSys.Set_(1, MapDatum);
//定义北京54坐标系30度标准纬线麦卡托投影作为显示坐标系,单位为米
Map1.DisplayCoordSys.Set_(26,MapDatum,7,0,0,30);
finally
VarClear(MapDatum);
end;
坐标系是GIS系统的基石,正确设置坐标系是系统成败的关键。  
非地球坐标系如何定义!!!请看!!!!!!!
设置语法:
OBJECT.Set Type, [Datum], [Units], [OriginLongitude], [OriginLatitude],
[StandardParallelOne], [StandardParallelTwo], [Azimuth], [ScaleFactor],
[FalseEasting], [FalseNorthing], [Range], [Bounds], [AffineTransform]
其中type是必须的,其他的根据type指定投影方式的需要进行设置。
type:坐标系种类,定义了一些常量,如0表示非地理坐标系,1表示经纬度坐标系,可参看帮助
[Datum]:Datum对象表示地球形状与方位,可以理解为投影。我们绝大多数时候都是利用mapinfow.prj中记录的Datum,而不会自己去定义一套。
[units]:单位,7表示米,1表示公里,0表示英里。参见帮助
[Bounds]:对非地理坐标系是必需的参数,其他坐标系可选。表示坐标系区域的外框
可以参看帮助中Summary of Parameters Used by Coordinate Systems部分内容确定某种投影所必须参数。
请参照下面一段代码,希望能对大家有所帮助。
var
MapBounds: CMapxRectangle;
begin
// CurrentCoordsys := CreateOleObject('Mapx.Coordsys.3') as CMapXCoordsys;
CurrentCoordsys := CoCoordsys.Create;
TVarData(VEmpty).VType := VT_ERROR;
TVarData(VEmpty).VInteger := DISP_E_PARAMNOTFOUND;
MapBounds := CoRectangle.Create;
MapBounds.Set_(-1000000, -1000000, 1000000, 1000000);
// set coordinate system to Non_earth Metres.
CurrentCoordsys.Set_(0, vEmpty, 7, vEmpty, vEmpty, vEmpty,
vEmpty, vEmpty, vEmpty, vEmpty, vEmpty, vEmpty, MapBounds, vEmpty);
Map1.OleObject.NumericCoordSys := CurrentCoordsys;
Map1.OleObject.DisplayCoordsys := Map1.oleObject.NumericCoordsys;
付上VC代码 请看!!!
一般项目用非地理坐标即可.现将VC版本贴上:
int CFileExportView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
if (!m_ctrlMapX.Create(NULL, WS_VISIBLE, CRect(0,0,100,100),
this,IDC_MAP))
return -1;
CMapXRectangle Rect;
CMapXCoordSys CurrentCoordsys;
COptionalVariant vEmpty;
VARIANT MapUnit,MapBounds;
if(!Rect.CreateDispatch(Rect.GetClsid())
//!CurrentCoordsys.CreateDispatch(CurrentCoordsys.GetClsid())) {
TRACE0("Could not Create object");
return -1;
}
try {
MapUnit.vt=VT_I4;
MapUnit.lVal=miUnitMeter;
Rect.Set(-1000000, -1000000, 1000000, 100000);
MapBounds.vt=VT_DISPATCH;
MapBounds.pdispVal=Rect.m_lpDispatch;
MapBounds.pdispVal->AddRef();
CurrentCoordsys.Set(miNonEarth, vEmpty,MapUnit, vEmpty, vEmpty, vEmpty,
vEmpty, vEmpty, vEmpty, vEmpty, vEmpty, vEmpty,MapBounds, vEmpty);
m_ctrlMapX.SetNumericCoordSys(CurrentCoordsys.m_lpDispatch);
m_ctrlMapX.SetDisplayCoordSys(m_ctrlMapX.GetNumericCoordSys().m_lpDispatch);
m_ctrlMapX.SetGeoSet("E:\\JHPrograme\\GST\\Temp.gst");
CreateCustomTool();
m_ctrlMapX.GetTitle().SetVisible(false);
} catch (COleDispatchException *e) {
e->ReportError();
e->Delete();
} catch (COleException *e) {
e->ReportError();
e->Delete();
}
return 0;
}

0

主题

2632

铜板

0

好友

教授级高工

Rank: 12Rank: 12Rank: 12

积分
1542
发表于 2025-1-9 16:15 | 显示全部楼层
探矿者软件可以提高矿体的命中率,减少找矿的成本和难度,主要功能:数据管理、二维制图、三维建模、储量估算、三维立体预测等,有需要免费试用可以联系负责人邓帅15377311476(微信同号),软件针对单位或者企业试用,不面向个人试用
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表