加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C# GIS库 NetTopologySuite 的使用

发布时间:2020-12-15 19:51:55 所属栏目:百科 来源:网络整理
导读:将ShapeFile 读取为 FeatureCollection: public bool ShpToFeatureCollection1(string filename,out FeatureCollection collection) { collection = null; try { var featureCollection = new CollectionDotSpatial.NetTopologySuite.Features.IFeature(); i

将ShapeFile 读取为 FeatureCollection:

public bool ShpToFeatureCollection1(string filename,out FeatureCollection collection)
        {
            collection = null;
            try
            {
                var featureCollection = new Collection<DotSpatial.NetTopologySuite.Features.IFeature>();

                if (!File.Exists(filename + ".dbf"))
                {                    
                    return false;
                }
                var streamreader = new ShapefileStreamProviderRegistry(filename);
                var dataReader = new ShapefileDataReader(streamreader,new GeometryFactory(new PrecisionModel()));
             
                while (dataReader.Read())
                {                    
                    var feature = new DotSpatial.NetTopologySuite.Features.Feature { Geometry = dataReader.Geometry };
                    int length = dataReader.DbaseHeader.NumFields;
                    string[] keys = new string[length];
                    for (int i = 0; i < length; i++)
                        keys[i] = dataReader.DbaseHeader.Fields[i].Name;

                    feature.Attributes = new AttributesTable();
                    for (int i = 0; i < length; i++)
                    {
                        object val = dataReader.GetValue(i + 1);
                        feature.Attributes.AddAttribute(keys[i],val);
                    }

                    featureCollection.Add(feature);
                }
                dataReader.Close();
                dataReader.Dispose();

                if (featureCollection.Count == 0)
                {                    
                    return false;
                }

                collection = new FeatureCollection(featureCollection);                     
            }
            catch(Exception ex)
            {                
                return false;
            }

            return true;
        }

FeatureCollection 转为 GeoJson:

private bool ConvertFeatureCollection(FeatureCollection value,out StringBuilder stringBuilder)
        {            
            FeatureCollectionConverter target = new FeatureCollectionConverter();
            stringBuilder = new StringBuilder();
            JsonTextWriter writer = new JsonTextWriter(new StringWriter(stringBuilder));        
            JsonSerializer serializer = DotSpatial.NetTopologySuite.IO.GeoJsonSerializer.Create(new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore },GeometryFactory.Default);
            target.WriteJson(writer,value,serializer);                        
            writer.Flush();
            writer.Close();          

            if (stringBuilder.Length == 0)
            {                
                return false;
            }
            return true;
        }

Geojson 转为 FeatureCollection:

public bool ReadGeojson(string geojson,string fileName)
        {
            bool bResult = true;
            try
            {
                do
                {                    
                    DotSpatial.NetTopologySuite.IO.GeoJsonReader reader = new DotSpatial.NetTopologySuite.IO.GeoJsonReader();
                    FeatureCollection result = reader.Read<FeatureCollection>(geojson);                  

                    if (result == null)
                    {
                        bResult = false;                        
                        break;
                    }

                    ShapefileWriter.WriteFeatureCollection(fileName,result);                    
                }
                while (false);
            }
            catch(Exception ex)
            {
                bResult = false;                
            }
            return bResult;
        }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读