VC+MO2.0连接ArcSDE并且读出SDE中的空间数据(三)
来源:互联网 发布:南宁seo 编辑:程序博客网 时间:2024/05/16 09:37
现在查询上基本完成了,不过仅仅是一些简单的查询而已。首先我还是贴一下放大、缩小、漫游一些简单的代码:
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类似的语句就可得到结果。
下一次如果有续的话,应该是了解返回多个查询结果的情形。
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类似的语句就可得到结果。
下一次如果有续的话,应该是了解返回多个查询结果的情形。
- VC+MO2.0连接ArcSDE并且读出SDE中的空间数据(三)
- VC+MO2.0连接ArcSDE并且读出SDE中的空间数据(二)
- VC+MO2.0连接ArcSDE并且读出SDE中的空间数据(一)
- ArcSDE空间数据库中SDE用户使用
- 清除arcsde空间垃圾数据以及解决sde图层名称被占用的问题
- 清除arcsde空间垃圾数据以及解决sde图层名称被占用的问题
- 清除arcsde空间垃圾数据以及解决sde图层名称被占用的问题
- 清除arcsde空间垃圾数据以及解决sde图层名称被占用的问题
- ArcSDE:C#创建SDE要素数据集
- SDE-----空间数据引擎
- 空间数据shp md gdb用sde连接
- ArcEngine连接SDE数据
- ArcSDE空间数据库中SDE用户使用探讨
- ArcSDE空间数据库中SDE用户使用探讨
- 转载】ArcSDE空间数据库中SDE用户使用探讨
- ArcSDE空间数据库中SDE用户使用探讨
- ArcSDE空间数据库中SDE用户使用探讨
- ArcSDE空间数据库中SDE用户使用探讨
- ArcSDE 8.1中空间数据的备份与恢复
- 浅谈优化空间数据库的几种方案
- 利用SDE的C API对SQL数据库进行操作
- 欺骗站长的几大友情链接作弊方法
- Introduce to ArcSDE
- VC+MO2.0连接ArcSDE并且读出SDE中的空间数据(三)
- VC+MO2.0连接ArcSDE并且读出SDE中的空间数据(二)
- VC+MO2.0连接ArcSDE并且读出SDE中的空间数据(一)
- VB代码连接ArcSDE的方法总结
- ARCIMS 介绍
- arcIMS配置
- ArcSDE常用操作命令
- 理解ARCIMS-Server、Service和Servlet Engine的区别
- ArcIMS9.2 的元数据服务框架