1.创建新图层,打开图层
//创建新图层
double m_Lon,m_Lat;
IMoDataConnectionPtr pMoCon;
IMoTableDescPtr desc;
IMoPointPtr point;
ADOTable1->First();
pMoCon=(IDispatch*)CreateOleObject("MapObjects2.DataConnection");
desc=(IDispatch*)CreateOleObject("MapObjects2.TableDesc");
pMoCon->Database=WideString(" c:\\gis\\shp\\beijinmap"); //设置图层目录
if(pMoCon->Connect())
{
//创建新图层,设置名称、类型及字段。
desc->set_FieldCount(6);
desc->set_FieldType(0,moString);
desc->set_FieldName(0,WideString("ID"));
desc->set_FieldLength(0,5);
desc->set_FieldType(1,moString);
desc->set_FieldName(1,WideString("AID"));
desc->set_FieldLength(1,10);
desc->set_FieldType(2,moString);
desc->set_FieldName(2,WideString("BID"));
desc->set_FieldLength(2, 10);
desc->set_FieldType(3,moString);
desc->set_FieldName(3,WideString("CID"));
desc->set_FieldLength(3, 3);
desc->set_FieldType(4,moString);
desc->set_FieldName(4,WideString("DID"));
desc->set_FieldLength(4, 8);
desc->set_FieldType(5,moString);
desc->set_FieldName(5,WideString("FLAG"));
desc->set_FieldLength(5,3);
//设置图层的记录集
IMoGeoDatasetPtr geoDataset;
geoDataset=pMoCon->AddGeoDataset(WideString("水系层"),moShapeTypePoint,desc);
layer=(IDispatch*)CreateOleObject("MapObjects2.MapLayer");
layer->set_GeoDataset(geoDataset);
IMoRecordsetPtr recs(layer->Records);
point=(IDispatch*)CreateOleObject("MapObjects2.Point");
for(int i=1;i<=60;i++) //写记录数
{
recs->AddNew();
String ID=ADOTable1->FieldByName("ID")->AsString;
.....
point->set_X(StrToFloat(ADOTable1->FieldByName("LONG")->AsString));
point->set_Y(StrToFloat(ADOTable1->FieldByName("LAT")->AsString));
recs->Fields->Item(TVariant("Shape"))->set_Value((TVariant)(IDispatch*)point);
recs->Fields->Item(TVariant("ID"))->set_Value((TVariant)ID);
recs->_Update();
ADOTable1->Next();
}
recs->StopEditing();
//--------------------------------------------------------------------
Map1->Layers->Add(layer);
Map1->CenterAt( point->get_X(),point->get_Y());
}
}
2.放大,缩小,全图,漫游
if (ZoomInBtn->Down)
{
IMoRectanglePtr trackRect = Map1->TrackRectangle();
Map1->ControlInterface->Extent = trackRect;
Map1->CenterAt(trackRect->Center->X,trackRect->Center->Y);
Map2->ControlInterface->Extent=Map2->ControlInterface->Extent;
}
if (ZoomOutBtn->Down)
{
IMoRectanglePtr extRect = Map1->ControlInterface->Extent;
extRect->ScaleRectangle(1.5);
Map1->ControlInterface->Extent = extRect;
Map2->ControlInterface->Extent=Map2->ControlInterface->Extent;
}
if (PanBtn->Down)
{
Map1->ControlInterface->Pan();
Map2->ControlInterface->Extent=Map2->ControlInterface->Extent;
}
if (FullExtentBtn->Down)
{
IMoRectanglePtr fullExt = Map1->FullExtent;
Map1->ControlInterface->Extent = fullExt;
Map2->ControlInterface->Extent=Map2->ControlInterface->Extent;
}
3.点选择
IMoPointPtr pt,shape;
IMoMapLayerPtr layer;
layer=(IDispatch*)CreateOleObject("MapObjects2.MapLayer");
layer=Map1->Layers->Item(TVariant(0));
pt=Map1->ToMapPoint(X,Y); //mousedown获取的坐标
g_Select=layer->SearchByDistance(pt,0.0015,WideString(""));
或
n_Select=layer->SearchExpression(WideString("ID ='"+value+"' AND NameID
='"+Namevalue+"'"));
4.对图层rend。
就是对图层上得symbol赋予自定义的颜色,字符等。
IMoValueMapRendererPtr rd;
IMoLabelRendererPtr label;
IMoGroupRendererPtr layer_grouprend;
IMoStringsPtr strings = (IDispatch*)CreateOleObject("MapObjects2.Strings");
rst->MoveFirst();
//设置rend层,注意如果keyword值相同,将只取其中一个
while (! bool(rst->EOF_))
{
String strValue=rst->Fields->Item(TVariant(keyword))->ValueAsString;
strings->Add(WideString(strValue));
rst->MoveNext();
j++;
}
rd->Field = WideString(keyword);//rend层和layer层对应的唯一属性
rd->SymbolType=moPointSymb