Добавление геометрических точек в шейп-файл в GDAL (C #) - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь создавать шейп-файлы с точечной геометрией, используя GDAL.Я следую примеру, приведенному здесь .Я использую Microsoft Visual Studio и язык программирования C #.Сейчас я просто делаю одну точку в начале координат и просматриваю полученные шейп-файлы в QGIS.По какой-то причине я не могу понять, что я делаю.Я тоже пытался сделать многоугольник, но столкнулся с той же проблемой.Ниже приведен код, который я написал:

        public void testSF(Dataset ds)
        {
        Console.WriteLine("Writing ERSI shapefile");
        // Registering drivers
        OSGeo.OGR.Ogr.RegisterAll();
        OSGeo.OGR.Driver driverSH = OSGeo.OGR.Ogr.GetDriverByName("ESRI Shapefile");

        if (driverSH == null)
        {
            Console.WriteLine("Cannot get drivers. Exiting");
            System.Environment.Exit(-1);
        }
        Console.WriteLine("Drivers fetched");

        // Creating a shapefile
        OSGeo.OGR.DataSource dataSourceSH = driverSH.CreateDataSource("ERSI_TEST_ShapeFile.shp", new string[] { });
        if (dataSourceSH == null)
        {
            Console.WriteLine("Cannot create datasource");
            System.Environment.Exit(-1);
        }
        Console.WriteLine("Shapefile created");

        // Creating a point layer
        OSGeo.OGR.Layer layerSH;
        layerSH = dataSourceSH.CreateLayer("PolygonLayer", null, OSGeo.OGR.wkbGeometryType.wkbPoint, new string[] { });
        if (layerSH == null)
        {
            Console.WriteLine("Layer creation failed, exiting...");
            System.Environment.Exit(-1);
        }
        Console.WriteLine("Polygon Layer created");

        // Creating and adding attribute fields to layer
        OSGeo.OGR.FieldDefn fdefnName = new OSGeo.OGR.FieldDefn("Name", OSGeo.OGR.FieldType.OFTString);
        fdefnName.SetWidth(32);

        OSGeo.OGR.FieldDefn fdefnGPS = new OSGeo.OGR.FieldDefn("GPS", OSGeo.OGR.FieldType.OFTString);
        fdefnGPS.SetWidth(32);

        if (layerSH.CreateField(fdefnName, 1) != 0)
        {
            Console.WriteLine("Creating Name field failed");
            System.Environment.Exit(-1);
        }

        if (layerSH.CreateField(fdefnGPS, 1) != 0)
        {
            Console.WriteLine("Creating GPS field failed");
            System.Environment.Exit(-1);
        }

        Console.WriteLine("Fields created and added to layer");
        OSGeo.OGR.Feature featureSH = new OSGeo.OGR.Feature(layerSH.GetLayerDefn());
        featureSH.SetField("Name", "This is a NAME");
        featureSH.SetField("GPS", "Test GPS point");

        // Outer Ring 
        // Methodology: Create a linear ring geometry, add it to a polygon geometry. Add polygon geometry to feature. Add feature to layer

        OSGeo.OGR.Feature feature = new OSGeo.OGR.Feature( layerSH.GetLayerDefn() );
        OSGeo.OGR.Geometry geom = OSGeo.OGR.Geometry.CreateFromWkt("POINT(0.0 0.0)");

        feature.SetGeometry(geom);
        layerSH.CreateFeature(feature);
}

Этот код добавляет точку к слою многоугольника в 0.0 и 0.0.Однако, когда я открываю полученный слой в QGIS, я не вижу / не могу найти точку.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 03 июня 2018

Я протестировал ваш код в последнем выпуске GDAL, и он работает.

Вы должны закрыть источник данных (вызвать метод Dispose), чтобы обновить файл с созданной геометрией, иначе вы просто увидите пустой файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...