VC+MO2.0连接ArcSDE并且读出SDE中的空间数据(三)
?現在查詢上基本完成了,不過僅僅是一些簡單的查詢而已。首先我還是貼一下放大、縮小、漫游一些簡單的代碼:
CMoRectangle Rect;
CMoPoint Point;
if(this->m_CursorStat == "zoomin")
{
?? Rect = this->m_MapObject.TrackRectangle();
?? this->m_MapObject.SetExtent(Rect);
}
else if(this->m_CursorStat=="zoomout")
{
?? double Width,Height;
?? Point = this->m_MapObject.ToMapPoint((float)X,(float)Y);
?? Rect = this->m_MapObject.GetExtent();
?? Width = Rect.GetWidth();
?? Height = Rect.GetHeight();
?? Rect.SetRight(Point.GetX()+Width);
?? Rect.SetLeft(Point.GetX()-Width);
?? Rect.SetBottom(Point.GetY()-Height);
?? Rect.SetTop(Point.GetY()+Height);
?? this->m_MapObject.SetExtent(Rect);
}
else if(this->m_CursorStat=="pan")
{
?? this->m_MapObject.Pan();
}
這些都比較easy,就略去介紹了。下面開始講查詢:我這里的查詢用的是Expression語句,其實還有其他的方法,如SearchShape,這里先介紹前者的用法。它其實就是一個約束條件,你把它扔給一個圖層處理,然后圖層就會根據你的語句得到結果,返回一個CMoRecordset類型。如:
CMoRecordset recs(this->m_CurrentLayer.SearchExpression(expression));
recs就是當前圖層,執行語句expression之后得到的結果集合。這里我用的只是Like的SQL語法(其他的還沒有得知如何用),所以結果返回就是一條記錄,或者說就是表中的一行。下面以點圖層搜索為例:
CMoFields fields(recs.GetFields());//得到字段集合
CMoField shapeField(fields.Item(COleVariant(TEXT("Shape"))));
//用字段shape初始化shapeField,必須用shape
if(lyrType=="MultiPoints")
{
//這里這個shape文件是一個點對象
CMoPoint shape(shapeField.GetValue().pdispVal);
this->m_MapObject.FlashShape(shape, 3);//將這個點閃動三次
}
其中,lyrType是圖層的類型,通過GetSplitString函數得到。這樣,只要執行Select * from CurrentLayer where CITY_NAME Like Denver類似的語句就可得到結果。
下一次如果有續的話,應該是了解返回多個查詢結果的情形。
轉載于:https://www.cnblogs.com/googlegis/archive/2008/12/04/2979099.html
總結
以上是生活随笔為你收集整理的VC+MO2.0连接ArcSDE并且读出SDE中的空间数据(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 12月1日双星拱月
- 下一篇: PP团队圣经巨著《Application