⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mapxsampview.cpp

📁 需要先下载安装mapx
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			try {
				ds.Add(miDataSetODBC, SourceData, "ODBCNormalAuto");
			}
			catch (COleDispatchException *e) {
				e->ReportError();
				e->Delete();
			}
			catch (COleException *e) {
				e->ReportError();
				e->Delete();
			}

		}
		else {
			ds.Add(miDataSetODBC, SourceData, COleVariant("ODBCNormalDynamic"), COleVariant("STATE"), 
				COptionalVariant(), COleVariant("USA"), COptionalVariant(), 
				COleVariant((long)m_bODBCDynamic));
		}
	}
	catch (COleDispatchException *e) {
		e->ReportError();
		e->Delete();
	}
	catch (COleException *e) {
		e->ReportError();
		e->Delete();
	}
}

void CMapxSampleView::OnOdbcNormalFields() 
{
	CMapXDatasets ds = m_ctrlMapX.GetDatasets();
	
	short Type;
	VARIANT SourceData;
	VARIANT Name;
	VARIANT GeoField;
	VARIANT SecondaryGeoField;
	VARIANT BindLayerName;
	VARIANT Fields;
	CString strName= "ODBCNormalFields";

	// will not be used
	SecondaryGeoField.vt = VT_ERROR;
	SecondaryGeoField.scode = DISP_E_PARAMNOTFOUND;

	// we know we want to bind to STATE col
	GeoField.vt = VT_BSTR;
	GeoField.bstrVal = CString("STATE").AllocSysString();

	// and the USA layer
	BindLayerName.vt = VT_BSTR;
	BindLayerName.bstrVal = CString("USA").AllocSysString();

	// limit fields to the geocolumns and 1 attribute cols
	CMapXFields fields;
	fields.CreateDispatch(fields.GetClsid());
	fields.Add("STATE");
	fields.Add("ORDER_AMT");
	
	Fields.vt = VT_DISPATCH;
	Fields.pdispVal = fields.m_lpDispatch;

	// set the name of our dataset
	Name.vt = VT_BSTR;
	Name.bstrVal = strName.AllocSysString();

	CMapXODBCQueryInfo ODBCParam;

	try {
		// set up source data - no error checking on alloc
		Type = miDataSetODBC;

		ODBCParam.CreateDispatch("MapX.ODBCQueryInfo.4");

		ODBCParam.SetConnectString("ODBC;");
		ODBCParam.SetSqlQuery("Select * From US_CUST");
		// this assumes you have an Access DataSource called MapStatsV4 pointing
		// to the MapStats.mdb that ships with MapX.  If the DataSource param is left
		// out, the user will be prompted for an ODBC datasource. 
		ODBCParam.SetDataSource("MapStatsV4");

		SourceData.vt = VT_DISPATCH;
		SourceData.pdispVal = ODBCParam.m_lpDispatch;

		ds.Add(Type, SourceData, Name, GeoField, SecondaryGeoField, BindLayerName, Fields, COleVariant((long)m_bODBCDynamic));
	}
	catch (COleDispatchException *e) {
		e->ReportError();
		e->Delete();
	}
	catch (COleException *e) {
		e->ReportError();
		e->Delete();
	}
}

void CMapxSampleView::OnOdbcXybind() 
{
	try {
		CMapXODBCQueryInfo ODBCParam;
		CMapXBindLayer bindLayer;
		CMapXDatasets ds = m_ctrlMapX.GetDatasets();
		COleVariant SourceData;
		COleVariant BindLayer;

		// this assumes you have an Access DataSource called MapStatsV4 pointing
		// to the MapStats.mdb that ships with MapX.  If the DataSource param is left
		// out, the user will be prompted for an ODBC datasource. 
		ODBCParam.CreateDispatch("MapX.ODBCQueryInfo.4");
		ODBCParam.SetConnectString("ODBC;");
		ODBCParam.SetSqlQuery("select * From US_CUST");
		ODBCParam.SetDataSource("MapStatsV4");

		SourceData.vt = VT_DISPATCH;
		SourceData.pdispVal = ODBCParam.m_lpDispatch;

		// now set up binding
		bindLayer.CreateDispatch(bindLayer.GetClsid());
		bindLayer.SetLayerName("Customers");
		bindLayer.SetRefColumn1("X");
		bindLayer.SetRefColumn2("Y");
		bindLayer.SetLayerType(miBindLayerTypeXY);

		BindLayer.vt = VT_DISPATCH;
		BindLayer.pdispVal = bindLayer.m_lpDispatch;
		BindLayer.pdispVal->AddRef();

		ds.Add(miDataSetODBC, SourceData, COleVariant("ODBCXYBind"), COleVariant("LNAME"), 
				COptionalVariant(), BindLayer, COptionalVariant(), COptionalVariant());
	}
	catch (COleDispatchException *e) {
		e->ReportError();
		e->Delete();
	}
	catch (COleException *e) {
		e->ReportError();
		e->Delete();
	}
}

void CMapxSampleView::OnOdbcZipcode() 
{
	CMapXDatasets ds = m_ctrlMapX.GetDatasets();
	
	short Type;
	VARIANT SourceData;
	VARIANT Name;
	VARIANT GeoField;
	VARIANT SecondaryGeoField;
	VARIANT BindLayer;
	CMapXBindLayer bindLayer;
	VARIANT Fields;
	CString strName= "ODBCZipDataset";

	// will not be used
	SecondaryGeoField.vt = VT_ERROR;
	SecondaryGeoField.scode = DISP_E_PARAMNOTFOUND;

	// use zipcode as unique id in new layer
	GeoField.vt = VT_BSTR;
	GeoField.bstrVal = CString("ZIP").AllocSysString();

	// use all fields with defaults
	Fields.vt = VT_ERROR;
	Fields.scode = DISP_E_PARAMNOTFOUND;

	// set the name of our dataset
	Name.vt = VT_BSTR;
	Name.bstrVal = strName.AllocSysString();

	CMapXODBCQueryInfo ODBCParam;

	try {
		// set up source data - no error checking on alloc
		Type = miDataSetODBC;

		ODBCParam.CreateDispatch("MapX.ODBCQueryInfo.4");

		ODBCParam.SetConnectString("ODBC;");
		ODBCParam.SetSqlQuery("Select * From US_CUST");
		// this assumes you have an Access DataSource called MapStatsV4 pointing
		// to the MapStats.mdb that ships with MapX.  If the DataSource param is left
		// out, the user will be prompted for an ODBC datasource. 
		ODBCParam.SetDataSource("MapStatsV4");

		SourceData.vt = VT_DISPATCH;
		SourceData.pdispVal = ODBCParam.m_lpDispatch;

		// now set up binding
		bindLayer.CreateDispatch(bindLayer.GetClsid());
		bindLayer.SetReferenceLayer("US 5 Digit Zipcode Centers");
		bindLayer.SetLayerName("CustByZip");
		bindLayer.SetRefColumn1("ZIP");
		bindLayer.SetLayerType(miBindLayerTypePointRef);

		BindLayer.vt = VT_DISPATCH;
		BindLayer.pdispVal = bindLayer.m_lpDispatch;

		ds.Add(Type, SourceData, Name, GeoField, SecondaryGeoField, BindLayer, Fields, COleVariant((long)m_bODBCDynamic));
	}
	catch (COleDispatchException *e) {
		e->ReportError();
		e->Delete();
	}
	catch (COleException *e) {
		e->ReportError();
		e->Delete();
	}
}

void CMapxSampleView::OnOdbcDynamic() 
{
	m_bODBCDynamic = !m_bODBCDynamic;
}

void CMapxSampleView::OnUpdateOdbcDynamic(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_bODBCDynamic);
	
}

void CMapxSampleView::OnUpdateOdbcXybind(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(!m_bODBCDynamic);
	
}

void CMapxSampleView::OnUpdateOdbcZipcode(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(!m_bODBCDynamic);
	
}

void CMapxSampleView::OnMapAddunbounddata() 
{
	try {
		COleVariant vtFieldType ((long)miTypeNumeric);
		COleVariant vtFieldAggr ((long)miAggregationSum);
		CMapXFields fields;

		fields.CreateDispatch (fields.GetClsid());
		fields.Add("STATE", "STATE");
		fields.Add(COleVariant("POP"), COleVariant("POP"), vtFieldAggr, vtFieldType );

		VARIANT vtFields;
		vtFields.vt = VT_DISPATCH;
		vtFields.pdispVal = fields.m_lpDispatch;

		// and, finally, make the request to add the "unbound dataset"
		// this will trgiger the request to fetch the data
		CMapXDataset dataSet = m_ctrlMapX.GetDatasets().Add(miDataSetUnbound,COptionalVariant(),
			COleVariant("UnboundData"), COleVariant(1L), COptionalVariant(), COleVariant("USA"),
			vtFields, COptionalVariant());
	}  // end-of-try
	catch (COleDispatchException *e) {
		e->ReportError();
		e->Delete();
	}
	catch (COleException *e) {
		e->ReportError();
		e->Delete();
	}

}

void CMapxSampleView::OnViewProjection() 
{
	try {
		VARIANT vHelpFile, vHelpID;		// mark as optional since we don't have a helpfile
		vHelpFile.vt = VT_ERROR;
		vHelpFile.scode = DISP_E_PARAMNOTFOUND;
		vHelpID.vt = VT_ERROR;
		vHelpID.scode = DISP_E_PARAMNOTFOUND;

		CMapXCoordSys csys = m_ctrlMapX.GetDisplayCoordSys();
		csys.PickCoordSys(vHelpFile, vHelpID);
		
		m_ctrlMapX.SetNumericCoordSys(csys);
	}
	catch (COleDispatchException *e) {
		e->ReportError();
		e->Delete();
	}
	catch (COleException *e) {
		e->ReportError();
		e->Delete();
	}
}

void CMapxSampleView::OnDatasestFromLayer() 
{
	try {
		CMapXLayer layer = m_ctrlMapX.GetLayers().Item("USA");

		VARIANT vtLayer;
		vtLayer.vt = VT_DISPATCH;
		vtLayer.pdispVal = layer.m_lpDispatch;

		CMapXDataset dataSet = m_ctrlMapX.GetDatasets().Add(miDataSetLayer, vtLayer, "USA Layer");
	}  // end-of-try
	catch (COleDispatchException *e) {
		e->ReportError();
		e->Delete();
	}
	catch (COleException *e) {
		e->ReportError();
		e->Delete();
	}
}

void CMapxSampleView::OnMapRemovealldatasets() 
{
	try {
		CMapXDatasets ds = m_ctrlMapX.GetDatasets();
		ds.RemoveAll();
	}
	catch (COleDispatchException *e) {
		e->ReportError();
		e->Delete();
	}
	catch (COleException *e) {
		e->ReportError();
		e->Delete();
	}
}

void CMapxSampleView::OnUpdateMapRemovealldatasets(CCmdUI* pCmdUI) 
{
	try {
		CMapXDatasets ds = m_ctrlMapX.GetDatasets();
		pCmdUI->Enable(ds.GetCount() > 0);
	}
	catch (COleDispatchException *e) {
		e->ReportError();
		e->Delete();
	}
	catch (COleException *e) {
		e->ReportError();
		e->Delete();
	}
}

#define SA_ROWS 10
#define SA_COLS 2

static char *g_array[SA_ROWS][SA_COLS] = 
{
	"NY", "10",
	"NY", "40",
	"MA", "90",
	"CA", "15",
	"RI", "110",
	"OH", "3",
	"WY", "55",
	"TX", "19",
	"NV", "23",
	"NV", "34"
};

// you can get your data from anywhere
// this example uses a bunch of hardcoded strings
// to create the variants from.
void CMapxSampleView::OnMapAddsafearraydataset() 
{
	// construct a safearray of column numbers (could use names instead)
	SAFEARRAY FAR* psa=NULL; 
	SAFEARRAYBOUND rgsabound[2]; 
	long ix[2];
	VARIANT vtArray;

	VariantInit(&vtArray);

	rgsabound[0].lLbound = 1; 
	rgsabound[0].cElements = SA_ROWS; 
	rgsabound[1].lLbound = 1; 
	rgsabound[1].cElements = SA_COLS; 

	psa = SafeArrayCreate(VT_VARIANT, 2, rgsabound); 
	if(psa == NULL){ 
		return;
	}
	for (int r=0; r < SA_ROWS; r++) {
		for (int c=0; c < SA_COLS; c++) {
			ix[0]=r+1;
			ix[1]=c+1;
			if (c==0) { // first col is state names
				COleVariant vt(g_array[r][c]);
				SafeArrayPutElement(psa, ix, &vt);
			}
			else if (c==1) { // second col we want as numbers
				COleVariant vt(atol(g_array[r][c]));
				SafeArrayPutElement(psa, ix, &vt);
			}
		}
	}

	// put array in field param
	vtArray.vt = VT_ARRAY | VT_VARIANT;
	vtArray.parray = psa;
	
	try {
		CMapXLayer layer = m_ctrlMapX.GetLayers().Item("USA");
		CMapXDataset dataSet = m_ctrlMapX.GetDatasets().Add(miDataSetSafeArray, vtArray, "USA Array Dataset");

	}  // end-of-try
	catch (COleDispatchException *e) {
		e->ReportError();
		e->Delete();
	}
	catch (COleException *e) {
		e->ReportError();
		e->Delete();
	}

	VariantClear(&vtArray); // will free safearray
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -