📄 geodao.cpp
字号:
// 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 + -