📄 geodao.cpp
字号:
comGeoDataEngine.GetLineSpatialData(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 CLineFeatureSet::GetFeatureOf(long id, CLineFeature* 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 CLineFeatureSet::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 CLineFeatureSet::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 CLineFeatureSet::UpdateFeature(CLineFeature& obj)
//更新记录
{
m_rs.Edit();
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();
}
//********************************************************************
//面状要素集合类(CPolygonFeatureSet) 的函数体
//--------------------------------------------------------------------
CPolygonFeatureSet::CPolygonFeatureSet()
{
}
//--------------------------------------------------------------------
CPolygonFeatureSet::~CPolygonFeatureSet()
{
m_SymbolSet.Close();
m_LabelSet.Close();
}
//--------------------------------------------------------------------
BOOL CPolygonFeatureSet::Open(CGeoDatabase& db, CLayer* pLayer)
{
m_pLayer = pLayer;
m_csTableName = pLayer->csName + (LPCTSTR)comPolygonSuffix;
if (!comGeoDataEngine.OpenTable(db, m_csTableName, &m_rs)) return(FALSE);
m_SymbolSet.Open(db, pLayer->csName+(LPCTSTR)comPolygonSymbolSuffix);
m_LabelSet.Open(db, pLayer->csName+(LPCTSTR)comPolygonLabelSuffix);
return(TRUE);
}
//--------------------------------------------------------------------
long CPolygonFeatureSet::AddFeature(CPolygonFeature& obj)
//增加要素(一个记录)
{
COleVariant v;
m_rs.AddNew();
comGeoDataEngine.SetPolygonSpatialData(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 CPolygonFeatureSet::GetFeature(CPolygonFeature* obj)
//获得当前要素
{
long i, count, start;
comGeoDataEngine.GetPolygonSpatialData(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 CPolygonFeatureSet::GetFeatureOf(long id, CPolygonFeature* 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 CPolygonFeatureSet::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 CPolygonFeatureSet::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 CPolygonFeatureSet::UpdateFeature(CPolygonFeature& obj)
//更新记录
{
m_rs.Edit();
comGeoDataEngine.SetPolygonSpatialData(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();
}
//********************************************************************
//文本集合类(CTextFeatureSet) 的函数体
//--------------------------------------------------------------------
CTextFeatureSet::CTextFeatureSet()
{
}
//--------------------------------------------------------------------
BOOL CTextFeatureSet::Open(CGeoDatabase& db, CLayer* pLayer)
{
m_pLayer = pLayer;
m_csTableName = pLayer->csName + comTextSuffix;
return(comGeoDataEngine.OpenTable(db, m_csTableName, &m_rs));
}
//--------------------------------------------------------------------
long CTextFeatureSet::AddFeature(CTextFeature& obj)
//增加符号(一个记录)
{
COleVariant v;
m_rs.AddNew();
comGeoDataEngine.SetTextData(m_rs, &obj);
m_rs.Update();
v = m_rs.GetField(0L);
return(v.lVal);
}
//--------------------------------------------------------------------
void CTextFeatureSet::GetFeature(CTextFeature* obj)
//获得当前符号
{
comGeoDataEngine.GetTextData(m_rs, obj);
}
//--------------------------------------------------------------------
BOOL CTextFeatureSet::GetFeatureOf(long id, CTextFeature* 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 CTextFeatureSet::UpdateFeature(CTextFeature& obj)
//更新记录
{
m_rs.Edit();
comGeoDataEngine.SetTextData(m_rs, &obj);
m_rs.Update();
}
//********************************************************************
//要素层类(CLayer) 的函数体
//--------------------------------------------------------------------
IMPLEMENT_SERIAL(CLayer, CObject, 0)
CLayer::CLayer()
{
}
CLayer::CLayer(CWorkspace* pWorkspace)
{
m_pWorkspace = pWorkspace;
}
//--------------------------------------------------------------------
void CLayer::ReName(CString newname)
{
csName = newname;
}
//********************************************************************
//工作区(CWorkspace) 的函数体
//--------------------------------------------------------------------
IMPLEMENT_SERIAL(CWorkspace, CObject, 0)
CWorkspace::CWorkspace()
{
}
CWorkspace::~CWorkspace()
{
if (m_GeoDatabase) CloseDB();
}
//--------------------------------------------------------------------
//串行化,从工作区文件读取数据
void CWorkspace::Serialize(CArchive& ar)
{
CFile* fp = ar.GetFile();
ASSERT(fp);
if (ar.IsStoring())
{
// TODO: add storing code here
fp->SeekToBegin();
fp->Write(&m_iDatabaseNameLen, sizeof(int));
fp->Write(m_csDatabaseName, m_iDatabaseNameLen);
}
else
{
// Get the file from the archive.
//Read FileName from the Document
fp->Read(&m_iDatabaseNameLen, sizeof(int));
fp->Read(m_csDatabaseName.GetBuffer(m_iDatabaseNameLen), m_iDatabaseNameLen);
if (!OpenDB())
AfxMessageBox("工作区数据装载错误");
}
}
//--------------------------------------------------------------------
#ifdef _DEBUG
void CWorkspace::AssertValid() const
{
CObject::AssertValid();
}
void CWorkspace::Dump(CDumpContext& dc) const
{
CObject::Dump(dc);
}
#endif //_DEBUG
//--------------------------------------------------------------------
BOOL CWorkspace::OpenDB()
//打开地理数据库并转载工作区和要素层数据
{
CGeoRecordset rs;
CLayer *player;
int i;
if (!comGeoDataEngine.OpenDatabase(m_csDatabaseName, &m_GeoDatabase))
return(FALSE);
comGeoDataEngine.OpenWorkspaceTable(m_GeoDatabase, &rs);
comGeoDataEngine.GetWorkspaceData(rs, this);
rs.Close();
comGeoDataEngine.OpenLayerTable(m_GeoDatabase, &rs);
rs.MoveFirst();
for (i=0; i<rs.GetRecordCount(); i++)
{
player = new CLayer(this);
comGeoDataEngine.GetLayerData(rs, player);
m_listLayer.AddTail(player);
rs.MoveNext();
}
rs.Close();
return(TRUE);
}
//--------------------------------------------------------------------
void CWorkspace::CloseDB()
//将工作区和要素层数据写入地理数据库,并关闭数据库
{
CGeoRecordset rs;
CLayer *player;
comGeoDataEngine.OpenLayerTable(m_GeoDatabase, &rs);
POSITION pos = m_listLayer.GetHeadPosition();
rs.MoveFirst();
while( pos != NULL )
{
player = m_listLayer.GetNext(pos);
if (!rs.GetEOF())
{
rs.Edit();
comGeoDataEngine.SetLayerData(rs, player);
rs.MoveNext();
}
delete player;
}
rs.Close();
m_listLayer.RemoveAll();
comGeoDataEngine.OpenWorkspaceTable(m_GeoDatabase, &rs);
comGeoDataEngine.SetWorkspaceData(rs, this);
rs.Update();
rs.Close();
m_GeoDatabase.Close();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -