/*
MapInfo Products Knowledge Base
Product: MapX
Version: 5.x
Platform: Not Platform Related
Category: VC++ Code Samples
Summary:
Extract data from a layer using the keyvalue/keyfield properties.
Question:
How can the keyvalue/keyfield properties be used to extract data from a layer in C++?
Answer:
Try this code:
*/
// Counters
long numFtrs;
long numFlds;
// message buffer
CString Buffer;
CMapXLayer lyr;
CMapXFeatures ftrs;
CMapXDataset ds;
// Create a variant for the layer
VARIANT vLyr;
vLyr.vt = VT_DISPATCH;
// add the layer
lyr = m_ctrlMapX.GetLayers().Add(LPCTSTR( " USA " ), 1 );
vLyr.pdispVal = lyr;
// create the dataset
ds = m_ctrlMapX.GetDatasets().Add(miDataSetLayer, vLyr);
// init the counters
numFtrs = lyr.AllFeatures().GetCount();
numFlds = ds.GetFields().GetCount();
// build and save the feature set
// faster than rebuilding the feature every time through the loop
ftrs = lyr.AllFeatures();
// loop through the features
for ( long i = 1 ; i <= numFtrs; i ++ )
{
//reset the buffer
Buffer = "";
//loop through the fields
for (long j = 1; j <= numFlds; j++)
{
//set the keyfield
lyr.SetKeyField(LPCTSTR(ds.GetFields().Item(j).GetName()));
//get the keyvalue for that field add it to the buffer
Buffer += ftrs.Item(i).GetKeyValue();
//add formating
Buffer += " ";
}
//display all the information for the feature
AfxMessageBox(LPCTSTR(Buffer));
}