首页 / 浏览问题 / 组件GIS / 问题详情
面对象的建立
66EXP 2017年09月26日
“先获取面数据集的记录集DatasetVector.GetRecordset,再获取记录集当前记录的几何对象Recordset.GetGeometry”

获取面对象的语句实例能写一下吗?参考参考

1个回答

您好,你的面对象不是存在数据集里面了吗,先获取到这个数据集(假定获取得到的面数据集为DatasetRegion),示范代码如下:

DatasetVector datasetvector=DatasetRegion as DatasetVector;

Recordset recordset=DatasetVector.GetRecordset(false,CursorType.static) ;

GeoRegion region=recordset.GetGeometry() as GeoRegion;
5,985EXP 2017年09月26日
1.(false,CursorType.static) 什么意思?

2.(假定获取得到的面数据集为DatasetRegion)DatasetRegion是我面数据集的名字吗?

1.该问题帮助文档写得很清楚

给定的判断是否返回空的记录集参数。

为true时返回空记录集。

为false返回包含所有记录的记录集合对象。

指定的游标类型,以便用户控制查询出来的记录集的属性。当游标类型为动态时,记录集可以被修改,当游标类型为静态时,记录集为只读属性。详细信息请参见CursorType 类型。

2.你面对象存到数据集里面,你需要先获取到这个数据集,怎么获取指定的数据集,请参考帮助文档,通常是通过worksspace.Datasource.Datasets(数据集名称)获取;

好的,非常感谢
我如果获取这个面数据集,我需要在连接orcl数据源吗?之前我打开工作空间显示地图时已经连接数据库了
已经打开了这个数据库就不需要再次打开了

 m_workspace.Datasource.Datasets( "KuanChengqu");

可为什么我以图层名字KuanChengqu当索引,调取面数据集时红色部分会出错“缺少Using指令....”代码写错了吗?

“怎么获取指定的数据集,请参考帮助文档”  帮助文档里找半天没找到

DatasetVector datasetregion= m_workspace.Datasource.Datasets["KuanChengqu"] as Datasetvector;

不行啊,DatasetVector datasetregion= m_workspace.Datasource.Datasets( "KuanChengqu") as Datasetvector;

第一个红色部分老是出现using SuperMap.Data不包含Datasource的定义的错误

你没有引用 SuperMap.Data.dll呢,该程序集在你组件的Bin包下
不会啊 引用了 俺没那么小白啊  

DatasetVector datasetregion= m_workspace.Datasource.Datasets( "KuanChengqu") as Datasetvector;

从数据库里获取面数据集就需要这一句话吗,还要加点别的吗?
有点失误,如果你的工作空间只有一个数据源的话,应该这么写

DatasetVector datasetregion= m_workspace.Datasource[0].Datasets["KuanChengqu"] as Datasetvector;

解决问题还是多看帮助文档,多看示范代码,我不可能每句代码都给你写,并且写得毫无问题
嗯嗯 太谢了 我也是没法了 麻烦麻烦

再问您最后一个问题哈:

Recordset recordset=DatasetVector.GetRecordset(false,CursorType.static) ;
GeoRegion region=recordset.GetGeometry() as GeoRegion;

后面这两句代码没有问题吧?为什么老是出现:应输入标识符;“static”是关键字

还有您说这类问题帮助文档里写得很清楚,可是我就是找不到啊crying

你在帮助文档里面看看该枚举类型有哪些CursorType,注意static大小写,我给你写示范代码是直接在这儿敲的,没去程序调试,没管大小写

Recordset recordset=DatasetVector.GetRecordset(false,CursorType.static) ;

还是错误:非静态字段、方法或属性“SuperMap.Data.DatasetVector.GetRecordset(bool, SuperMap.Data.CursorType)”要求对象引用

你VS是哪个版本的,敲完CursorType打小数点的时候没自动提醒它所有的枚举类型?
8c版的

敲完DatasetVector.以后就没出来GetRecordset的提示
VS是12版的
上完整代码吧

 private void toolStripButton1_Click(object sender, EventArgs e)
        {
            //建立面对象
            //获取数据源中名为 KuanChengqu 的矢量数据集
            DatasetVector datasetregion = m_workspace.Datasources[0].Datasets["KuanChengqu"] as DatasetVector;
            Recordset recordset = DatasetVector.GetRecordset(false, CursorType.Static);
            GeoRegion region = recordset.GetGeometry() as GeoRegion;
            //连接数据库 从数据库去点坐标
            b = Convert.ToInt32(new OracleHelper().ReturnDataReader2("select count(*) from TABLE5"));
            OracleHelper oh = new OracleHelper();
            try
            {

                for (int a = 1; a <= b; a++)
                {
                    double[] bb = oh.ReturnDataReader1("select * from TABLE5 where ID=" + a);
                    x = bb[0];
                    y = bb[1];
                    Point2D point = new Point2D(x, y);
                    GeoPoint m_point = new GeoPoint(point);
                    //调用方法比较点对象是否在面对象内
                   c= Geometrist.CanContain(GeoRegion,Geopoint);
                }              
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
         }

我写了一个按钮,熊数据库里取的点逐一进行比较、看是否点在面内,如果在,就输出“有人” 错误处在红色部分

我加过你们一个名字叫 超图支持中心 的QQ  你要不方便 可以QQ联系
DatasetVector datasetregion = m_workspace.Datasources[0].Datasets["KuanChengqu"] as DatasetVector;
            Recordset recordset = datasetregion.GetRecordset(false, CursorType.Static);
帅哥,你再给我说说如何调用Geometrist.CanContain(GeoRegion,Geopoint)这个函数吗?
功能已经实现,谢谢啦
...