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

📄 geodao.cpp

📁 使用VC++程序制作的COM组件是地理信息系统的一个实例
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// GeoDAO.cpp: implementation of the GeoData Access Object classes.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include <stdlib.h>

#include "ComGIS.h"
#include "GeoDAO.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

CGeoDataEngine comGeoDataEngine;	//定义一个全局的地理数据引擎变量

//********************************************************************
//地图符号类函数体
//--------------------------------------------------------------------
CSymbol::CSymbol()
{
}
//********************************************************************
//属性字段类函数体
//--------------------------------------------------------------------
CAttriField::CAttriField()
{
}
//********************************************************************
//属性字段集合类函数体
//--------------------------------------------------------------------
CAttriFieldSet::CAttriFieldSet()
{
}

//********************************************************************
//各种集合类的基类(CBaseSet) 
//--------------------------------------------------------------------
CBaseSet::CBaseSet()
{

}
//--------------------------------------------------------------------
BOOL CBaseSet::Open(CGeoDatabase& db, CString tablename)
{
	m_csTableName = tablename;
	return(comGeoDataEngine.OpenTable(db, m_csTableName, &m_rs));
}
//--------------------------------------------------------------------
void CBaseSet::Close()
{
	m_rs.Close();
}
//--------------------------------------------------------------------
int CBaseSet::GetCount()
{
	return(m_rs.GetRecordCount());
}
//--------------------------------------------------------------------
void CBaseSet::MoveFirst()
{
	m_rs.MoveFirst();
}
//--------------------------------------------------------------------
void CBaseSet::MoveNext()
{
	m_rs.MoveNext();
}
//--------------------------------------------------------------------
void CBaseSet::MovePrev()
{
	m_rs.MovePrevious();
}
//--------------------------------------------------------------------
void CBaseSet::MoveLast()
{
	m_rs.MoveLast();
}
//--------------------------------------------------------------------
BOOL CBaseSet::IsBOF()
{
	return(m_rs.GetBOF());
}
//--------------------------------------------------------------------
BOOL CBaseSet::IsEOF()
{
		return(m_rs.GetEOF());
}
//--------------------------------------------------------------------
BOOL CBaseSet::DeleteOf(long id)
//根据ID号删除一个记录
{
	char buffer[20];
	CString cs = _T("ID_ =");

	_ltoa(id, buffer, 10);
	m_rs.FindFirst(cs + buffer);
	if (!m_rs.GetNoMatch())  return(FALSE);
	m_rs.Delete();
	return(TRUE);
}
//--------------------------------------------------------------------
void CBaseSet::Delete()
//删除当前记录
{
	m_rs.Delete();
}

//********************************************************************
//符号集合类(CSymbolSet) 的函数体
//--------------------------------------------------------------------
CSymbolSet::CSymbolSet()
{
}
//--------------------------------------------------------------------
long CSymbolSet::AddFeature(CSymbol& obj)
//增加符号(一个记录)
{
	COleVariant v;

	m_rs.AddNew();
	comGeoDataEngine.SetSymbolData(m_rs, &obj);
	m_rs.Update();
	v = m_rs.GetField(0L);
	return(v.lVal);
}
//--------------------------------------------------------------------
void CSymbolSet::GetFeature(CSymbol* obj)
//获得当前符号
{
	comGeoDataEngine.GetSymbolData(m_rs, obj);
}
//--------------------------------------------------------------------
BOOL CSymbolSet::GetFeatureOf(long id, CSymbol* obj)
//根据ID号获得符号
{
	char buffer[20];
	CString cs = _T("ID_ =");

	_ltoa(id, buffer, 10);
	m_rs.FindFirst(cs + buffer);
	if (m_rs.GetNoMatch())  return(FALSE);
	GetFeature(obj);
	return(TRUE);
}
//--------------------------------------------------------------------
void CSymbolSet::UpdateFeature(CSymbol& obj)
//更新记录
{
	m_rs.Edit();
	comGeoDataEngine.SetSymbolData(m_rs, &obj);
	m_rs.Update();
}

//********************************************************************
//注记集合类(CLabelSet) 的函数体
//--------------------------------------------------------------------
CLabelSet::CLabelSet()
{
}
//--------------------------------------------------------------------
long CLabelSet::AddFeature(CLabel& obj)
//增加符号(一个记录)
{
	COleVariant v;

	m_rs.AddNew();
	comGeoDataEngine.SetLabelData(m_rs, &obj);
	m_rs.Update();
	v = m_rs.GetField(0L);
	return(v.lVal);
}
//--------------------------------------------------------------------
void CLabelSet::GetFeature(CLabel* obj)
//获得当前符号
{
	comGeoDataEngine.GetLabelData(m_rs, obj);
}
//--------------------------------------------------------------------
BOOL CLabelSet::GetFeatureOf(long id, CLabel* obj)
//根据ID号获得符号
{
	char buffer[20];
	CString cs = _T("ID_ =");

	_ltoa(id, buffer, 10);
	m_rs.FindFirst(cs + buffer);
	if (m_rs.GetNoMatch())  return(FALSE);
	GetFeature(obj);
	return(TRUE);
}
//--------------------------------------------------------------------
void CLabelSet::UpdateFeature(CLabel& obj)
//更新记录
{
	m_rs.Edit();
	comGeoDataEngine.SetLabelData(m_rs, &obj);
	m_rs.Update();
}

//********************************************************************
//点状要素集合类(CPointFeatureSet) 的函数体
//--------------------------------------------------------------------
CPointFeatureSet::CPointFeatureSet()
{
}
//--------------------------------------------------------------------
CPointFeatureSet::~CPointFeatureSet()
{
	m_SymbolSet.Close();
	m_LabelSet.Close();
}
//--------------------------------------------------------------------
BOOL CPointFeatureSet::Open(CGeoDatabase& db, CLayer* pLayer)
{
	m_pLayer = pLayer;
	m_csTableName = pLayer->csName + (LPCTSTR)comPointSuffix;
	if (!comGeoDataEngine.OpenTable(db, m_csTableName, &m_rs))  return(FALSE);

	m_SymbolSet.Open(db, pLayer->csName+(LPCTSTR)comPointSymbolSuffix);
	m_LabelSet.Open(db, pLayer->csName+(LPCTSTR)comPointLabelSuffix);
	return(TRUE);
}
//--------------------------------------------------------------------
long CPointFeatureSet::AddFeature(CPointFeature& obj)
//增加要素(一个记录)
{
	COleVariant v;

	m_rs.AddNew();
	comGeoDataEngine.SetPointSpatialData(m_rs, &obj);
	for (int i=0; i<obj.m_AttriFieldSet.GetSize(); i++)
		m_rs.SetField(obj.m_AttriFieldSet[i].csName, &obj.m_AttriFieldSet[i].Value);
	m_rs.Update();

	v = m_rs.GetField(0L);
	return(v.lVal);
}
//--------------------------------------------------------------------
void CPointFeatureSet::GetFeature(CPointFeature* obj)
//获得当前要素
{
	long i, count, start;

	comGeoDataEngine.GetPointSpatialData(m_rs, obj);
	count = m_rs.Fields.GetCount();
	start = comGeoDataEngine.GetSpatialFieldNum(m_rs);
	obj->m_AttriFieldSet.SetSize(count-start);
	for (i=start; i<count; i++)
	{
		obj->m_AttriFieldSet[i-start].csName = m_rs.Fields[i].GetName();
		obj->m_AttriFieldSet[i-start].Value = m_rs.Fields[i].GetValue();
	}
}
//--------------------------------------------------------------------
BOOL CPointFeatureSet::GetFeatureOf(long id, CPointFeature* obj)
//根据ID号获得要素
{
	char buffer[20];
	CString cs = _T("ID_ =");

	_ltoa(id, buffer, 10);
	m_rs.FindFirst(cs + buffer);
	if (m_rs.GetNoMatch())  return(FALSE);
	GetFeature(obj);
	return(TRUE);
}
//--------------------------------------------------------------------
void CPointFeatureSet::GetAttriFieldSet(CAttriFieldSet& obj)
//获得当前要素的属性数据
{
	long i, count, start;

	count = m_rs.Fields.GetCount();
	start = comGeoDataEngine.GetSpatialFieldNum(m_rs);
	obj.SetSize(count-start);
	for (i=start; i<count; i++)
	{
		obj[i-start].csName = m_rs.Fields[i].GetName();
		obj[i-start].Value = m_rs.Fields[i].GetValue();
	}
}
//--------------------------------------------------------------------
BOOL CPointFeatureSet::GetAttriFieldSetOf(long id, CAttriFieldSet& obj)
//根据ID号获得要素的属性数据
{
	char buffer[20];
	CString cs = _T("ID_ =");

	_ltoa(id, buffer, 10);
	m_rs.FindFirst(cs + buffer);
	if (m_rs.GetNoMatch())  return(FALSE);
	GetAttriFieldSet(obj);
	return(TRUE);
}
//--------------------------------------------------------------------
void CPointFeatureSet::UpdateFeature(CPointFeature& obj)
//更新记录
{
	m_rs.Edit();
	comGeoDataEngine.SetPointSpatialData(m_rs, &obj);
	for (int i=0; i<obj.m_AttriFieldSet.GetSize(); i++)
		m_rs.SetField(obj.m_AttriFieldSet[i].csName, &obj.m_AttriFieldSet[i].Value);
	m_rs.Update();
}

//********************************************************************
//线状要素集合类(CLineFeatureSet) 的函数体
//--------------------------------------------------------------------
CLineFeatureSet::CLineFeatureSet()
{
}
//--------------------------------------------------------------------
CLineFeatureSet::~CLineFeatureSet()
{
	m_SymbolSet.Close();
	m_LabelSet.Close();
}
//--------------------------------------------------------------------
BOOL CLineFeatureSet::Open(CGeoDatabase& db, CLayer* pLayer)
{
	m_pLayer = pLayer;
	m_csTableName = pLayer->csName + (LPCTSTR)comLineSuffix;
	if (!comGeoDataEngine.OpenTable(db, m_csTableName, &m_rs))  return(FALSE);

	m_SymbolSet.Open(db, pLayer->csName+(LPCTSTR)comLineSymbolSuffix);
	m_LabelSet.Open(db, pLayer->csName+(LPCTSTR)comLineLabelSuffix);
	return(TRUE);
}
//--------------------------------------------------------------------
long CLineFeatureSet::AddFeature(CLineFeature& obj)
//增加要素(一个记录)
{
	COleVariant v;

	m_rs.AddNew();
	comGeoDataEngine.SetLineSpatialData(m_rs, &obj);
	for (int i=0; i<obj.m_AttriFieldSet.GetSize(); i++)
		m_rs.SetField(obj.m_AttriFieldSet[i].csName, &obj.m_AttriFieldSet[i].Value);
	m_rs.Update();

	v = m_rs.GetField(0L);
	return(v.lVal);
}
//--------------------------------------------------------------------
void CLineFeatureSet::GetFeature(CLineFeature* obj)
//获得当前要素
{
	long i, count, start;

⌨️ 快捷键说明

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