判断MapCtrl加载数据类型(栅?矢<点?线?面?>) 

在MapControl中可以加载栅格图像和矢量数据,栅格数据里面包含的波段数据等特征,矢量类型又分点、线和面等,本文就是介绍怎么判断加载的数据类型,是栅格还是矢量,如果是矢量是点还线等。
首先判断栅格和矢量
IDatasetPtr ipDataset;
ipGxDataset->get_Dataset(&ipDataset);//获得该对象的Dataset
esriDatasetType dstType;
ipDataset->get_Type(&dstType);
ILayerPtr ipLayer;
if (dstType == esriDTRasterDataset) //如果是栅格数据
{
IRasterLayerPtr ipRstLyr(CLSID_RasterLayer);
IRasterDatasetPtr ipRstDst = ipDataset;
ipRstLyr->CreateFromDataset(ipRstDst);
ipRstLyr->put_Visible(VARIANT_TRUE);
ipLayer = ipRstLyr;
ISpatialReferencePtr ipSpaRef;
IGeoDatasetPtr ipGeoDst = ipRstLyr;
ipGeoDst->get_SpatialReference(&ipSpaRef);
m_pMapCtrl->SetRefSpatialReference(ipSpaRef);
}
else if (dstType == esriDTFeatureClass) //如果是失量数据
{
IFeatureClassPtr ipFeatureClass(ipDataset);//接口查询;
ipFeatureLayer->putref_FeatureClass(ipFeatureClass); //将要素类放到要素层中
ipFeatureLayer->put_Visible(VARIANT_TRUE);//设置要素层的属性,是否可见;
ipLayer = ILayerPtr(ipFeatureLayer);//接口转换
}
ipGxDataset->get_Dataset(&ipDataset);//获得该对象的Dataset
esriDatasetType dstType;
ipDataset->get_Type(&dstType);
ILayerPtr ipLayer;
if (dstType == esriDTRasterDataset) //如果是栅格数据
{
IRasterLayerPtr ipRstLyr(CLSID_RasterLayer);
IRasterDatasetPtr ipRstDst = ipDataset;
ipRstLyr->CreateFromDataset(ipRstDst);
ipRstLyr->put_Visible(VARIANT_TRUE);
ipLayer = ipRstLyr;
ISpatialReferencePtr ipSpaRef;
IGeoDatasetPtr ipGeoDst = ipRstLyr;
ipGeoDst->get_SpatialReference(&ipSpaRef);
m_pMapCtrl->SetRefSpatialReference(ipSpaRef);
}
else if (dstType == esriDTFeatureClass) //如果是失量数据
{
IFeatureClassPtr ipFeatureClass(ipDataset);//接口查询;
ipFeatureLayer->putref_FeatureClass(ipFeatureClass); //将要素类放到要素层中
ipFeatureLayer->put_Visible(VARIANT_TRUE);//设置要素层的属性,是否可见;
ipLayer = ILayerPtr(ipFeatureLayer);//接口转换
}
然后判断矢量的类型
esriGeometryType CMapInfoTool::GetLayerGeoType(ILayerPtr ipLyr)
{
IFeatureLayerPtr ipFeaLyr = ipLyr;
IFeatureClassPtr ipFeaClass;
ipFeaLyr->get_FeatureClass(&ipFeaClass);
esriGeometryType type;
ipFeaClass->get_ShapeType(&type);
return type;
}
{
IFeatureLayerPtr ipFeaLyr = ipLyr;
IFeatureClassPtr ipFeaClass;
ipFeaLyr->get_FeatureClass(&ipFeaClass);
esriGeometryType type;
ipFeaClass->get_ShapeType(&type);
return type;
}
当然最后可以得到中文的类型名
CString CMapInfoTool::GetGeoTypeName(esriGeometryType geoType)
{
CString szTypeName = "";
switch(geoType)
{
case esriGeometryPoint: {
szTypeName = "点";
break;
}
case esriGeometryPolyline: {
szTypeName = "线";
break;
}
case esriGeometryPolygon: {
szTypeName = "面";
break;
}
case esriGeometryMultipoint:
{
szTypeName = "Multipoint";
break;
}
case esriGeometryLine:
{
szTypeName = "Line";
break;
}
case esriGeometryCircularArc:
{
szTypeName = "Arc";
break;
}
case esriGeometryEllipticArc:
{
szTypeName = "EllipticArc";
break;
}
case esriGeometryEnvelope:
{
szTypeName = "Enavelope";
break;
}
default:
{
break;
szTypeName = "Other";
}
}
return szTypeName;
}
{
CString szTypeName = "";
switch(geoType)
{
case esriGeometryPoint: {
szTypeName = "点";
break;
}
case esriGeometryPolyline: {
szTypeName = "线";
break;
}
case esriGeometryPolygon: {
szTypeName = "面";
break;
}
case esriGeometryMultipoint:
{
szTypeName = "Multipoint";
break;
}
case esriGeometryLine:
{
szTypeName = "Line";
break;
}
case esriGeometryCircularArc:
{
szTypeName = "Arc";
break;
}
case esriGeometryEllipticArc:
{
szTypeName = "EllipticArc";
break;
}
case esriGeometryEnvelope:
{
szTypeName = "Enavelope";
break;
}
default:
{
break;
szTypeName = "Other";
}
}
return szTypeName;
}
