c# - 在GDAL(C#)中将点几何添加到shapefile
问题描述
我正在尝试使用 GDAL 制作具有点几何形状的 shapefile。我正在按照此处给出的示例进行操作。我正在使用 Microsoft Visual Studio,编程语言是 C#。现在,我只是在原点做一个点,我正在 QGIS 中查看生成的 shapefile。出于某种原因,我无法看到我提出的观点。我也尝试过制作多边形,但我面临同样的问题。下面是我写的代码:
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 中打开生成的图层时,我看不到/定位该点。任何帮助,将不胜感激。
解决方案
我已经用上一个 GDAL 版本测试了你的代码,它可以工作。
您必须关闭数据源(调用 Dispose 方法)才能使用创建的几何图形更新文件,否则您只会查看一个空文件。
推荐阅读
- c++ - C++ 2d 向量 | 进程终止错误-1073741510
- c++ - 如何使用语言包装器构建 C++ 库?
- javascript - 代码在浏览器控制台中工作,但不在 Tampermonkey 中
- android - WebRTC Android,无法获得我应该做什么?
- python - 为什么可以在类中同时覆盖 __eq__ 和 __ne__ ?
- java - 根据驱动程序类型在运行时选择页面对象类
- java - @OneToOne 与三个表之间的共享密钥
- android - 自定义 AutoCompleteTextView 不工作是 android 版本 6.0.1,但它在旧版本上正常工作
- php - 获取作为数组加入的结果
- html - 居中联系表格内容