diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 19511cc..e89f552 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -746,17 +746,17 @@ #region wxl 重构 碰撞审查,覆土审查,水平净距审查,垂直净距审查 - + //TODO LIST:UNDONE /// /// 获取跟选择管线垂直距离小于特定值的管线列表和选择管线的距离 /// - /// 地球 + /// 地球 /// 选择管线 - /// 各图层名称 + /// 各图层名称 /// 垂直距离 /// 管线列表,可为空 - public static Dictionary VerticalDistanceAnalysis(GSOGlobeControl globeControl1, - GSOFeature selectedFeature, List _pipelineLayerNames, double verticalDistance ) + public static Dictionary VerticalDistanceAnalysis(GSOGlobeControl globeControl, + GSOFeature selectedFeature, List pipelineLayerNames, double verticalDistance ) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -765,16 +765,13 @@ if (pipeStyle1 == null) return null; GSOGeoPolygon3D polygon = line1.CreateBuffer(0.1, true, 5, true, false);//要比较的区域 Dictionary result = new Dictionary(); - string caption = selectedFeature.Dataset.Caption; - - GSOPoint3d pntIntersect1, pntIntersect2,pntProIntersect1, pntProIntersect2 ; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue;//排除本图层 - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue;//排除本图层 + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); if (feats2 == null) continue; for (int j = 0; j < feats2.Length; j++) { @@ -783,7 +780,8 @@ if (line2 == null) continue; GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; - double dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, out pntIntersect1, + GSOPoint3d pntIntersect1, pntIntersect2, pntProIntersect1, pntProIntersect2; + double dDist = globeControl.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); if (dDist >= verticalDistance) continue;//不符合条件 result.Add(feat2,dDist); @@ -794,12 +792,12 @@ /// /// 获取与选定管线水平距离小于特定值的<管线,管线距离>Dictionary /// - /// + /// /// - /// + /// /// /// 选择的为空或不是管线则返回空,否则返回符合条件的Dictionary - public static Dictionary HorizontalDistanceAnalysis(GSOGlobeControl globeControl1,GSOFeature selectedFeature, List _pipelineLayerNames, double dis) + public static Dictionary HorizontalDistanceAnalysis(GSOGlobeControl globeControl,GSOFeature selectedFeature, List pipelineLayerNames, double dis) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -809,23 +807,23 @@ Dictionary result = new Dictionary(); string caption = selectedFeature.Dataset.Caption; GSOGeoPolygon3D polygon = line1.CreateBuffer(dis, true, 5, true, false); - GSOFeature new_feat = new GSOFeature(); - new_feat.Geometry = polygon; + GSOFeature newFeat = new GSOFeature(); + newFeat.Geometry = polygon; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue; - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue; + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); for (int j = 0; j < feats2.Length; j++) { GSOFeature feat2 = feats2[j]; GSOGeoPolyline3D line2 = feat2.Geometry as GSOGeoPolyline3D; if (line2 == null) continue; GSOPoint3d pntIntersect1, pntIntersect2, pntProIntersect1, pntProIntersect2; - double dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, out pntIntersect1, - out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + double dDist = globeControl.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, out pntIntersect1, + out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; result.Add(feat2,dDist); @@ -836,11 +834,11 @@ /// ///碰撞检测,获取与选择管线碰撞的管线 /// - /// 地球 + /// 地球 /// 选中的feature - /// 图层列表 + /// 图层列表 /// - public static GSOFeatures CollisionAnalysis(GSOGlobeControl globeControl1, GSOFeature selectedFeature, List _pipelineLayerNames) + public static GSOFeatures CollisionAnalysis(GSOGlobeControl globeControl, GSOFeature selectedFeature, List pipelineLayerNames) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -851,12 +849,12 @@ GSOFeatures result = new GSOFeatures(); string caption = selectedFeature.Dataset.Caption; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue;//排除本图层 - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue;//排除本图层 + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); if (feats2 == null) continue; for (int j = 0; j < feats2.Length; j++) { @@ -867,7 +865,7 @@ GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; GSOPoint3d pntIntersect1, pntIntersect2; - double dDist = globeControl1.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, + double dDist = globeControl.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, out pntIntersect2,out horLen,out verLen,true,true,dNoIntersetStartRatio); if (dDist <= 0 ) result.Add(feat2); } diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 19511cc..e89f552 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -746,17 +746,17 @@ #region wxl 重构 碰撞审查,覆土审查,水平净距审查,垂直净距审查 - + //TODO LIST:UNDONE /// /// 获取跟选择管线垂直距离小于特定值的管线列表和选择管线的距离 /// - /// 地球 + /// 地球 /// 选择管线 - /// 各图层名称 + /// 各图层名称 /// 垂直距离 /// 管线列表,可为空 - public static Dictionary VerticalDistanceAnalysis(GSOGlobeControl globeControl1, - GSOFeature selectedFeature, List _pipelineLayerNames, double verticalDistance ) + public static Dictionary VerticalDistanceAnalysis(GSOGlobeControl globeControl, + GSOFeature selectedFeature, List pipelineLayerNames, double verticalDistance ) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -765,16 +765,13 @@ if (pipeStyle1 == null) return null; GSOGeoPolygon3D polygon = line1.CreateBuffer(0.1, true, 5, true, false);//要比较的区域 Dictionary result = new Dictionary(); - string caption = selectedFeature.Dataset.Caption; - - GSOPoint3d pntIntersect1, pntIntersect2,pntProIntersect1, pntProIntersect2 ; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue;//排除本图层 - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue;//排除本图层 + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); if (feats2 == null) continue; for (int j = 0; j < feats2.Length; j++) { @@ -783,7 +780,8 @@ if (line2 == null) continue; GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; - double dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, out pntIntersect1, + GSOPoint3d pntIntersect1, pntIntersect2, pntProIntersect1, pntProIntersect2; + double dDist = globeControl.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); if (dDist >= verticalDistance) continue;//不符合条件 result.Add(feat2,dDist); @@ -794,12 +792,12 @@ /// /// 获取与选定管线水平距离小于特定值的<管线,管线距离>Dictionary /// - /// + /// /// - /// + /// /// /// 选择的为空或不是管线则返回空,否则返回符合条件的Dictionary - public static Dictionary HorizontalDistanceAnalysis(GSOGlobeControl globeControl1,GSOFeature selectedFeature, List _pipelineLayerNames, double dis) + public static Dictionary HorizontalDistanceAnalysis(GSOGlobeControl globeControl,GSOFeature selectedFeature, List pipelineLayerNames, double dis) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -809,23 +807,23 @@ Dictionary result = new Dictionary(); string caption = selectedFeature.Dataset.Caption; GSOGeoPolygon3D polygon = line1.CreateBuffer(dis, true, 5, true, false); - GSOFeature new_feat = new GSOFeature(); - new_feat.Geometry = polygon; + GSOFeature newFeat = new GSOFeature(); + newFeat.Geometry = polygon; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue; - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue; + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); for (int j = 0; j < feats2.Length; j++) { GSOFeature feat2 = feats2[j]; GSOGeoPolyline3D line2 = feat2.Geometry as GSOGeoPolyline3D; if (line2 == null) continue; GSOPoint3d pntIntersect1, pntIntersect2, pntProIntersect1, pntProIntersect2; - double dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, out pntIntersect1, - out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + double dDist = globeControl.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, out pntIntersect1, + out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; result.Add(feat2,dDist); @@ -836,11 +834,11 @@ /// ///碰撞检测,获取与选择管线碰撞的管线 /// - /// 地球 + /// 地球 /// 选中的feature - /// 图层列表 + /// 图层列表 /// - public static GSOFeatures CollisionAnalysis(GSOGlobeControl globeControl1, GSOFeature selectedFeature, List _pipelineLayerNames) + public static GSOFeatures CollisionAnalysis(GSOGlobeControl globeControl, GSOFeature selectedFeature, List pipelineLayerNames) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -851,12 +849,12 @@ GSOFeatures result = new GSOFeatures(); string caption = selectedFeature.Dataset.Caption; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue;//排除本图层 - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue;//排除本图层 + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); if (feats2 == null) continue; for (int j = 0; j < feats2.Length; j++) { @@ -867,7 +865,7 @@ GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; GSOPoint3d pntIntersect1, pntIntersect2; - double dDist = globeControl1.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, + double dDist = globeControl.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, out pntIntersect2,out horLen,out verLen,true,true,dNoIntersetStartRatio); if (dDist <= 0 ) result.Add(feat2); } diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index fe32265..cfdaf5c 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using GeoScene.Data; using GeoScene.Globe; @@ -17,9 +18,9 @@ public static GSOFeatures Intersect_PointLayerByType(GSOGeoPolygon3D polygon, GSOLayer layer, string type) { - if (layer == null) return null; - GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + if (polygon == null) { @@ -48,7 +49,7 @@ /// ///附属物列表 /// - public Dictionary getFeatureCountByFeatures(GSOFeatures feats) + public Dictionary GetFeatureCountByFeatures(GSOFeatures feats) { if (feats == null || feats.Length == 0) return null; Dictionary result = new Dictionary(); @@ -64,13 +65,13 @@ /// /// /// - public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) + public FeaturesClassfyResult GetPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) { if (layer == null) return null; FeaturesClassfyResult result = new FeaturesClassfyResult(); double totalLength = 0.0; int ncount = 0; - GSOFeatures features = getPipesByValueSection(polygon, layer, min, max, fieldName); + GSOFeatures features = GetPipesByValueSection(polygon, layer, min, max, fieldName); for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; @@ -98,11 +99,12 @@ /// 上限 /// 统计类型:"起始埋深"或"管径_毫米" /// - public GSOFeatures getPipesByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) + public GSOFeatures GetPipesByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) { - if (layer == null) return null; - GSOFeatures result = new GSOFeatures(); + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + GSOFeatures result = new GSOFeatures(); //TODOLIST:优化为只获取管线,目前不清楚调用方式 GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); @@ -127,12 +129,12 @@ } //图层名称、管径、条数、总长度 - public List groupPipeByDiameter(GSOGeoPolygon3D polygon, GSOLayer layer) + public List GroupPipeByDiameter(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; - List result = new List(); - + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + List result = new List(); //TODOLIST:优化为只获取管线,目前不清楚调用方式 GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); @@ -164,7 +166,7 @@ } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = diameter.ToString(); + featuresClass.groupFieldValue = diameter.ToString(CultureInfo.InvariantCulture); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -181,12 +183,11 @@ /// /// /// - public List groupAccessories(GSOGeoPolygon3D polygon, GSOLayer layer) + public List GroupAccessories(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; - List result = new List(); - GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + List result = new List(); //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); @@ -230,14 +231,14 @@ /// /// 材质 /// - public FeaturesClassfyResult groupPipeByMaterial(GSOGeoPolygon3D polygon, GSOLayer layer, string material) + public FeaturesClassfyResult GroupPipeByMaterial(GSOGeoPolygon3D polygon, GSOLayer layer, string material) { - if (layer == null) return null; + + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; FeaturesClassfyResult result = new FeaturesClassfyResult(); - GSOFeatureLayer flayer = layer as GSOFeatureLayer; - - //TODOLIST:优化为只获取管线,目前不清楚调用方式 + GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); string fixedMaterial = material == "无" ? "" : material; @@ -245,16 +246,12 @@ int ncount = 0; for (int i = 0; i < feats.Length; i++) { - if (feats[i].GetFieldAsString("材质").Equals(fixedMaterial)) - { - GSOGeoPolyline3D line = feats[i].Geometry as GSOGeoPolyline3D; - if (line != null) - { - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } - } + if (!feats[i].GetFieldAsString("材质").Equals(fixedMaterial)) continue; + GSOGeoPolyline3D line = feats[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } result.layerName = layer.Caption; @@ -271,12 +268,12 @@ /// /// 要统计的长度 /// - public static GSOFeatures getLayerPipes(GSOGeoPolygon3D polygon, GSOLayer layer, out double length) + public static GSOFeatures GetLayerPipes(GSOGeoPolygon3D polygon, GSOLayer layer, out double length) { length = 0; if (layer == null) return null; - GSOFeatures feats = getLayerFeatures(polygon, layer); + GSOFeatures feats = GetLayerFeatures(polygon, layer); double totallength = 0.00; for (int i = 0; i < feats.Length; i++) { @@ -298,10 +295,10 @@ /// /// /// - public static GSOFeatures getLayerFeatures(GSOGeoPolygon3D polygon, GSOLayer layer) + public static GSOFeatures GetLayerFeatures(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); } diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 19511cc..e89f552 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -746,17 +746,17 @@ #region wxl 重构 碰撞审查,覆土审查,水平净距审查,垂直净距审查 - + //TODO LIST:UNDONE /// /// 获取跟选择管线垂直距离小于特定值的管线列表和选择管线的距离 /// - /// 地球 + /// 地球 /// 选择管线 - /// 各图层名称 + /// 各图层名称 /// 垂直距离 /// 管线列表,可为空 - public static Dictionary VerticalDistanceAnalysis(GSOGlobeControl globeControl1, - GSOFeature selectedFeature, List _pipelineLayerNames, double verticalDistance ) + public static Dictionary VerticalDistanceAnalysis(GSOGlobeControl globeControl, + GSOFeature selectedFeature, List pipelineLayerNames, double verticalDistance ) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -765,16 +765,13 @@ if (pipeStyle1 == null) return null; GSOGeoPolygon3D polygon = line1.CreateBuffer(0.1, true, 5, true, false);//要比较的区域 Dictionary result = new Dictionary(); - string caption = selectedFeature.Dataset.Caption; - - GSOPoint3d pntIntersect1, pntIntersect2,pntProIntersect1, pntProIntersect2 ; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue;//排除本图层 - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue;//排除本图层 + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); if (feats2 == null) continue; for (int j = 0; j < feats2.Length; j++) { @@ -783,7 +780,8 @@ if (line2 == null) continue; GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; - double dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, out pntIntersect1, + GSOPoint3d pntIntersect1, pntIntersect2, pntProIntersect1, pntProIntersect2; + double dDist = globeControl.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); if (dDist >= verticalDistance) continue;//不符合条件 result.Add(feat2,dDist); @@ -794,12 +792,12 @@ /// /// 获取与选定管线水平距离小于特定值的<管线,管线距离>Dictionary /// - /// + /// /// - /// + /// /// /// 选择的为空或不是管线则返回空,否则返回符合条件的Dictionary - public static Dictionary HorizontalDistanceAnalysis(GSOGlobeControl globeControl1,GSOFeature selectedFeature, List _pipelineLayerNames, double dis) + public static Dictionary HorizontalDistanceAnalysis(GSOGlobeControl globeControl,GSOFeature selectedFeature, List pipelineLayerNames, double dis) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -809,23 +807,23 @@ Dictionary result = new Dictionary(); string caption = selectedFeature.Dataset.Caption; GSOGeoPolygon3D polygon = line1.CreateBuffer(dis, true, 5, true, false); - GSOFeature new_feat = new GSOFeature(); - new_feat.Geometry = polygon; + GSOFeature newFeat = new GSOFeature(); + newFeat.Geometry = polygon; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue; - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue; + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); for (int j = 0; j < feats2.Length; j++) { GSOFeature feat2 = feats2[j]; GSOGeoPolyline3D line2 = feat2.Geometry as GSOGeoPolyline3D; if (line2 == null) continue; GSOPoint3d pntIntersect1, pntIntersect2, pntProIntersect1, pntProIntersect2; - double dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, out pntIntersect1, - out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + double dDist = globeControl.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, out pntIntersect1, + out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; result.Add(feat2,dDist); @@ -836,11 +834,11 @@ /// ///碰撞检测,获取与选择管线碰撞的管线 /// - /// 地球 + /// 地球 /// 选中的feature - /// 图层列表 + /// 图层列表 /// - public static GSOFeatures CollisionAnalysis(GSOGlobeControl globeControl1, GSOFeature selectedFeature, List _pipelineLayerNames) + public static GSOFeatures CollisionAnalysis(GSOGlobeControl globeControl, GSOFeature selectedFeature, List pipelineLayerNames) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -851,12 +849,12 @@ GSOFeatures result = new GSOFeatures(); string caption = selectedFeature.Dataset.Caption; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue;//排除本图层 - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue;//排除本图层 + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); if (feats2 == null) continue; for (int j = 0; j < feats2.Length; j++) { @@ -867,7 +865,7 @@ GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; GSOPoint3d pntIntersect1, pntIntersect2; - double dDist = globeControl1.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, + double dDist = globeControl.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, out pntIntersect2,out horLen,out verLen,true,true,dNoIntersetStartRatio); if (dDist <= 0 ) result.Add(feat2); } diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index fe32265..cfdaf5c 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using GeoScene.Data; using GeoScene.Globe; @@ -17,9 +18,9 @@ public static GSOFeatures Intersect_PointLayerByType(GSOGeoPolygon3D polygon, GSOLayer layer, string type) { - if (layer == null) return null; - GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + if (polygon == null) { @@ -48,7 +49,7 @@ /// ///附属物列表 /// - public Dictionary getFeatureCountByFeatures(GSOFeatures feats) + public Dictionary GetFeatureCountByFeatures(GSOFeatures feats) { if (feats == null || feats.Length == 0) return null; Dictionary result = new Dictionary(); @@ -64,13 +65,13 @@ /// /// /// - public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) + public FeaturesClassfyResult GetPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) { if (layer == null) return null; FeaturesClassfyResult result = new FeaturesClassfyResult(); double totalLength = 0.0; int ncount = 0; - GSOFeatures features = getPipesByValueSection(polygon, layer, min, max, fieldName); + GSOFeatures features = GetPipesByValueSection(polygon, layer, min, max, fieldName); for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; @@ -98,11 +99,12 @@ /// 上限 /// 统计类型:"起始埋深"或"管径_毫米" /// - public GSOFeatures getPipesByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) + public GSOFeatures GetPipesByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) { - if (layer == null) return null; - GSOFeatures result = new GSOFeatures(); + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + GSOFeatures result = new GSOFeatures(); //TODOLIST:优化为只获取管线,目前不清楚调用方式 GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); @@ -127,12 +129,12 @@ } //图层名称、管径、条数、总长度 - public List groupPipeByDiameter(GSOGeoPolygon3D polygon, GSOLayer layer) + public List GroupPipeByDiameter(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; - List result = new List(); - + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + List result = new List(); //TODOLIST:优化为只获取管线,目前不清楚调用方式 GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); @@ -164,7 +166,7 @@ } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = diameter.ToString(); + featuresClass.groupFieldValue = diameter.ToString(CultureInfo.InvariantCulture); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -181,12 +183,11 @@ /// /// /// - public List groupAccessories(GSOGeoPolygon3D polygon, GSOLayer layer) + public List GroupAccessories(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; - List result = new List(); - GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + List result = new List(); //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); @@ -230,14 +231,14 @@ /// /// 材质 /// - public FeaturesClassfyResult groupPipeByMaterial(GSOGeoPolygon3D polygon, GSOLayer layer, string material) + public FeaturesClassfyResult GroupPipeByMaterial(GSOGeoPolygon3D polygon, GSOLayer layer, string material) { - if (layer == null) return null; + + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; FeaturesClassfyResult result = new FeaturesClassfyResult(); - GSOFeatureLayer flayer = layer as GSOFeatureLayer; - - //TODOLIST:优化为只获取管线,目前不清楚调用方式 + GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); string fixedMaterial = material == "无" ? "" : material; @@ -245,16 +246,12 @@ int ncount = 0; for (int i = 0; i < feats.Length; i++) { - if (feats[i].GetFieldAsString("材质").Equals(fixedMaterial)) - { - GSOGeoPolyline3D line = feats[i].Geometry as GSOGeoPolyline3D; - if (line != null) - { - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } - } + if (!feats[i].GetFieldAsString("材质").Equals(fixedMaterial)) continue; + GSOGeoPolyline3D line = feats[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } result.layerName = layer.Caption; @@ -271,12 +268,12 @@ /// /// 要统计的长度 /// - public static GSOFeatures getLayerPipes(GSOGeoPolygon3D polygon, GSOLayer layer, out double length) + public static GSOFeatures GetLayerPipes(GSOGeoPolygon3D polygon, GSOLayer layer, out double length) { length = 0; if (layer == null) return null; - GSOFeatures feats = getLayerFeatures(polygon, layer); + GSOFeatures feats = GetLayerFeatures(polygon, layer); double totallength = 0.00; for (int i = 0; i < feats.Length; i++) { @@ -298,10 +295,10 @@ /// /// /// - public static GSOFeatures getLayerFeatures(GSOGeoPolygon3D polygon, GSOLayer layer) + public static GSOFeatures GetLayerFeatures(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); } diff --git a/FrmAccessoriesgather.cs b/FrmAccessoriesgather.cs index c7787f7..e1d176e 100644 --- a/FrmAccessoriesgather.cs +++ b/FrmAccessoriesgather.cs @@ -213,7 +213,7 @@ { FeatureStatisticsService featureService = new FeatureStatisticsService(); GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layertype); - List accessoriesResult = featureService.groupAccessories(polygon, layer); + List accessoriesResult = featureService.GroupAccessories(polygon, layer); if (accessoriesResult == null || accessoriesResult.Count == 0) { diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 19511cc..e89f552 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -746,17 +746,17 @@ #region wxl 重构 碰撞审查,覆土审查,水平净距审查,垂直净距审查 - + //TODO LIST:UNDONE /// /// 获取跟选择管线垂直距离小于特定值的管线列表和选择管线的距离 /// - /// 地球 + /// 地球 /// 选择管线 - /// 各图层名称 + /// 各图层名称 /// 垂直距离 /// 管线列表,可为空 - public static Dictionary VerticalDistanceAnalysis(GSOGlobeControl globeControl1, - GSOFeature selectedFeature, List _pipelineLayerNames, double verticalDistance ) + public static Dictionary VerticalDistanceAnalysis(GSOGlobeControl globeControl, + GSOFeature selectedFeature, List pipelineLayerNames, double verticalDistance ) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -765,16 +765,13 @@ if (pipeStyle1 == null) return null; GSOGeoPolygon3D polygon = line1.CreateBuffer(0.1, true, 5, true, false);//要比较的区域 Dictionary result = new Dictionary(); - string caption = selectedFeature.Dataset.Caption; - - GSOPoint3d pntIntersect1, pntIntersect2,pntProIntersect1, pntProIntersect2 ; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue;//排除本图层 - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue;//排除本图层 + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); if (feats2 == null) continue; for (int j = 0; j < feats2.Length; j++) { @@ -783,7 +780,8 @@ if (line2 == null) continue; GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; - double dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, out pntIntersect1, + GSOPoint3d pntIntersect1, pntIntersect2, pntProIntersect1, pntProIntersect2; + double dDist = globeControl.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); if (dDist >= verticalDistance) continue;//不符合条件 result.Add(feat2,dDist); @@ -794,12 +792,12 @@ /// /// 获取与选定管线水平距离小于特定值的<管线,管线距离>Dictionary /// - /// + /// /// - /// + /// /// /// 选择的为空或不是管线则返回空,否则返回符合条件的Dictionary - public static Dictionary HorizontalDistanceAnalysis(GSOGlobeControl globeControl1,GSOFeature selectedFeature, List _pipelineLayerNames, double dis) + public static Dictionary HorizontalDistanceAnalysis(GSOGlobeControl globeControl,GSOFeature selectedFeature, List pipelineLayerNames, double dis) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -809,23 +807,23 @@ Dictionary result = new Dictionary(); string caption = selectedFeature.Dataset.Caption; GSOGeoPolygon3D polygon = line1.CreateBuffer(dis, true, 5, true, false); - GSOFeature new_feat = new GSOFeature(); - new_feat.Geometry = polygon; + GSOFeature newFeat = new GSOFeature(); + newFeat.Geometry = polygon; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue; - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue; + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); for (int j = 0; j < feats2.Length; j++) { GSOFeature feat2 = feats2[j]; GSOGeoPolyline3D line2 = feat2.Geometry as GSOGeoPolyline3D; if (line2 == null) continue; GSOPoint3d pntIntersect1, pntIntersect2, pntProIntersect1, pntProIntersect2; - double dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, out pntIntersect1, - out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + double dDist = globeControl.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, out pntIntersect1, + out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; result.Add(feat2,dDist); @@ -836,11 +834,11 @@ /// ///碰撞检测,获取与选择管线碰撞的管线 /// - /// 地球 + /// 地球 /// 选中的feature - /// 图层列表 + /// 图层列表 /// - public static GSOFeatures CollisionAnalysis(GSOGlobeControl globeControl1, GSOFeature selectedFeature, List _pipelineLayerNames) + public static GSOFeatures CollisionAnalysis(GSOGlobeControl globeControl, GSOFeature selectedFeature, List pipelineLayerNames) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -851,12 +849,12 @@ GSOFeatures result = new GSOFeatures(); string caption = selectedFeature.Dataset.Caption; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue;//排除本图层 - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue;//排除本图层 + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); if (feats2 == null) continue; for (int j = 0; j < feats2.Length; j++) { @@ -867,7 +865,7 @@ GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; GSOPoint3d pntIntersect1, pntIntersect2; - double dDist = globeControl1.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, + double dDist = globeControl.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, out pntIntersect2,out horLen,out verLen,true,true,dNoIntersetStartRatio); if (dDist <= 0 ) result.Add(feat2); } diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index fe32265..cfdaf5c 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using GeoScene.Data; using GeoScene.Globe; @@ -17,9 +18,9 @@ public static GSOFeatures Intersect_PointLayerByType(GSOGeoPolygon3D polygon, GSOLayer layer, string type) { - if (layer == null) return null; - GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + if (polygon == null) { @@ -48,7 +49,7 @@ /// ///附属物列表 /// - public Dictionary getFeatureCountByFeatures(GSOFeatures feats) + public Dictionary GetFeatureCountByFeatures(GSOFeatures feats) { if (feats == null || feats.Length == 0) return null; Dictionary result = new Dictionary(); @@ -64,13 +65,13 @@ /// /// /// - public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) + public FeaturesClassfyResult GetPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) { if (layer == null) return null; FeaturesClassfyResult result = new FeaturesClassfyResult(); double totalLength = 0.0; int ncount = 0; - GSOFeatures features = getPipesByValueSection(polygon, layer, min, max, fieldName); + GSOFeatures features = GetPipesByValueSection(polygon, layer, min, max, fieldName); for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; @@ -98,11 +99,12 @@ /// 上限 /// 统计类型:"起始埋深"或"管径_毫米" /// - public GSOFeatures getPipesByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) + public GSOFeatures GetPipesByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) { - if (layer == null) return null; - GSOFeatures result = new GSOFeatures(); + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + GSOFeatures result = new GSOFeatures(); //TODOLIST:优化为只获取管线,目前不清楚调用方式 GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); @@ -127,12 +129,12 @@ } //图层名称、管径、条数、总长度 - public List groupPipeByDiameter(GSOGeoPolygon3D polygon, GSOLayer layer) + public List GroupPipeByDiameter(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; - List result = new List(); - + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + List result = new List(); //TODOLIST:优化为只获取管线,目前不清楚调用方式 GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); @@ -164,7 +166,7 @@ } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = diameter.ToString(); + featuresClass.groupFieldValue = diameter.ToString(CultureInfo.InvariantCulture); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -181,12 +183,11 @@ /// /// /// - public List groupAccessories(GSOGeoPolygon3D polygon, GSOLayer layer) + public List GroupAccessories(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; - List result = new List(); - GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + List result = new List(); //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); @@ -230,14 +231,14 @@ /// /// 材质 /// - public FeaturesClassfyResult groupPipeByMaterial(GSOGeoPolygon3D polygon, GSOLayer layer, string material) + public FeaturesClassfyResult GroupPipeByMaterial(GSOGeoPolygon3D polygon, GSOLayer layer, string material) { - if (layer == null) return null; + + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; FeaturesClassfyResult result = new FeaturesClassfyResult(); - GSOFeatureLayer flayer = layer as GSOFeatureLayer; - - //TODOLIST:优化为只获取管线,目前不清楚调用方式 + GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); string fixedMaterial = material == "无" ? "" : material; @@ -245,16 +246,12 @@ int ncount = 0; for (int i = 0; i < feats.Length; i++) { - if (feats[i].GetFieldAsString("材质").Equals(fixedMaterial)) - { - GSOGeoPolyline3D line = feats[i].Geometry as GSOGeoPolyline3D; - if (line != null) - { - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } - } + if (!feats[i].GetFieldAsString("材质").Equals(fixedMaterial)) continue; + GSOGeoPolyline3D line = feats[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } result.layerName = layer.Caption; @@ -271,12 +268,12 @@ /// /// 要统计的长度 /// - public static GSOFeatures getLayerPipes(GSOGeoPolygon3D polygon, GSOLayer layer, out double length) + public static GSOFeatures GetLayerPipes(GSOGeoPolygon3D polygon, GSOLayer layer, out double length) { length = 0; if (layer == null) return null; - GSOFeatures feats = getLayerFeatures(polygon, layer); + GSOFeatures feats = GetLayerFeatures(polygon, layer); double totallength = 0.00; for (int i = 0; i < feats.Length; i++) { @@ -298,10 +295,10 @@ /// /// /// - public static GSOFeatures getLayerFeatures(GSOGeoPolygon3D polygon, GSOLayer layer) + public static GSOFeatures GetLayerFeatures(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); } diff --git a/FrmAccessoriesgather.cs b/FrmAccessoriesgather.cs index c7787f7..e1d176e 100644 --- a/FrmAccessoriesgather.cs +++ b/FrmAccessoriesgather.cs @@ -213,7 +213,7 @@ { FeatureStatisticsService featureService = new FeatureStatisticsService(); GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layertype); - List accessoriesResult = featureService.groupAccessories(polygon, layer); + List accessoriesResult = featureService.GroupAccessories(polygon, layer); if (accessoriesResult == null || accessoriesResult.Count == 0) { diff --git a/FrmAllPipelineStatis.cs b/FrmAllPipelineStatis.cs index 60805ba..0911557 100644 --- a/FrmAllPipelineStatis.cs +++ b/FrmAllPipelineStatis.cs @@ -205,7 +205,7 @@ { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(pipeLayerNames[i]); double totalLength = 0.0; - GSOFeatures fs = FeatureStatisticsService.getLayerPipes(polygon, layer,out totalLength); + GSOFeatures fs = FeatureStatisticsService.GetLayerPipes(polygon, layer,out totalLength); if (fs == null) continue; nameAndPipeMap.Add(pipeLayerNames[i], fs); nameAndLengthMap.Add(pipeLayerNames[i],totalLength); diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 19511cc..e89f552 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -746,17 +746,17 @@ #region wxl 重构 碰撞审查,覆土审查,水平净距审查,垂直净距审查 - + //TODO LIST:UNDONE /// /// 获取跟选择管线垂直距离小于特定值的管线列表和选择管线的距离 /// - /// 地球 + /// 地球 /// 选择管线 - /// 各图层名称 + /// 各图层名称 /// 垂直距离 /// 管线列表,可为空 - public static Dictionary VerticalDistanceAnalysis(GSOGlobeControl globeControl1, - GSOFeature selectedFeature, List _pipelineLayerNames, double verticalDistance ) + public static Dictionary VerticalDistanceAnalysis(GSOGlobeControl globeControl, + GSOFeature selectedFeature, List pipelineLayerNames, double verticalDistance ) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -765,16 +765,13 @@ if (pipeStyle1 == null) return null; GSOGeoPolygon3D polygon = line1.CreateBuffer(0.1, true, 5, true, false);//要比较的区域 Dictionary result = new Dictionary(); - string caption = selectedFeature.Dataset.Caption; - - GSOPoint3d pntIntersect1, pntIntersect2,pntProIntersect1, pntProIntersect2 ; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue;//排除本图层 - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue;//排除本图层 + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); if (feats2 == null) continue; for (int j = 0; j < feats2.Length; j++) { @@ -783,7 +780,8 @@ if (line2 == null) continue; GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; - double dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, out pntIntersect1, + GSOPoint3d pntIntersect1, pntIntersect2, pntProIntersect1, pntProIntersect2; + double dDist = globeControl.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); if (dDist >= verticalDistance) continue;//不符合条件 result.Add(feat2,dDist); @@ -794,12 +792,12 @@ /// /// 获取与选定管线水平距离小于特定值的<管线,管线距离>Dictionary /// - /// + /// /// - /// + /// /// /// 选择的为空或不是管线则返回空,否则返回符合条件的Dictionary - public static Dictionary HorizontalDistanceAnalysis(GSOGlobeControl globeControl1,GSOFeature selectedFeature, List _pipelineLayerNames, double dis) + public static Dictionary HorizontalDistanceAnalysis(GSOGlobeControl globeControl,GSOFeature selectedFeature, List pipelineLayerNames, double dis) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -809,23 +807,23 @@ Dictionary result = new Dictionary(); string caption = selectedFeature.Dataset.Caption; GSOGeoPolygon3D polygon = line1.CreateBuffer(dis, true, 5, true, false); - GSOFeature new_feat = new GSOFeature(); - new_feat.Geometry = polygon; + GSOFeature newFeat = new GSOFeature(); + newFeat.Geometry = polygon; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue; - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue; + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); for (int j = 0; j < feats2.Length; j++) { GSOFeature feat2 = feats2[j]; GSOGeoPolyline3D line2 = feat2.Geometry as GSOGeoPolyline3D; if (line2 == null) continue; GSOPoint3d pntIntersect1, pntIntersect2, pntProIntersect1, pntProIntersect2; - double dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, out pntIntersect1, - out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + double dDist = globeControl.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, out pntIntersect1, + out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; result.Add(feat2,dDist); @@ -836,11 +834,11 @@ /// ///碰撞检测,获取与选择管线碰撞的管线 /// - /// 地球 + /// 地球 /// 选中的feature - /// 图层列表 + /// 图层列表 /// - public static GSOFeatures CollisionAnalysis(GSOGlobeControl globeControl1, GSOFeature selectedFeature, List _pipelineLayerNames) + public static GSOFeatures CollisionAnalysis(GSOGlobeControl globeControl, GSOFeature selectedFeature, List pipelineLayerNames) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -851,12 +849,12 @@ GSOFeatures result = new GSOFeatures(); string caption = selectedFeature.Dataset.Caption; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue;//排除本图层 - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue;//排除本图层 + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); if (feats2 == null) continue; for (int j = 0; j < feats2.Length; j++) { @@ -867,7 +865,7 @@ GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; GSOPoint3d pntIntersect1, pntIntersect2; - double dDist = globeControl1.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, + double dDist = globeControl.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, out pntIntersect2,out horLen,out verLen,true,true,dNoIntersetStartRatio); if (dDist <= 0 ) result.Add(feat2); } diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index fe32265..cfdaf5c 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using GeoScene.Data; using GeoScene.Globe; @@ -17,9 +18,9 @@ public static GSOFeatures Intersect_PointLayerByType(GSOGeoPolygon3D polygon, GSOLayer layer, string type) { - if (layer == null) return null; - GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + if (polygon == null) { @@ -48,7 +49,7 @@ /// ///附属物列表 /// - public Dictionary getFeatureCountByFeatures(GSOFeatures feats) + public Dictionary GetFeatureCountByFeatures(GSOFeatures feats) { if (feats == null || feats.Length == 0) return null; Dictionary result = new Dictionary(); @@ -64,13 +65,13 @@ /// /// /// - public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) + public FeaturesClassfyResult GetPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) { if (layer == null) return null; FeaturesClassfyResult result = new FeaturesClassfyResult(); double totalLength = 0.0; int ncount = 0; - GSOFeatures features = getPipesByValueSection(polygon, layer, min, max, fieldName); + GSOFeatures features = GetPipesByValueSection(polygon, layer, min, max, fieldName); for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; @@ -98,11 +99,12 @@ /// 上限 /// 统计类型:"起始埋深"或"管径_毫米" /// - public GSOFeatures getPipesByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) + public GSOFeatures GetPipesByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) { - if (layer == null) return null; - GSOFeatures result = new GSOFeatures(); + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + GSOFeatures result = new GSOFeatures(); //TODOLIST:优化为只获取管线,目前不清楚调用方式 GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); @@ -127,12 +129,12 @@ } //图层名称、管径、条数、总长度 - public List groupPipeByDiameter(GSOGeoPolygon3D polygon, GSOLayer layer) + public List GroupPipeByDiameter(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; - List result = new List(); - + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + List result = new List(); //TODOLIST:优化为只获取管线,目前不清楚调用方式 GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); @@ -164,7 +166,7 @@ } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = diameter.ToString(); + featuresClass.groupFieldValue = diameter.ToString(CultureInfo.InvariantCulture); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -181,12 +183,11 @@ /// /// /// - public List groupAccessories(GSOGeoPolygon3D polygon, GSOLayer layer) + public List GroupAccessories(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; - List result = new List(); - GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + List result = new List(); //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); @@ -230,14 +231,14 @@ /// /// 材质 /// - public FeaturesClassfyResult groupPipeByMaterial(GSOGeoPolygon3D polygon, GSOLayer layer, string material) + public FeaturesClassfyResult GroupPipeByMaterial(GSOGeoPolygon3D polygon, GSOLayer layer, string material) { - if (layer == null) return null; + + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; FeaturesClassfyResult result = new FeaturesClassfyResult(); - GSOFeatureLayer flayer = layer as GSOFeatureLayer; - - //TODOLIST:优化为只获取管线,目前不清楚调用方式 + GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); string fixedMaterial = material == "无" ? "" : material; @@ -245,16 +246,12 @@ int ncount = 0; for (int i = 0; i < feats.Length; i++) { - if (feats[i].GetFieldAsString("材质").Equals(fixedMaterial)) - { - GSOGeoPolyline3D line = feats[i].Geometry as GSOGeoPolyline3D; - if (line != null) - { - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } - } + if (!feats[i].GetFieldAsString("材质").Equals(fixedMaterial)) continue; + GSOGeoPolyline3D line = feats[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } result.layerName = layer.Caption; @@ -271,12 +268,12 @@ /// /// 要统计的长度 /// - public static GSOFeatures getLayerPipes(GSOGeoPolygon3D polygon, GSOLayer layer, out double length) + public static GSOFeatures GetLayerPipes(GSOGeoPolygon3D polygon, GSOLayer layer, out double length) { length = 0; if (layer == null) return null; - GSOFeatures feats = getLayerFeatures(polygon, layer); + GSOFeatures feats = GetLayerFeatures(polygon, layer); double totallength = 0.00; for (int i = 0; i < feats.Length; i++) { @@ -298,10 +295,10 @@ /// /// /// - public static GSOFeatures getLayerFeatures(GSOGeoPolygon3D polygon, GSOLayer layer) + public static GSOFeatures GetLayerFeatures(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); } diff --git a/FrmAccessoriesgather.cs b/FrmAccessoriesgather.cs index c7787f7..e1d176e 100644 --- a/FrmAccessoriesgather.cs +++ b/FrmAccessoriesgather.cs @@ -213,7 +213,7 @@ { FeatureStatisticsService featureService = new FeatureStatisticsService(); GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layertype); - List accessoriesResult = featureService.groupAccessories(polygon, layer); + List accessoriesResult = featureService.GroupAccessories(polygon, layer); if (accessoriesResult == null || accessoriesResult.Count == 0) { diff --git a/FrmAllPipelineStatis.cs b/FrmAllPipelineStatis.cs index 60805ba..0911557 100644 --- a/FrmAllPipelineStatis.cs +++ b/FrmAllPipelineStatis.cs @@ -205,7 +205,7 @@ { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(pipeLayerNames[i]); double totalLength = 0.0; - GSOFeatures fs = FeatureStatisticsService.getLayerPipes(polygon, layer,out totalLength); + GSOFeatures fs = FeatureStatisticsService.GetLayerPipes(polygon, layer,out totalLength); if (fs == null) continue; nameAndPipeMap.Add(pipeLayerNames[i], fs); nameAndLengthMap.Add(pipeLayerNames[i],totalLength); diff --git a/FrmBSQStatis.cs b/FrmBSQStatis.cs index 6f7838f..dd63f62 100644 --- a/FrmBSQStatis.cs +++ b/FrmBSQStatis.cs @@ -108,7 +108,7 @@ public Dictionary getBSQMapByPolygon(GSOGeoPolygon3D polygon,Dictionary typeAndCount, Dictionary codeAndType) { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption("标识器"); - GSOFeatures bsqFs = FeatureStatisticsService.getLayerFeatures(polygon, layer); + GSOFeatures bsqFs = FeatureStatisticsService.GetLayerFeatures(polygon, layer); if (bsqFs == null || bsqFs.Length <= 0) { LogHelper.WriteLog(typeof(FrmBSQStatis),"标识器图层下的Feature为空"); return null; diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 19511cc..e89f552 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -746,17 +746,17 @@ #region wxl 重构 碰撞审查,覆土审查,水平净距审查,垂直净距审查 - + //TODO LIST:UNDONE /// /// 获取跟选择管线垂直距离小于特定值的管线列表和选择管线的距离 /// - /// 地球 + /// 地球 /// 选择管线 - /// 各图层名称 + /// 各图层名称 /// 垂直距离 /// 管线列表,可为空 - public static Dictionary VerticalDistanceAnalysis(GSOGlobeControl globeControl1, - GSOFeature selectedFeature, List _pipelineLayerNames, double verticalDistance ) + public static Dictionary VerticalDistanceAnalysis(GSOGlobeControl globeControl, + GSOFeature selectedFeature, List pipelineLayerNames, double verticalDistance ) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -765,16 +765,13 @@ if (pipeStyle1 == null) return null; GSOGeoPolygon3D polygon = line1.CreateBuffer(0.1, true, 5, true, false);//要比较的区域 Dictionary result = new Dictionary(); - string caption = selectedFeature.Dataset.Caption; - - GSOPoint3d pntIntersect1, pntIntersect2,pntProIntersect1, pntProIntersect2 ; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue;//排除本图层 - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue;//排除本图层 + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); if (feats2 == null) continue; for (int j = 0; j < feats2.Length; j++) { @@ -783,7 +780,8 @@ if (line2 == null) continue; GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; - double dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, out pntIntersect1, + GSOPoint3d pntIntersect1, pntIntersect2, pntProIntersect1, pntProIntersect2; + double dDist = globeControl.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); if (dDist >= verticalDistance) continue;//不符合条件 result.Add(feat2,dDist); @@ -794,12 +792,12 @@ /// /// 获取与选定管线水平距离小于特定值的<管线,管线距离>Dictionary /// - /// + /// /// - /// + /// /// /// 选择的为空或不是管线则返回空,否则返回符合条件的Dictionary - public static Dictionary HorizontalDistanceAnalysis(GSOGlobeControl globeControl1,GSOFeature selectedFeature, List _pipelineLayerNames, double dis) + public static Dictionary HorizontalDistanceAnalysis(GSOGlobeControl globeControl,GSOFeature selectedFeature, List pipelineLayerNames, double dis) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -809,23 +807,23 @@ Dictionary result = new Dictionary(); string caption = selectedFeature.Dataset.Caption; GSOGeoPolygon3D polygon = line1.CreateBuffer(dis, true, 5, true, false); - GSOFeature new_feat = new GSOFeature(); - new_feat.Geometry = polygon; + GSOFeature newFeat = new GSOFeature(); + newFeat.Geometry = polygon; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue; - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue; + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); for (int j = 0; j < feats2.Length; j++) { GSOFeature feat2 = feats2[j]; GSOGeoPolyline3D line2 = feat2.Geometry as GSOGeoPolyline3D; if (line2 == null) continue; GSOPoint3d pntIntersect1, pntIntersect2, pntProIntersect1, pntProIntersect2; - double dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, out pntIntersect1, - out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + double dDist = globeControl.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, out pntIntersect1, + out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; result.Add(feat2,dDist); @@ -836,11 +834,11 @@ /// ///碰撞检测,获取与选择管线碰撞的管线 /// - /// 地球 + /// 地球 /// 选中的feature - /// 图层列表 + /// 图层列表 /// - public static GSOFeatures CollisionAnalysis(GSOGlobeControl globeControl1, GSOFeature selectedFeature, List _pipelineLayerNames) + public static GSOFeatures CollisionAnalysis(GSOGlobeControl globeControl, GSOFeature selectedFeature, List pipelineLayerNames) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -851,12 +849,12 @@ GSOFeatures result = new GSOFeatures(); string caption = selectedFeature.Dataset.Caption; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue;//排除本图层 - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue;//排除本图层 + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); if (feats2 == null) continue; for (int j = 0; j < feats2.Length; j++) { @@ -867,7 +865,7 @@ GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; GSOPoint3d pntIntersect1, pntIntersect2; - double dDist = globeControl1.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, + double dDist = globeControl.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, out pntIntersect2,out horLen,out verLen,true,true,dNoIntersetStartRatio); if (dDist <= 0 ) result.Add(feat2); } diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index fe32265..cfdaf5c 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using GeoScene.Data; using GeoScene.Globe; @@ -17,9 +18,9 @@ public static GSOFeatures Intersect_PointLayerByType(GSOGeoPolygon3D polygon, GSOLayer layer, string type) { - if (layer == null) return null; - GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + if (polygon == null) { @@ -48,7 +49,7 @@ /// ///附属物列表 /// - public Dictionary getFeatureCountByFeatures(GSOFeatures feats) + public Dictionary GetFeatureCountByFeatures(GSOFeatures feats) { if (feats == null || feats.Length == 0) return null; Dictionary result = new Dictionary(); @@ -64,13 +65,13 @@ /// /// /// - public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) + public FeaturesClassfyResult GetPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) { if (layer == null) return null; FeaturesClassfyResult result = new FeaturesClassfyResult(); double totalLength = 0.0; int ncount = 0; - GSOFeatures features = getPipesByValueSection(polygon, layer, min, max, fieldName); + GSOFeatures features = GetPipesByValueSection(polygon, layer, min, max, fieldName); for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; @@ -98,11 +99,12 @@ /// 上限 /// 统计类型:"起始埋深"或"管径_毫米" /// - public GSOFeatures getPipesByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) + public GSOFeatures GetPipesByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) { - if (layer == null) return null; - GSOFeatures result = new GSOFeatures(); + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + GSOFeatures result = new GSOFeatures(); //TODOLIST:优化为只获取管线,目前不清楚调用方式 GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); @@ -127,12 +129,12 @@ } //图层名称、管径、条数、总长度 - public List groupPipeByDiameter(GSOGeoPolygon3D polygon, GSOLayer layer) + public List GroupPipeByDiameter(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; - List result = new List(); - + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + List result = new List(); //TODOLIST:优化为只获取管线,目前不清楚调用方式 GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); @@ -164,7 +166,7 @@ } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = diameter.ToString(); + featuresClass.groupFieldValue = diameter.ToString(CultureInfo.InvariantCulture); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -181,12 +183,11 @@ /// /// /// - public List groupAccessories(GSOGeoPolygon3D polygon, GSOLayer layer) + public List GroupAccessories(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; - List result = new List(); - GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + List result = new List(); //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); @@ -230,14 +231,14 @@ /// /// 材质 /// - public FeaturesClassfyResult groupPipeByMaterial(GSOGeoPolygon3D polygon, GSOLayer layer, string material) + public FeaturesClassfyResult GroupPipeByMaterial(GSOGeoPolygon3D polygon, GSOLayer layer, string material) { - if (layer == null) return null; + + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; FeaturesClassfyResult result = new FeaturesClassfyResult(); - GSOFeatureLayer flayer = layer as GSOFeatureLayer; - - //TODOLIST:优化为只获取管线,目前不清楚调用方式 + GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); string fixedMaterial = material == "无" ? "" : material; @@ -245,16 +246,12 @@ int ncount = 0; for (int i = 0; i < feats.Length; i++) { - if (feats[i].GetFieldAsString("材质").Equals(fixedMaterial)) - { - GSOGeoPolyline3D line = feats[i].Geometry as GSOGeoPolyline3D; - if (line != null) - { - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } - } + if (!feats[i].GetFieldAsString("材质").Equals(fixedMaterial)) continue; + GSOGeoPolyline3D line = feats[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } result.layerName = layer.Caption; @@ -271,12 +268,12 @@ /// /// 要统计的长度 /// - public static GSOFeatures getLayerPipes(GSOGeoPolygon3D polygon, GSOLayer layer, out double length) + public static GSOFeatures GetLayerPipes(GSOGeoPolygon3D polygon, GSOLayer layer, out double length) { length = 0; if (layer == null) return null; - GSOFeatures feats = getLayerFeatures(polygon, layer); + GSOFeatures feats = GetLayerFeatures(polygon, layer); double totallength = 0.00; for (int i = 0; i < feats.Length; i++) { @@ -298,10 +295,10 @@ /// /// /// - public static GSOFeatures getLayerFeatures(GSOGeoPolygon3D polygon, GSOLayer layer) + public static GSOFeatures GetLayerFeatures(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); } diff --git a/FrmAccessoriesgather.cs b/FrmAccessoriesgather.cs index c7787f7..e1d176e 100644 --- a/FrmAccessoriesgather.cs +++ b/FrmAccessoriesgather.cs @@ -213,7 +213,7 @@ { FeatureStatisticsService featureService = new FeatureStatisticsService(); GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layertype); - List accessoriesResult = featureService.groupAccessories(polygon, layer); + List accessoriesResult = featureService.GroupAccessories(polygon, layer); if (accessoriesResult == null || accessoriesResult.Count == 0) { diff --git a/FrmAllPipelineStatis.cs b/FrmAllPipelineStatis.cs index 60805ba..0911557 100644 --- a/FrmAllPipelineStatis.cs +++ b/FrmAllPipelineStatis.cs @@ -205,7 +205,7 @@ { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(pipeLayerNames[i]); double totalLength = 0.0; - GSOFeatures fs = FeatureStatisticsService.getLayerPipes(polygon, layer,out totalLength); + GSOFeatures fs = FeatureStatisticsService.GetLayerPipes(polygon, layer,out totalLength); if (fs == null) continue; nameAndPipeMap.Add(pipeLayerNames[i], fs); nameAndLengthMap.Add(pipeLayerNames[i],totalLength); diff --git a/FrmBSQStatis.cs b/FrmBSQStatis.cs index 6f7838f..dd63f62 100644 --- a/FrmBSQStatis.cs +++ b/FrmBSQStatis.cs @@ -108,7 +108,7 @@ public Dictionary getBSQMapByPolygon(GSOGeoPolygon3D polygon,Dictionary typeAndCount, Dictionary codeAndType) { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption("标识器"); - GSOFeatures bsqFs = FeatureStatisticsService.getLayerFeatures(polygon, layer); + GSOFeatures bsqFs = FeatureStatisticsService.GetLayerFeatures(polygon, layer); if (bsqFs == null || bsqFs.Length <= 0) { LogHelper.WriteLog(typeof(FrmBSQStatis),"标识器图层下的Feature为空"); return null; diff --git a/FrmpipeDeepstatis.cs b/FrmpipeDeepstatis.cs index e00a1dc..6a5c895 100644 --- a/FrmpipeDeepstatis.cs +++ b/FrmpipeDeepstatis.cs @@ -148,7 +148,7 @@ //Double downLimit = Convert.ToDouble(dataGridViewX2.Rows[j].Cells["下限"].Value); if (upLimit == null && downLimit == null) continue;//空行过滤 //获取符合条件的管线 - FeaturesClassfyResult result = service.getPipesInfoByValueSection(polygon, layer, downLimit, upLimit, "起始埋深"); + FeaturesClassfyResult result = service.GetPipesInfoByValueSection(polygon, layer, downLimit, upLimit, "起始埋深"); DataGridViewRow row = new DataGridViewRow(); int index = dataGridViewX1.Rows.Add(row); row = dataGridViewX1.Rows[index]; diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 19511cc..e89f552 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -746,17 +746,17 @@ #region wxl 重构 碰撞审查,覆土审查,水平净距审查,垂直净距审查 - + //TODO LIST:UNDONE /// /// 获取跟选择管线垂直距离小于特定值的管线列表和选择管线的距离 /// - /// 地球 + /// 地球 /// 选择管线 - /// 各图层名称 + /// 各图层名称 /// 垂直距离 /// 管线列表,可为空 - public static Dictionary VerticalDistanceAnalysis(GSOGlobeControl globeControl1, - GSOFeature selectedFeature, List _pipelineLayerNames, double verticalDistance ) + public static Dictionary VerticalDistanceAnalysis(GSOGlobeControl globeControl, + GSOFeature selectedFeature, List pipelineLayerNames, double verticalDistance ) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -765,16 +765,13 @@ if (pipeStyle1 == null) return null; GSOGeoPolygon3D polygon = line1.CreateBuffer(0.1, true, 5, true, false);//要比较的区域 Dictionary result = new Dictionary(); - string caption = selectedFeature.Dataset.Caption; - - GSOPoint3d pntIntersect1, pntIntersect2,pntProIntersect1, pntProIntersect2 ; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue;//排除本图层 - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue;//排除本图层 + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); if (feats2 == null) continue; for (int j = 0; j < feats2.Length; j++) { @@ -783,7 +780,8 @@ if (line2 == null) continue; GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; - double dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, out pntIntersect1, + GSOPoint3d pntIntersect1, pntIntersect2, pntProIntersect1, pntProIntersect2; + double dDist = globeControl.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); if (dDist >= verticalDistance) continue;//不符合条件 result.Add(feat2,dDist); @@ -794,12 +792,12 @@ /// /// 获取与选定管线水平距离小于特定值的<管线,管线距离>Dictionary /// - /// + /// /// - /// + /// /// /// 选择的为空或不是管线则返回空,否则返回符合条件的Dictionary - public static Dictionary HorizontalDistanceAnalysis(GSOGlobeControl globeControl1,GSOFeature selectedFeature, List _pipelineLayerNames, double dis) + public static Dictionary HorizontalDistanceAnalysis(GSOGlobeControl globeControl,GSOFeature selectedFeature, List pipelineLayerNames, double dis) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -809,23 +807,23 @@ Dictionary result = new Dictionary(); string caption = selectedFeature.Dataset.Caption; GSOGeoPolygon3D polygon = line1.CreateBuffer(dis, true, 5, true, false); - GSOFeature new_feat = new GSOFeature(); - new_feat.Geometry = polygon; + GSOFeature newFeat = new GSOFeature(); + newFeat.Geometry = polygon; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue; - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue; + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); for (int j = 0; j < feats2.Length; j++) { GSOFeature feat2 = feats2[j]; GSOGeoPolyline3D line2 = feat2.Geometry as GSOGeoPolyline3D; if (line2 == null) continue; GSOPoint3d pntIntersect1, pntIntersect2, pntProIntersect1, pntProIntersect2; - double dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, out pntIntersect1, - out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + double dDist = globeControl.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, out pntIntersect1, + out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; result.Add(feat2,dDist); @@ -836,11 +834,11 @@ /// ///碰撞检测,获取与选择管线碰撞的管线 /// - /// 地球 + /// 地球 /// 选中的feature - /// 图层列表 + /// 图层列表 /// - public static GSOFeatures CollisionAnalysis(GSOGlobeControl globeControl1, GSOFeature selectedFeature, List _pipelineLayerNames) + public static GSOFeatures CollisionAnalysis(GSOGlobeControl globeControl, GSOFeature selectedFeature, List pipelineLayerNames) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -851,12 +849,12 @@ GSOFeatures result = new GSOFeatures(); string caption = selectedFeature.Dataset.Caption; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue;//排除本图层 - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue;//排除本图层 + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); if (feats2 == null) continue; for (int j = 0; j < feats2.Length; j++) { @@ -867,7 +865,7 @@ GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; GSOPoint3d pntIntersect1, pntIntersect2; - double dDist = globeControl1.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, + double dDist = globeControl.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, out pntIntersect2,out horLen,out verLen,true,true,dNoIntersetStartRatio); if (dDist <= 0 ) result.Add(feat2); } diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index fe32265..cfdaf5c 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using GeoScene.Data; using GeoScene.Globe; @@ -17,9 +18,9 @@ public static GSOFeatures Intersect_PointLayerByType(GSOGeoPolygon3D polygon, GSOLayer layer, string type) { - if (layer == null) return null; - GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + if (polygon == null) { @@ -48,7 +49,7 @@ /// ///附属物列表 /// - public Dictionary getFeatureCountByFeatures(GSOFeatures feats) + public Dictionary GetFeatureCountByFeatures(GSOFeatures feats) { if (feats == null || feats.Length == 0) return null; Dictionary result = new Dictionary(); @@ -64,13 +65,13 @@ /// /// /// - public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) + public FeaturesClassfyResult GetPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) { if (layer == null) return null; FeaturesClassfyResult result = new FeaturesClassfyResult(); double totalLength = 0.0; int ncount = 0; - GSOFeatures features = getPipesByValueSection(polygon, layer, min, max, fieldName); + GSOFeatures features = GetPipesByValueSection(polygon, layer, min, max, fieldName); for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; @@ -98,11 +99,12 @@ /// 上限 /// 统计类型:"起始埋深"或"管径_毫米" /// - public GSOFeatures getPipesByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) + public GSOFeatures GetPipesByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) { - if (layer == null) return null; - GSOFeatures result = new GSOFeatures(); + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + GSOFeatures result = new GSOFeatures(); //TODOLIST:优化为只获取管线,目前不清楚调用方式 GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); @@ -127,12 +129,12 @@ } //图层名称、管径、条数、总长度 - public List groupPipeByDiameter(GSOGeoPolygon3D polygon, GSOLayer layer) + public List GroupPipeByDiameter(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; - List result = new List(); - + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + List result = new List(); //TODOLIST:优化为只获取管线,目前不清楚调用方式 GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); @@ -164,7 +166,7 @@ } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = diameter.ToString(); + featuresClass.groupFieldValue = diameter.ToString(CultureInfo.InvariantCulture); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -181,12 +183,11 @@ /// /// /// - public List groupAccessories(GSOGeoPolygon3D polygon, GSOLayer layer) + public List GroupAccessories(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; - List result = new List(); - GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + List result = new List(); //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); @@ -230,14 +231,14 @@ /// /// 材质 /// - public FeaturesClassfyResult groupPipeByMaterial(GSOGeoPolygon3D polygon, GSOLayer layer, string material) + public FeaturesClassfyResult GroupPipeByMaterial(GSOGeoPolygon3D polygon, GSOLayer layer, string material) { - if (layer == null) return null; + + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; FeaturesClassfyResult result = new FeaturesClassfyResult(); - GSOFeatureLayer flayer = layer as GSOFeatureLayer; - - //TODOLIST:优化为只获取管线,目前不清楚调用方式 + GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); string fixedMaterial = material == "无" ? "" : material; @@ -245,16 +246,12 @@ int ncount = 0; for (int i = 0; i < feats.Length; i++) { - if (feats[i].GetFieldAsString("材质").Equals(fixedMaterial)) - { - GSOGeoPolyline3D line = feats[i].Geometry as GSOGeoPolyline3D; - if (line != null) - { - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } - } + if (!feats[i].GetFieldAsString("材质").Equals(fixedMaterial)) continue; + GSOGeoPolyline3D line = feats[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } result.layerName = layer.Caption; @@ -271,12 +268,12 @@ /// /// 要统计的长度 /// - public static GSOFeatures getLayerPipes(GSOGeoPolygon3D polygon, GSOLayer layer, out double length) + public static GSOFeatures GetLayerPipes(GSOGeoPolygon3D polygon, GSOLayer layer, out double length) { length = 0; if (layer == null) return null; - GSOFeatures feats = getLayerFeatures(polygon, layer); + GSOFeatures feats = GetLayerFeatures(polygon, layer); double totallength = 0.00; for (int i = 0; i < feats.Length; i++) { @@ -298,10 +295,10 @@ /// /// /// - public static GSOFeatures getLayerFeatures(GSOGeoPolygon3D polygon, GSOLayer layer) + public static GSOFeatures GetLayerFeatures(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); } diff --git a/FrmAccessoriesgather.cs b/FrmAccessoriesgather.cs index c7787f7..e1d176e 100644 --- a/FrmAccessoriesgather.cs +++ b/FrmAccessoriesgather.cs @@ -213,7 +213,7 @@ { FeatureStatisticsService featureService = new FeatureStatisticsService(); GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layertype); - List accessoriesResult = featureService.groupAccessories(polygon, layer); + List accessoriesResult = featureService.GroupAccessories(polygon, layer); if (accessoriesResult == null || accessoriesResult.Count == 0) { diff --git a/FrmAllPipelineStatis.cs b/FrmAllPipelineStatis.cs index 60805ba..0911557 100644 --- a/FrmAllPipelineStatis.cs +++ b/FrmAllPipelineStatis.cs @@ -205,7 +205,7 @@ { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(pipeLayerNames[i]); double totalLength = 0.0; - GSOFeatures fs = FeatureStatisticsService.getLayerPipes(polygon, layer,out totalLength); + GSOFeatures fs = FeatureStatisticsService.GetLayerPipes(polygon, layer,out totalLength); if (fs == null) continue; nameAndPipeMap.Add(pipeLayerNames[i], fs); nameAndLengthMap.Add(pipeLayerNames[i],totalLength); diff --git a/FrmBSQStatis.cs b/FrmBSQStatis.cs index 6f7838f..dd63f62 100644 --- a/FrmBSQStatis.cs +++ b/FrmBSQStatis.cs @@ -108,7 +108,7 @@ public Dictionary getBSQMapByPolygon(GSOGeoPolygon3D polygon,Dictionary typeAndCount, Dictionary codeAndType) { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption("标识器"); - GSOFeatures bsqFs = FeatureStatisticsService.getLayerFeatures(polygon, layer); + GSOFeatures bsqFs = FeatureStatisticsService.GetLayerFeatures(polygon, layer); if (bsqFs == null || bsqFs.Length <= 0) { LogHelper.WriteLog(typeof(FrmBSQStatis),"标识器图层下的Feature为空"); return null; diff --git a/FrmpipeDeepstatis.cs b/FrmpipeDeepstatis.cs index e00a1dc..6a5c895 100644 --- a/FrmpipeDeepstatis.cs +++ b/FrmpipeDeepstatis.cs @@ -148,7 +148,7 @@ //Double downLimit = Convert.ToDouble(dataGridViewX2.Rows[j].Cells["下限"].Value); if (upLimit == null && downLimit == null) continue;//空行过滤 //获取符合条件的管线 - FeaturesClassfyResult result = service.getPipesInfoByValueSection(polygon, layer, downLimit, upLimit, "起始埋深"); + FeaturesClassfyResult result = service.GetPipesInfoByValueSection(polygon, layer, downLimit, upLimit, "起始埋深"); DataGridViewRow row = new DataGridViewRow(); int index = dataGridViewX1.Rows.Add(row); row = dataGridViewX1.Rows[index]; diff --git a/FrmpipeDiametergather.cs b/FrmpipeDiametergather.cs index 132ab7f..a9d96fa 100644 --- a/FrmpipeDiametergather.cs +++ b/FrmpipeDiametergather.cs @@ -176,7 +176,7 @@ for (int i = 0; i < clbPipeLine.CheckedItems.Count; i++) { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(clbPipeLine.CheckedItems[i].ToString()); - List results = service.groupPipeByDiameter(polygon,layer); + List results = service.GroupPipeByDiameter(polygon,layer); foreach(FeaturesClassfyResult result in results){ DataGridViewRow row = new DataGridViewRow(); diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 19511cc..e89f552 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -746,17 +746,17 @@ #region wxl 重构 碰撞审查,覆土审查,水平净距审查,垂直净距审查 - + //TODO LIST:UNDONE /// /// 获取跟选择管线垂直距离小于特定值的管线列表和选择管线的距离 /// - /// 地球 + /// 地球 /// 选择管线 - /// 各图层名称 + /// 各图层名称 /// 垂直距离 /// 管线列表,可为空 - public static Dictionary VerticalDistanceAnalysis(GSOGlobeControl globeControl1, - GSOFeature selectedFeature, List _pipelineLayerNames, double verticalDistance ) + public static Dictionary VerticalDistanceAnalysis(GSOGlobeControl globeControl, + GSOFeature selectedFeature, List pipelineLayerNames, double verticalDistance ) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -765,16 +765,13 @@ if (pipeStyle1 == null) return null; GSOGeoPolygon3D polygon = line1.CreateBuffer(0.1, true, 5, true, false);//要比较的区域 Dictionary result = new Dictionary(); - string caption = selectedFeature.Dataset.Caption; - - GSOPoint3d pntIntersect1, pntIntersect2,pntProIntersect1, pntProIntersect2 ; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue;//排除本图层 - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue;//排除本图层 + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); if (feats2 == null) continue; for (int j = 0; j < feats2.Length; j++) { @@ -783,7 +780,8 @@ if (line2 == null) continue; GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; - double dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, out pntIntersect1, + GSOPoint3d pntIntersect1, pntIntersect2, pntProIntersect1, pntProIntersect2; + double dDist = globeControl.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); if (dDist >= verticalDistance) continue;//不符合条件 result.Add(feat2,dDist); @@ -794,12 +792,12 @@ /// /// 获取与选定管线水平距离小于特定值的<管线,管线距离>Dictionary /// - /// + /// /// - /// + /// /// /// 选择的为空或不是管线则返回空,否则返回符合条件的Dictionary - public static Dictionary HorizontalDistanceAnalysis(GSOGlobeControl globeControl1,GSOFeature selectedFeature, List _pipelineLayerNames, double dis) + public static Dictionary HorizontalDistanceAnalysis(GSOGlobeControl globeControl,GSOFeature selectedFeature, List pipelineLayerNames, double dis) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -809,23 +807,23 @@ Dictionary result = new Dictionary(); string caption = selectedFeature.Dataset.Caption; GSOGeoPolygon3D polygon = line1.CreateBuffer(dis, true, 5, true, false); - GSOFeature new_feat = new GSOFeature(); - new_feat.Geometry = polygon; + GSOFeature newFeat = new GSOFeature(); + newFeat.Geometry = polygon; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue; - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue; + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); for (int j = 0; j < feats2.Length; j++) { GSOFeature feat2 = feats2[j]; GSOGeoPolyline3D line2 = feat2.Geometry as GSOGeoPolyline3D; if (line2 == null) continue; GSOPoint3d pntIntersect1, pntIntersect2, pntProIntersect1, pntProIntersect2; - double dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, out pntIntersect1, - out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + double dDist = globeControl.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, out pntIntersect1, + out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; result.Add(feat2,dDist); @@ -836,11 +834,11 @@ /// ///碰撞检测,获取与选择管线碰撞的管线 /// - /// 地球 + /// 地球 /// 选中的feature - /// 图层列表 + /// 图层列表 /// - public static GSOFeatures CollisionAnalysis(GSOGlobeControl globeControl1, GSOFeature selectedFeature, List _pipelineLayerNames) + public static GSOFeatures CollisionAnalysis(GSOGlobeControl globeControl, GSOFeature selectedFeature, List pipelineLayerNames) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -851,12 +849,12 @@ GSOFeatures result = new GSOFeatures(); string caption = selectedFeature.Dataset.Caption; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue;//排除本图层 - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue;//排除本图层 + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); if (feats2 == null) continue; for (int j = 0; j < feats2.Length; j++) { @@ -867,7 +865,7 @@ GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; GSOPoint3d pntIntersect1, pntIntersect2; - double dDist = globeControl1.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, + double dDist = globeControl.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, out pntIntersect2,out horLen,out verLen,true,true,dNoIntersetStartRatio); if (dDist <= 0 ) result.Add(feat2); } diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index fe32265..cfdaf5c 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using GeoScene.Data; using GeoScene.Globe; @@ -17,9 +18,9 @@ public static GSOFeatures Intersect_PointLayerByType(GSOGeoPolygon3D polygon, GSOLayer layer, string type) { - if (layer == null) return null; - GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + if (polygon == null) { @@ -48,7 +49,7 @@ /// ///附属物列表 /// - public Dictionary getFeatureCountByFeatures(GSOFeatures feats) + public Dictionary GetFeatureCountByFeatures(GSOFeatures feats) { if (feats == null || feats.Length == 0) return null; Dictionary result = new Dictionary(); @@ -64,13 +65,13 @@ /// /// /// - public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) + public FeaturesClassfyResult GetPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) { if (layer == null) return null; FeaturesClassfyResult result = new FeaturesClassfyResult(); double totalLength = 0.0; int ncount = 0; - GSOFeatures features = getPipesByValueSection(polygon, layer, min, max, fieldName); + GSOFeatures features = GetPipesByValueSection(polygon, layer, min, max, fieldName); for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; @@ -98,11 +99,12 @@ /// 上限 /// 统计类型:"起始埋深"或"管径_毫米" /// - public GSOFeatures getPipesByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) + public GSOFeatures GetPipesByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) { - if (layer == null) return null; - GSOFeatures result = new GSOFeatures(); + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + GSOFeatures result = new GSOFeatures(); //TODOLIST:优化为只获取管线,目前不清楚调用方式 GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); @@ -127,12 +129,12 @@ } //图层名称、管径、条数、总长度 - public List groupPipeByDiameter(GSOGeoPolygon3D polygon, GSOLayer layer) + public List GroupPipeByDiameter(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; - List result = new List(); - + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + List result = new List(); //TODOLIST:优化为只获取管线,目前不清楚调用方式 GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); @@ -164,7 +166,7 @@ } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = diameter.ToString(); + featuresClass.groupFieldValue = diameter.ToString(CultureInfo.InvariantCulture); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -181,12 +183,11 @@ /// /// /// - public List groupAccessories(GSOGeoPolygon3D polygon, GSOLayer layer) + public List GroupAccessories(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; - List result = new List(); - GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + List result = new List(); //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); @@ -230,14 +231,14 @@ /// /// 材质 /// - public FeaturesClassfyResult groupPipeByMaterial(GSOGeoPolygon3D polygon, GSOLayer layer, string material) + public FeaturesClassfyResult GroupPipeByMaterial(GSOGeoPolygon3D polygon, GSOLayer layer, string material) { - if (layer == null) return null; + + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; FeaturesClassfyResult result = new FeaturesClassfyResult(); - GSOFeatureLayer flayer = layer as GSOFeatureLayer; - - //TODOLIST:优化为只获取管线,目前不清楚调用方式 + GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); string fixedMaterial = material == "无" ? "" : material; @@ -245,16 +246,12 @@ int ncount = 0; for (int i = 0; i < feats.Length; i++) { - if (feats[i].GetFieldAsString("材质").Equals(fixedMaterial)) - { - GSOGeoPolyline3D line = feats[i].Geometry as GSOGeoPolyline3D; - if (line != null) - { - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } - } + if (!feats[i].GetFieldAsString("材质").Equals(fixedMaterial)) continue; + GSOGeoPolyline3D line = feats[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } result.layerName = layer.Caption; @@ -271,12 +268,12 @@ /// /// 要统计的长度 /// - public static GSOFeatures getLayerPipes(GSOGeoPolygon3D polygon, GSOLayer layer, out double length) + public static GSOFeatures GetLayerPipes(GSOGeoPolygon3D polygon, GSOLayer layer, out double length) { length = 0; if (layer == null) return null; - GSOFeatures feats = getLayerFeatures(polygon, layer); + GSOFeatures feats = GetLayerFeatures(polygon, layer); double totallength = 0.00; for (int i = 0; i < feats.Length; i++) { @@ -298,10 +295,10 @@ /// /// /// - public static GSOFeatures getLayerFeatures(GSOGeoPolygon3D polygon, GSOLayer layer) + public static GSOFeatures GetLayerFeatures(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); } diff --git a/FrmAccessoriesgather.cs b/FrmAccessoriesgather.cs index c7787f7..e1d176e 100644 --- a/FrmAccessoriesgather.cs +++ b/FrmAccessoriesgather.cs @@ -213,7 +213,7 @@ { FeatureStatisticsService featureService = new FeatureStatisticsService(); GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layertype); - List accessoriesResult = featureService.groupAccessories(polygon, layer); + List accessoriesResult = featureService.GroupAccessories(polygon, layer); if (accessoriesResult == null || accessoriesResult.Count == 0) { diff --git a/FrmAllPipelineStatis.cs b/FrmAllPipelineStatis.cs index 60805ba..0911557 100644 --- a/FrmAllPipelineStatis.cs +++ b/FrmAllPipelineStatis.cs @@ -205,7 +205,7 @@ { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(pipeLayerNames[i]); double totalLength = 0.0; - GSOFeatures fs = FeatureStatisticsService.getLayerPipes(polygon, layer,out totalLength); + GSOFeatures fs = FeatureStatisticsService.GetLayerPipes(polygon, layer,out totalLength); if (fs == null) continue; nameAndPipeMap.Add(pipeLayerNames[i], fs); nameAndLengthMap.Add(pipeLayerNames[i],totalLength); diff --git a/FrmBSQStatis.cs b/FrmBSQStatis.cs index 6f7838f..dd63f62 100644 --- a/FrmBSQStatis.cs +++ b/FrmBSQStatis.cs @@ -108,7 +108,7 @@ public Dictionary getBSQMapByPolygon(GSOGeoPolygon3D polygon,Dictionary typeAndCount, Dictionary codeAndType) { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption("标识器"); - GSOFeatures bsqFs = FeatureStatisticsService.getLayerFeatures(polygon, layer); + GSOFeatures bsqFs = FeatureStatisticsService.GetLayerFeatures(polygon, layer); if (bsqFs == null || bsqFs.Length <= 0) { LogHelper.WriteLog(typeof(FrmBSQStatis),"标识器图层下的Feature为空"); return null; diff --git a/FrmpipeDeepstatis.cs b/FrmpipeDeepstatis.cs index e00a1dc..6a5c895 100644 --- a/FrmpipeDeepstatis.cs +++ b/FrmpipeDeepstatis.cs @@ -148,7 +148,7 @@ //Double downLimit = Convert.ToDouble(dataGridViewX2.Rows[j].Cells["下限"].Value); if (upLimit == null && downLimit == null) continue;//空行过滤 //获取符合条件的管线 - FeaturesClassfyResult result = service.getPipesInfoByValueSection(polygon, layer, downLimit, upLimit, "起始埋深"); + FeaturesClassfyResult result = service.GetPipesInfoByValueSection(polygon, layer, downLimit, upLimit, "起始埋深"); DataGridViewRow row = new DataGridViewRow(); int index = dataGridViewX1.Rows.Add(row); row = dataGridViewX1.Rows[index]; diff --git a/FrmpipeDiametergather.cs b/FrmpipeDiametergather.cs index 132ab7f..a9d96fa 100644 --- a/FrmpipeDiametergather.cs +++ b/FrmpipeDiametergather.cs @@ -176,7 +176,7 @@ for (int i = 0; i < clbPipeLine.CheckedItems.Count; i++) { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(clbPipeLine.CheckedItems[i].ToString()); - List results = service.groupPipeByDiameter(polygon,layer); + List results = service.GroupPipeByDiameter(polygon,layer); foreach(FeaturesClassfyResult result in results){ DataGridViewRow row = new DataGridViewRow(); diff --git a/FrmpipeMaterialGather.cs b/FrmpipeMaterialGather.cs index ec71951..44e7f24 100644 --- a/FrmpipeMaterialGather.cs +++ b/FrmpipeMaterialGather.cs @@ -164,7 +164,7 @@ for (int j = 0; j < clbmaterials.CheckedItems.Count; j++) { - FeaturesClassfyResult featureResult = featureService.groupPipeByMaterial(polygon, layer, clbmaterials.CheckedItems[j].ToString()); + FeaturesClassfyResult featureResult = featureService.GroupPipeByMaterial(polygon, layer, clbmaterials.CheckedItems[j].ToString()); DataGridViewRow row = new DataGridViewRow(); int index = dataGridViewX1.Rows.Add(row); row = dataGridViewX1.Rows[index]; diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 19511cc..e89f552 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -746,17 +746,17 @@ #region wxl 重构 碰撞审查,覆土审查,水平净距审查,垂直净距审查 - + //TODO LIST:UNDONE /// /// 获取跟选择管线垂直距离小于特定值的管线列表和选择管线的距离 /// - /// 地球 + /// 地球 /// 选择管线 - /// 各图层名称 + /// 各图层名称 /// 垂直距离 /// 管线列表,可为空 - public static Dictionary VerticalDistanceAnalysis(GSOGlobeControl globeControl1, - GSOFeature selectedFeature, List _pipelineLayerNames, double verticalDistance ) + public static Dictionary VerticalDistanceAnalysis(GSOGlobeControl globeControl, + GSOFeature selectedFeature, List pipelineLayerNames, double verticalDistance ) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -765,16 +765,13 @@ if (pipeStyle1 == null) return null; GSOGeoPolygon3D polygon = line1.CreateBuffer(0.1, true, 5, true, false);//要比较的区域 Dictionary result = new Dictionary(); - string caption = selectedFeature.Dataset.Caption; - - GSOPoint3d pntIntersect1, pntIntersect2,pntProIntersect1, pntProIntersect2 ; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue;//排除本图层 - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue;//排除本图层 + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); if (feats2 == null) continue; for (int j = 0; j < feats2.Length; j++) { @@ -783,7 +780,8 @@ if (line2 == null) continue; GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; - double dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, out pntIntersect1, + GSOPoint3d pntIntersect1, pntIntersect2, pntProIntersect1, pntProIntersect2; + double dDist = globeControl.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); if (dDist >= verticalDistance) continue;//不符合条件 result.Add(feat2,dDist); @@ -794,12 +792,12 @@ /// /// 获取与选定管线水平距离小于特定值的<管线,管线距离>Dictionary /// - /// + /// /// - /// + /// /// /// 选择的为空或不是管线则返回空,否则返回符合条件的Dictionary - public static Dictionary HorizontalDistanceAnalysis(GSOGlobeControl globeControl1,GSOFeature selectedFeature, List _pipelineLayerNames, double dis) + public static Dictionary HorizontalDistanceAnalysis(GSOGlobeControl globeControl,GSOFeature selectedFeature, List pipelineLayerNames, double dis) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -809,23 +807,23 @@ Dictionary result = new Dictionary(); string caption = selectedFeature.Dataset.Caption; GSOGeoPolygon3D polygon = line1.CreateBuffer(dis, true, 5, true, false); - GSOFeature new_feat = new GSOFeature(); - new_feat.Geometry = polygon; + GSOFeature newFeat = new GSOFeature(); + newFeat.Geometry = polygon; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue; - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue; + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); for (int j = 0; j < feats2.Length; j++) { GSOFeature feat2 = feats2[j]; GSOGeoPolyline3D line2 = feat2.Geometry as GSOGeoPolyline3D; if (line2 == null) continue; GSOPoint3d pntIntersect1, pntIntersect2, pntProIntersect1, pntProIntersect2; - double dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, out pntIntersect1, - out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + double dDist = globeControl.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, out pntIntersect1, + out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; result.Add(feat2,dDist); @@ -836,11 +834,11 @@ /// ///碰撞检测,获取与选择管线碰撞的管线 /// - /// 地球 + /// 地球 /// 选中的feature - /// 图层列表 + /// 图层列表 /// - public static GSOFeatures CollisionAnalysis(GSOGlobeControl globeControl1, GSOFeature selectedFeature, List _pipelineLayerNames) + public static GSOFeatures CollisionAnalysis(GSOGlobeControl globeControl, GSOFeature selectedFeature, List pipelineLayerNames) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -851,12 +849,12 @@ GSOFeatures result = new GSOFeatures(); string caption = selectedFeature.Dataset.Caption; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue;//排除本图层 - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue;//排除本图层 + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); if (feats2 == null) continue; for (int j = 0; j < feats2.Length; j++) { @@ -867,7 +865,7 @@ GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; GSOPoint3d pntIntersect1, pntIntersect2; - double dDist = globeControl1.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, + double dDist = globeControl.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, out pntIntersect2,out horLen,out verLen,true,true,dNoIntersetStartRatio); if (dDist <= 0 ) result.Add(feat2); } diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index fe32265..cfdaf5c 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using GeoScene.Data; using GeoScene.Globe; @@ -17,9 +18,9 @@ public static GSOFeatures Intersect_PointLayerByType(GSOGeoPolygon3D polygon, GSOLayer layer, string type) { - if (layer == null) return null; - GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + if (polygon == null) { @@ -48,7 +49,7 @@ /// ///附属物列表 /// - public Dictionary getFeatureCountByFeatures(GSOFeatures feats) + public Dictionary GetFeatureCountByFeatures(GSOFeatures feats) { if (feats == null || feats.Length == 0) return null; Dictionary result = new Dictionary(); @@ -64,13 +65,13 @@ /// /// /// - public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) + public FeaturesClassfyResult GetPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) { if (layer == null) return null; FeaturesClassfyResult result = new FeaturesClassfyResult(); double totalLength = 0.0; int ncount = 0; - GSOFeatures features = getPipesByValueSection(polygon, layer, min, max, fieldName); + GSOFeatures features = GetPipesByValueSection(polygon, layer, min, max, fieldName); for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; @@ -98,11 +99,12 @@ /// 上限 /// 统计类型:"起始埋深"或"管径_毫米" /// - public GSOFeatures getPipesByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) + public GSOFeatures GetPipesByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) { - if (layer == null) return null; - GSOFeatures result = new GSOFeatures(); + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + GSOFeatures result = new GSOFeatures(); //TODOLIST:优化为只获取管线,目前不清楚调用方式 GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); @@ -127,12 +129,12 @@ } //图层名称、管径、条数、总长度 - public List groupPipeByDiameter(GSOGeoPolygon3D polygon, GSOLayer layer) + public List GroupPipeByDiameter(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; - List result = new List(); - + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + List result = new List(); //TODOLIST:优化为只获取管线,目前不清楚调用方式 GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); @@ -164,7 +166,7 @@ } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = diameter.ToString(); + featuresClass.groupFieldValue = diameter.ToString(CultureInfo.InvariantCulture); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -181,12 +183,11 @@ /// /// /// - public List groupAccessories(GSOGeoPolygon3D polygon, GSOLayer layer) + public List GroupAccessories(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; - List result = new List(); - GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + List result = new List(); //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); @@ -230,14 +231,14 @@ /// /// 材质 /// - public FeaturesClassfyResult groupPipeByMaterial(GSOGeoPolygon3D polygon, GSOLayer layer, string material) + public FeaturesClassfyResult GroupPipeByMaterial(GSOGeoPolygon3D polygon, GSOLayer layer, string material) { - if (layer == null) return null; + + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; FeaturesClassfyResult result = new FeaturesClassfyResult(); - GSOFeatureLayer flayer = layer as GSOFeatureLayer; - - //TODOLIST:优化为只获取管线,目前不清楚调用方式 + GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); string fixedMaterial = material == "无" ? "" : material; @@ -245,16 +246,12 @@ int ncount = 0; for (int i = 0; i < feats.Length; i++) { - if (feats[i].GetFieldAsString("材质").Equals(fixedMaterial)) - { - GSOGeoPolyline3D line = feats[i].Geometry as GSOGeoPolyline3D; - if (line != null) - { - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } - } + if (!feats[i].GetFieldAsString("材质").Equals(fixedMaterial)) continue; + GSOGeoPolyline3D line = feats[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } result.layerName = layer.Caption; @@ -271,12 +268,12 @@ /// /// 要统计的长度 /// - public static GSOFeatures getLayerPipes(GSOGeoPolygon3D polygon, GSOLayer layer, out double length) + public static GSOFeatures GetLayerPipes(GSOGeoPolygon3D polygon, GSOLayer layer, out double length) { length = 0; if (layer == null) return null; - GSOFeatures feats = getLayerFeatures(polygon, layer); + GSOFeatures feats = GetLayerFeatures(polygon, layer); double totallength = 0.00; for (int i = 0; i < feats.Length; i++) { @@ -298,10 +295,10 @@ /// /// /// - public static GSOFeatures getLayerFeatures(GSOGeoPolygon3D polygon, GSOLayer layer) + public static GSOFeatures GetLayerFeatures(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); } diff --git a/FrmAccessoriesgather.cs b/FrmAccessoriesgather.cs index c7787f7..e1d176e 100644 --- a/FrmAccessoriesgather.cs +++ b/FrmAccessoriesgather.cs @@ -213,7 +213,7 @@ { FeatureStatisticsService featureService = new FeatureStatisticsService(); GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layertype); - List accessoriesResult = featureService.groupAccessories(polygon, layer); + List accessoriesResult = featureService.GroupAccessories(polygon, layer); if (accessoriesResult == null || accessoriesResult.Count == 0) { diff --git a/FrmAllPipelineStatis.cs b/FrmAllPipelineStatis.cs index 60805ba..0911557 100644 --- a/FrmAllPipelineStatis.cs +++ b/FrmAllPipelineStatis.cs @@ -205,7 +205,7 @@ { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(pipeLayerNames[i]); double totalLength = 0.0; - GSOFeatures fs = FeatureStatisticsService.getLayerPipes(polygon, layer,out totalLength); + GSOFeatures fs = FeatureStatisticsService.GetLayerPipes(polygon, layer,out totalLength); if (fs == null) continue; nameAndPipeMap.Add(pipeLayerNames[i], fs); nameAndLengthMap.Add(pipeLayerNames[i],totalLength); diff --git a/FrmBSQStatis.cs b/FrmBSQStatis.cs index 6f7838f..dd63f62 100644 --- a/FrmBSQStatis.cs +++ b/FrmBSQStatis.cs @@ -108,7 +108,7 @@ public Dictionary getBSQMapByPolygon(GSOGeoPolygon3D polygon,Dictionary typeAndCount, Dictionary codeAndType) { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption("标识器"); - GSOFeatures bsqFs = FeatureStatisticsService.getLayerFeatures(polygon, layer); + GSOFeatures bsqFs = FeatureStatisticsService.GetLayerFeatures(polygon, layer); if (bsqFs == null || bsqFs.Length <= 0) { LogHelper.WriteLog(typeof(FrmBSQStatis),"标识器图层下的Feature为空"); return null; diff --git a/FrmpipeDeepstatis.cs b/FrmpipeDeepstatis.cs index e00a1dc..6a5c895 100644 --- a/FrmpipeDeepstatis.cs +++ b/FrmpipeDeepstatis.cs @@ -148,7 +148,7 @@ //Double downLimit = Convert.ToDouble(dataGridViewX2.Rows[j].Cells["下限"].Value); if (upLimit == null && downLimit == null) continue;//空行过滤 //获取符合条件的管线 - FeaturesClassfyResult result = service.getPipesInfoByValueSection(polygon, layer, downLimit, upLimit, "起始埋深"); + FeaturesClassfyResult result = service.GetPipesInfoByValueSection(polygon, layer, downLimit, upLimit, "起始埋深"); DataGridViewRow row = new DataGridViewRow(); int index = dataGridViewX1.Rows.Add(row); row = dataGridViewX1.Rows[index]; diff --git a/FrmpipeDiametergather.cs b/FrmpipeDiametergather.cs index 132ab7f..a9d96fa 100644 --- a/FrmpipeDiametergather.cs +++ b/FrmpipeDiametergather.cs @@ -176,7 +176,7 @@ for (int i = 0; i < clbPipeLine.CheckedItems.Count; i++) { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(clbPipeLine.CheckedItems[i].ToString()); - List results = service.groupPipeByDiameter(polygon,layer); + List results = service.GroupPipeByDiameter(polygon,layer); foreach(FeaturesClassfyResult result in results){ DataGridViewRow row = new DataGridViewRow(); diff --git a/FrmpipeMaterialGather.cs b/FrmpipeMaterialGather.cs index ec71951..44e7f24 100644 --- a/FrmpipeMaterialGather.cs +++ b/FrmpipeMaterialGather.cs @@ -164,7 +164,7 @@ for (int j = 0; j < clbmaterials.CheckedItems.Count; j++) { - FeaturesClassfyResult featureResult = featureService.groupPipeByMaterial(polygon, layer, clbmaterials.CheckedItems[j].ToString()); + FeaturesClassfyResult featureResult = featureService.GroupPipeByMaterial(polygon, layer, clbmaterials.CheckedItems[j].ToString()); DataGridViewRow row = new DataGridViewRow(); int index = dataGridViewX1.Rows.Add(row); row = dataGridViewX1.Rows[index]; diff --git a/Frmpipediameterstatis.cs b/Frmpipediameterstatis.cs index 2f5e00e..4fb25a8 100644 --- a/Frmpipediameterstatis.cs +++ b/Frmpipediameterstatis.cs @@ -184,7 +184,7 @@ if (tempDown != null) downLimit = Convert.ToDouble(tempDown); if (upLimit == null && downLimit == null) continue;//空行过滤 //获取符合条件的管线 - FeaturesClassfyResult result = service.getPipesInfoByValueSection(polygon, layer, downLimit, upLimit, "管径_毫米"); + FeaturesClassfyResult result = service.GetPipesInfoByValueSection(polygon, layer, downLimit, upLimit, "管径_毫米"); DataGridViewRow row = new DataGridViewRow(); int index = dataGridViewX1.Rows.Add(row); row = dataGridViewX1.Rows[index]; diff --git a/DoublePanelAnalysis.cs b/DoublePanelAnalysis.cs index 19511cc..e89f552 100644 --- a/DoublePanelAnalysis.cs +++ b/DoublePanelAnalysis.cs @@ -746,17 +746,17 @@ #region wxl 重构 碰撞审查,覆土审查,水平净距审查,垂直净距审查 - + //TODO LIST:UNDONE /// /// 获取跟选择管线垂直距离小于特定值的管线列表和选择管线的距离 /// - /// 地球 + /// 地球 /// 选择管线 - /// 各图层名称 + /// 各图层名称 /// 垂直距离 /// 管线列表,可为空 - public static Dictionary VerticalDistanceAnalysis(GSOGlobeControl globeControl1, - GSOFeature selectedFeature, List _pipelineLayerNames, double verticalDistance ) + public static Dictionary VerticalDistanceAnalysis(GSOGlobeControl globeControl, + GSOFeature selectedFeature, List pipelineLayerNames, double verticalDistance ) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -765,16 +765,13 @@ if (pipeStyle1 == null) return null; GSOGeoPolygon3D polygon = line1.CreateBuffer(0.1, true, 5, true, false);//要比较的区域 Dictionary result = new Dictionary(); - string caption = selectedFeature.Dataset.Caption; - - GSOPoint3d pntIntersect1, pntIntersect2,pntProIntersect1, pntProIntersect2 ; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue;//排除本图层 - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue;//排除本图层 + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); if (feats2 == null) continue; for (int j = 0; j < feats2.Length; j++) { @@ -783,7 +780,8 @@ if (line2 == null) continue; GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; - double dDist = globeControl1.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, out pntIntersect1, + GSOPoint3d pntIntersect1, pntIntersect2, pntProIntersect1, pntProIntersect2; + double dDist = globeControl.Globe.Analysis3D.ComputeVerticalDistance(line1, line2, out pntIntersect1, out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); if (dDist >= verticalDistance) continue;//不符合条件 result.Add(feat2,dDist); @@ -794,12 +792,12 @@ /// /// 获取与选定管线水平距离小于特定值的<管线,管线距离>Dictionary /// - /// + /// /// - /// + /// /// /// 选择的为空或不是管线则返回空,否则返回符合条件的Dictionary - public static Dictionary HorizontalDistanceAnalysis(GSOGlobeControl globeControl1,GSOFeature selectedFeature, List _pipelineLayerNames, double dis) + public static Dictionary HorizontalDistanceAnalysis(GSOGlobeControl globeControl,GSOFeature selectedFeature, List pipelineLayerNames, double dis) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -809,23 +807,23 @@ Dictionary result = new Dictionary(); string caption = selectedFeature.Dataset.Caption; GSOGeoPolygon3D polygon = line1.CreateBuffer(dis, true, 5, true, false); - GSOFeature new_feat = new GSOFeature(); - new_feat.Geometry = polygon; + GSOFeature newFeat = new GSOFeature(); + newFeat.Geometry = polygon; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue; - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue; + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); for (int j = 0; j < feats2.Length; j++) { GSOFeature feat2 = feats2[j]; GSOGeoPolyline3D line2 = feat2.Geometry as GSOGeoPolyline3D; if (line2 == null) continue; GSOPoint3d pntIntersect1, pntIntersect2, pntProIntersect1, pntProIntersect2; - double dDist = globeControl1.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, out pntIntersect1, - out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); + double dDist = globeControl.Globe.Analysis3D.ComputeHorizonDistance(line1, line2, out pntIntersect1, + out pntIntersect2, out pntProIntersect1, out pntProIntersect2, false); GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; result.Add(feat2,dDist); @@ -836,11 +834,11 @@ /// ///碰撞检测,获取与选择管线碰撞的管线 /// - /// 地球 + /// 地球 /// 选中的feature - /// 图层列表 + /// 图层列表 /// - public static GSOFeatures CollisionAnalysis(GSOGlobeControl globeControl1, GSOFeature selectedFeature, List _pipelineLayerNames) + public static GSOFeatures CollisionAnalysis(GSOGlobeControl globeControl, GSOFeature selectedFeature, List pipelineLayerNames) { if (selectedFeature == null) return null; GSOGeoPolyline3D line1 = selectedFeature.Geometry as GSOGeoPolyline3D; @@ -851,12 +849,12 @@ GSOFeatures result = new GSOFeatures(); string caption = selectedFeature.Dataset.Caption; - for (int i = 0; i < _pipelineLayerNames.Count; i++) + foreach (string pipelineName in pipelineLayerNames) { - if (caption == _pipelineLayerNames[i]) continue;//排除本图层 - GSOLayer layer2 = globeControl1.Globe.Layers.GetLayerByCaption(_pipelineLayerNames[i]); + if (caption == pipelineName) continue;//排除本图层 + GSOLayer layer2 = globeControl.Globe.Layers.GetLayerByCaption(pipelineName); if (layer2 == null) continue; - GSOFeatures feats2 = FeatureStatisticsService.getLayerFeatures(polygon, layer2); + GSOFeatures feats2 = FeatureStatisticsService.GetLayerFeatures(polygon, layer2); if (feats2 == null) continue; for (int j = 0; j < feats2.Length; j++) { @@ -867,7 +865,7 @@ GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle2 == null) continue; GSOPoint3d pntIntersect1, pntIntersect2; - double dDist = globeControl1.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, + double dDist = globeControl.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, out pntIntersect2,out horLen,out verLen,true,true,dNoIntersetStartRatio); if (dDist <= 0 ) result.Add(feat2); } diff --git a/FeatureStatisticsService.cs b/FeatureStatisticsService.cs index fe32265..cfdaf5c 100644 --- a/FeatureStatisticsService.cs +++ b/FeatureStatisticsService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using GeoScene.Data; using GeoScene.Globe; @@ -17,9 +18,9 @@ public static GSOFeatures Intersect_PointLayerByType(GSOGeoPolygon3D polygon, GSOLayer layer, string type) { - if (layer == null) return null; - GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + if (polygon == null) { @@ -48,7 +49,7 @@ /// ///附属物列表 /// - public Dictionary getFeatureCountByFeatures(GSOFeatures feats) + public Dictionary GetFeatureCountByFeatures(GSOFeatures feats) { if (feats == null || feats.Length == 0) return null; Dictionary result = new Dictionary(); @@ -64,13 +65,13 @@ /// /// /// - public FeaturesClassfyResult getPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) + public FeaturesClassfyResult GetPipesInfoByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) { if (layer == null) return null; FeaturesClassfyResult result = new FeaturesClassfyResult(); double totalLength = 0.0; int ncount = 0; - GSOFeatures features = getPipesByValueSection(polygon, layer, min, max, fieldName); + GSOFeatures features = GetPipesByValueSection(polygon, layer, min, max, fieldName); for (int i = 0; i < features.Length; i++) { GSOGeoPolyline3D line = features[i].Geometry as GSOGeoPolyline3D; @@ -98,11 +99,12 @@ /// 上限 /// 统计类型:"起始埋深"或"管径_毫米" /// - public GSOFeatures getPipesByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) + public GSOFeatures GetPipesByValueSection(GSOGeoPolygon3D polygon, GSOLayer layer, double? min, double? max, string fieldName) { - if (layer == null) return null; - GSOFeatures result = new GSOFeatures(); + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + GSOFeatures result = new GSOFeatures(); //TODOLIST:优化为只获取管线,目前不清楚调用方式 GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); @@ -127,12 +129,12 @@ } //图层名称、管径、条数、总长度 - public List groupPipeByDiameter(GSOGeoPolygon3D polygon, GSOLayer layer) + public List GroupPipeByDiameter(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; - List result = new List(); - + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + List result = new List(); //TODOLIST:优化为只获取管线,目前不清楚调用方式 GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); @@ -164,7 +166,7 @@ } FeaturesClassfyResult featuresClass = new FeaturesClassfyResult(); featuresClass.layerName = layer.Caption; - featuresClass.groupFieldValue = diameter.ToString(); + featuresClass.groupFieldValue = diameter.ToString(CultureInfo.InvariantCulture); featuresClass.ncount = ncount; featuresClass.sum = Math.Round(totalLength, 2); @@ -181,12 +183,11 @@ /// /// /// - public List groupAccessories(GSOGeoPolygon3D polygon, GSOLayer layer) + public List GroupAccessories(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; - List result = new List(); - GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; + List result = new List(); //layer.Name是表名 string[] accessStrs = Utility.getAccStrsByLayer(layer.Name); @@ -230,14 +231,14 @@ /// /// 材质 /// - public FeaturesClassfyResult groupPipeByMaterial(GSOGeoPolygon3D polygon, GSOLayer layer, string material) + public FeaturesClassfyResult GroupPipeByMaterial(GSOGeoPolygon3D polygon, GSOLayer layer, string material) { - if (layer == null) return null; + + GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; FeaturesClassfyResult result = new FeaturesClassfyResult(); - GSOFeatureLayer flayer = layer as GSOFeatureLayer; - - //TODOLIST:优化为只获取管线,目前不清楚调用方式 + GSOFeatures feats = (polygon == null) ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); string fixedMaterial = material == "无" ? "" : material; @@ -245,16 +246,12 @@ int ncount = 0; for (int i = 0; i < feats.Length; i++) { - if (feats[i].GetFieldAsString("材质").Equals(fixedMaterial)) - { - GSOGeoPolyline3D line = feats[i].Geometry as GSOGeoPolyline3D; - if (line != null) - { - double length = line.GetSpaceLength(true, 6378137); - totalLength += length; - ncount += 1; - } - } + if (!feats[i].GetFieldAsString("材质").Equals(fixedMaterial)) continue; + GSOGeoPolyline3D line = feats[i].Geometry as GSOGeoPolyline3D; + if (line == null) continue; + double length = line.GetSpaceLength(true, 6378137); + totalLength += length; + ncount += 1; } result.layerName = layer.Caption; @@ -271,12 +268,12 @@ /// /// 要统计的长度 /// - public static GSOFeatures getLayerPipes(GSOGeoPolygon3D polygon, GSOLayer layer, out double length) + public static GSOFeatures GetLayerPipes(GSOGeoPolygon3D polygon, GSOLayer layer, out double length) { length = 0; if (layer == null) return null; - GSOFeatures feats = getLayerFeatures(polygon, layer); + GSOFeatures feats = GetLayerFeatures(polygon, layer); double totallength = 0.00; for (int i = 0; i < feats.Length; i++) { @@ -298,10 +295,10 @@ /// /// /// - public static GSOFeatures getLayerFeatures(GSOGeoPolygon3D polygon, GSOLayer layer) + public static GSOFeatures GetLayerFeatures(GSOGeoPolygon3D polygon, GSOLayer layer) { - if (layer == null) return null; GSOFeatureLayer flayer = layer as GSOFeatureLayer; + if (flayer == null) return null; return polygon == null ? flayer.GetAllFeatures() : flayer.FindFeaturesInPolygon(polygon, false); } diff --git a/FrmAccessoriesgather.cs b/FrmAccessoriesgather.cs index c7787f7..e1d176e 100644 --- a/FrmAccessoriesgather.cs +++ b/FrmAccessoriesgather.cs @@ -213,7 +213,7 @@ { FeatureStatisticsService featureService = new FeatureStatisticsService(); GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layertype); - List accessoriesResult = featureService.groupAccessories(polygon, layer); + List accessoriesResult = featureService.GroupAccessories(polygon, layer); if (accessoriesResult == null || accessoriesResult.Count == 0) { diff --git a/FrmAllPipelineStatis.cs b/FrmAllPipelineStatis.cs index 60805ba..0911557 100644 --- a/FrmAllPipelineStatis.cs +++ b/FrmAllPipelineStatis.cs @@ -205,7 +205,7 @@ { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(pipeLayerNames[i]); double totalLength = 0.0; - GSOFeatures fs = FeatureStatisticsService.getLayerPipes(polygon, layer,out totalLength); + GSOFeatures fs = FeatureStatisticsService.GetLayerPipes(polygon, layer,out totalLength); if (fs == null) continue; nameAndPipeMap.Add(pipeLayerNames[i], fs); nameAndLengthMap.Add(pipeLayerNames[i],totalLength); diff --git a/FrmBSQStatis.cs b/FrmBSQStatis.cs index 6f7838f..dd63f62 100644 --- a/FrmBSQStatis.cs +++ b/FrmBSQStatis.cs @@ -108,7 +108,7 @@ public Dictionary getBSQMapByPolygon(GSOGeoPolygon3D polygon,Dictionary typeAndCount, Dictionary codeAndType) { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption("标识器"); - GSOFeatures bsqFs = FeatureStatisticsService.getLayerFeatures(polygon, layer); + GSOFeatures bsqFs = FeatureStatisticsService.GetLayerFeatures(polygon, layer); if (bsqFs == null || bsqFs.Length <= 0) { LogHelper.WriteLog(typeof(FrmBSQStatis),"标识器图层下的Feature为空"); return null; diff --git a/FrmpipeDeepstatis.cs b/FrmpipeDeepstatis.cs index e00a1dc..6a5c895 100644 --- a/FrmpipeDeepstatis.cs +++ b/FrmpipeDeepstatis.cs @@ -148,7 +148,7 @@ //Double downLimit = Convert.ToDouble(dataGridViewX2.Rows[j].Cells["下限"].Value); if (upLimit == null && downLimit == null) continue;//空行过滤 //获取符合条件的管线 - FeaturesClassfyResult result = service.getPipesInfoByValueSection(polygon, layer, downLimit, upLimit, "起始埋深"); + FeaturesClassfyResult result = service.GetPipesInfoByValueSection(polygon, layer, downLimit, upLimit, "起始埋深"); DataGridViewRow row = new DataGridViewRow(); int index = dataGridViewX1.Rows.Add(row); row = dataGridViewX1.Rows[index]; diff --git a/FrmpipeDiametergather.cs b/FrmpipeDiametergather.cs index 132ab7f..a9d96fa 100644 --- a/FrmpipeDiametergather.cs +++ b/FrmpipeDiametergather.cs @@ -176,7 +176,7 @@ for (int i = 0; i < clbPipeLine.CheckedItems.Count; i++) { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(clbPipeLine.CheckedItems[i].ToString()); - List results = service.groupPipeByDiameter(polygon,layer); + List results = service.GroupPipeByDiameter(polygon,layer); foreach(FeaturesClassfyResult result in results){ DataGridViewRow row = new DataGridViewRow(); diff --git a/FrmpipeMaterialGather.cs b/FrmpipeMaterialGather.cs index ec71951..44e7f24 100644 --- a/FrmpipeMaterialGather.cs +++ b/FrmpipeMaterialGather.cs @@ -164,7 +164,7 @@ for (int j = 0; j < clbmaterials.CheckedItems.Count; j++) { - FeaturesClassfyResult featureResult = featureService.groupPipeByMaterial(polygon, layer, clbmaterials.CheckedItems[j].ToString()); + FeaturesClassfyResult featureResult = featureService.GroupPipeByMaterial(polygon, layer, clbmaterials.CheckedItems[j].ToString()); DataGridViewRow row = new DataGridViewRow(); int index = dataGridViewX1.Rows.Add(row); row = dataGridViewX1.Rows[index]; diff --git a/Frmpipediameterstatis.cs b/Frmpipediameterstatis.cs index 2f5e00e..4fb25a8 100644 --- a/Frmpipediameterstatis.cs +++ b/Frmpipediameterstatis.cs @@ -184,7 +184,7 @@ if (tempDown != null) downLimit = Convert.ToDouble(tempDown); if (upLimit == null && downLimit == null) continue;//空行过滤 //获取符合条件的管线 - FeaturesClassfyResult result = service.getPipesInfoByValueSection(polygon, layer, downLimit, upLimit, "管径_毫米"); + FeaturesClassfyResult result = service.GetPipesInfoByValueSection(polygon, layer, downLimit, upLimit, "管径_毫米"); DataGridViewRow row = new DataGridViewRow(); int index = dataGridViewX1.Rows.Add(row); row = dataGridViewX1.Rows[index]; diff --git a/bin/x86/Debug/glVersion.txt b/bin/x86/Debug/glVersion.txt index b134162..1fc46d0 100644 --- a/bin/x86/Debug/glVersion.txt +++ b/bin/x86/Debug/glVersion.txt Binary files differ