GDAL Shape轉Geojson 文件釋放方法

GDAL Shape轉Geojson 文件釋放方法

問題描述

在項目中遇到一個shape文件轉json的需求,於是選用了GDal方案,使用方法網上一大堆,但在執行轉換過後生成的文本文件一直釋放不了,每次生成的結果文件刪除不掉就很噁心,於是各種調試終於找到解決方案

問題代碼

生成的文件刪除不掉,執行CopyDataSource重名的話, 會報錯

 public void convertShapefile2Geojson(string shpPath, string geojsonPath)
        {
            using (DataSource ds = Ogr.Open(shpPath, 0))
            {
                if (ds == null)
                {
                    return;
                }
                using (Driver dv = Ogr.GetDriverByName("GeoJSON"))
                {
                    if (dv == null)
                    {
                        return;
                    }
                    try
                    {
                        if (File.Exists(geojsonPath))
                        {
                            dv.DeleteDataSource(geojsonPath);
                        }
                        dv.CopyDataSource(ds, geojsonPath, null);
                        dv.Dispose();
                    }
                    catch (Exception exx)
                    {

                    }

                }
                ds.Dispose();
            }
            
        }

成功代碼

加上一句 Gdal.GDALDestroyDriverManager(); 即可

public void convertShapefile2Geojson(string shpPath, string geojsonPath)
        {
            using (DataSource ds = Ogr.Open(shpPath, 0))
            {
                if (ds == null)
                {
                    return;
                }
                using (Driver dv = Ogr.GetDriverByName("GeoJSON"))
                {
                    if (dv == null)
                    {
                        return;
                    }
                    try
                    {
                        if (File.Exists(geojsonPath))
                        {
                            dv.DeleteDataSource(geojsonPath);
                        }
                        dv.CopyDataSource(ds, geojsonPath, null);
                        dv.Deregister();
                        dv.Dispose();
                    }
                    catch (Exception exx)
                    {

                    }

                }
                ds.Dispose();
                Gdal.GDALDestroyDriverManager();
            }
            
        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章