首页 / 浏览问题 / 组件GIS / 问题详情
2个线DatasetVector如何求交点
57EXP 2025年09月26日
在supermap-iobjectsdotnet-11.1.1中,执行下列代码报 必须为面对象的错误,
但是我在supermap-idesktopx-11.1.1里发现可以对2个线集合进行相交操作处理,
那如何编写代码实现该功能呢?

                OverlayAnalystParameter overlayAnalystParamIntersect = new OverlayAnalystParameter();
                overlayAnalystParamIntersect.Tolerance = 0.000000008;
                overlayAnalystParamIntersect.OutputType = OverlayAnalystOutputType.Point;
                overlayAnalystParamIntersect.SourceRetainedFields = new string[] {  "LXBM", "LXMC" };
                overlayAnalystParamIntersect.OperationRetainedFields = new string[] { "XM0101", "XM0102" };
                OverlayAnalyst.Intersect(lxvDatasetVector2, lxlDatasetVector2, resultDatasetIntersect, overlayAnalystParamIntersect);

1个回答

您好,相交叠加分析的数据集可以是点类型、线类型和面类型,用来相交叠加分析的数据集可以是线数据集、面数据集;

仅当源数据集为线时,叠加数据集才支持线类型;

也就是说,overlayAnalystParamIntersect是支持两个线元素的相交查询的,您可以再确认一下
1,485EXP 2025年09月26日

1:我的主要代码如下:

                DatasetVector lxlDatasetVector2 = currentDatasets["LX_L"] as DatasetVector;
                DatasetVector lxvDatasetVector2 = currentDatasets["LX_V"] as DatasetVector;
                if (currentDatasets.Contains("LYLYXM_GSD_CrossPoints"))
                {
                    currentDatasets.Delete("LYXM_GSD_CrossPoints");
                }
                String resultDatasetIntersectName = currentDatasets.GetAvailableDatasetName("LYXM_GSD_CrossPoints");
                DatasetVectorInfo datasetvectorInfoIntersect = new DatasetVectorInfo();
                datasetvectorInfoIntersect.Type = DatasetType.Point;
                datasetvectorInfoIntersect.Name = resultDatasetIntersectName;
                datasetvectorInfoIntersect.EncodeType = currentDatasets["LX_L"].EncodeType;
                DatasetVector resultDatasetIntersect = currentDatasets.Create(datasetvectorInfoIntersect, lxlDatasetVector2.PrjCoordSys);
                resultDatasetIntersect.FieldInfos.Add(lxvDatasetVector2.FieldInfos["GYDWDM"]);
                resultDatasetIntersect.FieldInfos.Add(lxvDatasetVector2.FieldInfos["GYDWMC"]);
                resultDatasetIntersect.FieldInfos.Add(lxvDatasetVector2.FieldInfos["LXBM"]);
                resultDatasetIntersect.FieldInfos.Add(lxvDatasetVector2.FieldInfos["LXMC"]);
                resultDatasetIntersect.FieldInfos.Add(lxvDatasetVector2.FieldInfos["LDBM"]);
                resultDatasetIntersect.FieldInfos.Add(lxvDatasetVector2.FieldInfos["QDZH"]);

                resultDatasetIntersect.FieldInfos.Add(lxlDatasetVector2.FieldInfos["XM0101"]);
                resultDatasetIntersect.FieldInfos.Add(lxlDatasetVector2.FieldInfos["XM0107"]);
                resultDatasetIntersect.FieldInfos.Add(lxlDatasetVector2.FieldInfos["XMD0101"]);
                resultDatasetIntersect.FieldInfos.Add(lxlDatasetVector2.FieldInfos["SinIdKey"]);

                OverlayAnalystParameter overlayAnalystParamIntersect = new OverlayAnalystParameter();
                overlayAnalystParamIntersect.Tolerance = 0.000000008;
                overlayAnalystParamIntersect.OutputType = OverlayAnalystOutputType.Point;
                overlayAnalystParamIntersect.SourceRetainedFields = new string[] { "GYDWDM", "GYDWMC", "LXBM", "LXMC", "LDBM", "QDZH" };
                overlayAnalystParamIntersect.OperationRetainedFields = new string[] { "XM0101", "XM0107", "XMD0101", "SinIdKey" };
                /// 错误,只能是面对象
                OverlayAnalyst.Intersect(lxvDatasetVector2, lxlDatasetVector2, resultDatasetIntersect, overlayAnalystParamIntersect);

2:图层结果为:

3:错误提示信息如下:

看看我是不是哪个参数设置错了。

您好,你使用这个方法第二个参数intersectRecordset - 用来相交叠加分析的记录集,必须是面。
两条线的相交,考虑使用Geometrist.intersect()方法
希望能帮到您
...