Esempio n. 1
0
        public static FeatureClassSDO Intersect(FeatureClassSDO featureClassSDO1, FeatureClassSDO featureClassSDO2)
        {
            FeatureClassSDO featureClassSDO = new FeatureClassSDO();

            try
            {
            }
            catch (Exception e)
            {
                throw;
            }
            return(featureClassSDO);
        }
Esempio n. 2
0
 public static FeatureClassSDO CopyInfoWithoutFeatures(FeatureClassSDO featureClassSDO)
 {
     return(new FeatureClassSDO()
     {
         Name = featureClassSDO.Name,
         DisplayFieldName = featureClassSDO.DisplayFieldName,
         FieldAliases = featureClassSDO.FieldAliases,
         Fields = featureClassSDO.Fields,
         GeometryType = featureClassSDO.GeometryType,
         GeometryTypeNet = featureClassSDO.GeometryTypeNet,
         spatialReference = featureClassSDO.spatialReference,
         Features = new System.Collections.Concurrent.ConcurrentBag <Feature>()
     });
 }
Esempio n. 3
0
        public static FeatureClassSDO Intersect(this FeatureClassSDO featureClassSelf, FeatureClassSDO featureClassOther)
        {
            FeatureClassSDO newFeatureClass = null;

            try
            {
                if (featureClassSelf == null || featureClassOther == null)
                {
                    throw new ArgumentException("对象未实例化");
                }
                if (featureClassSelf.GeometryTypeNet != featureClassOther.GeometryTypeNet)
                {
                    throw new ArgumentException("空间对象类型错误");
                }
                if (CompareProperties(featureClassSelf.spatialReference, featureClassOther.spatialReference, typeof(object)))
                {
                    throw new ArgumentException("空间坐标系不一致");
                }
                newFeatureClass = new FeatureClassSDO()
                {
                    Name             = $"{featureClassSelf.Name}_{featureClassOther.Name}",
                    DisplayFieldName = $"{featureClassSelf.DisplayFieldName}_{featureClassOther.DisplayFieldName}",
                    Fields           = featureClassSelf.Fields,
                    GeometryType     = featureClassSelf.GeometryType,
                    GeometryTypeNet  = featureClassSelf.GeometryTypeNet,
                    spatialReference = featureClassSelf.spatialReference
                };
                foreach (var item in featureClassOther.Fields)
                {
                    if (item.Type == enumFieldType.esriFieldTypeGeometry || item.Name.ToLower() == "shape_area")
                    {
                        continue;
                    }
                    newFeatureClass.Fields.Add(new Field()
                    {
                        Alias = $"{featureClassOther.Name}_{item.Alias}",
                        Type  = item.Type,
                        Name  = $"{featureClassOther.Name}_{item.Name}"
                    });
                }
                int groupCount = featureClassOther.Features.Count / SpatialDataObtain.MinWorkThreadCount;
                Parallel.ForEach(featureClassOther.Features, (otherItem) =>
                {
                    foreach (var selfItem in featureClassSelf.Features)
                    {
                        if (otherItem.Geometry.Intersects(selfItem.Geometry))
                        {
                            OverlayOp overlayOp  = new OverlayOp(otherItem.Geometry, selfItem.Geometry);
                            Geometry newGeometry = overlayOp.GetResultGeometry(SpatialFunction.Intersection);

                            Feature newFeature    = new Feature();
                            newFeature.Attributes = new Dictionary <string, object>(selfItem.Attributes);
                            foreach (var oterAttribute in otherItem.Attributes)
                            {
                                Field field = featureClassOther.Fields.Single(item => item.Name == oterAttribute.Key);
                                if (field.Type == enumFieldType.esriFieldTypeGeometry || field.Name.ToLower() == "shape_area")
                                {
                                    continue;
                                }
                                string newKey = $"{featureClassOther.Name}_{field.Name}";
                                newFeature.Attributes.Add(newKey, oterAttribute.Value);
                            }
                            newFeature.Geometry = newGeometry;
                            newFeatureClass.AddFeature(newFeature);
                        }
                    }
                });
                return(newFeatureClass);
            }
            catch (Exception e)
            {
                LogUtil.Error(e.ToString());
                throw;
            }
        }