以编程方式在新 Shapefile 中设置属性 Table
Programmatically Set Attribute Table in new Shapefile
我有一个程序可以将 shapefile 加载到内存中,根据业务逻辑对一些特征进行分组,根据每组特征创建一个 shapefile,然后将文件保存到云位置以供其他应用程序使用.
这个过程中的一个关键点是属性 table。我曾希望能够为新 shapefile 中的要素设置自定义属性。使用下面的代码,我可以使用所需的信息更新数据table,但是一旦我保存并处理了 shapefile 对象,我就无法让它持续存在。
var table = shapefile.DataTable;
var i = 0;
foreach(var branchObject in branches)
{
shapefile.AddFeature(branchObject.Feature);
var row = table.Rows[i];
row.BeginEdit();
row["BranchName"] = branchObject.Name;
row.EndEdit();
i++;
}
table.AcceptChanges();
这为我在 shapefile 中提供了一个正确填充的数据表,但是当我在 MapWindow5 中打开 shapefile 时,属性 table 中的唯一字段是自动生成的 ID。
我显然遗漏了我认为包含在 "AcceptChanges()" 或 "Being/EndEdit()" 中的某种 "Save Changes" 步骤...在 [=26 上还需要调用什么=] 使其更新?
我觉得这在 Codeplex 停用后我找不到的教程之一中有所介绍,但实际上 Google 并没有太大帮助。
事实证明,我的 DataTable 和 DataRows 没有问题。必须明确告诉 shapefile 在进行更改后更新其属性 table。
shapefile.Filename = $"{filePathWithName}.shp";
shapefile.UpdateAttributes();
保存shapefile之前的这两行代码,我现在可以在MapWindow5中看到我梦想中的属性table
注意:
通话中
shapefile.UpdateAttributes();
不先设置 shapefile.Filename 属性 将抛出异常。
更新属性显然需要保存到 shapefile 包的 .dbf 文件,如果不知道该 .dbf 文件应该去哪里,它就无法做到这一点。这需要我进行一些重构,因为直到过程结束,输出 shapefile 才存在于内存之外。
我有一个程序可以将 shapefile 加载到内存中,根据业务逻辑对一些特征进行分组,根据每组特征创建一个 shapefile,然后将文件保存到云位置以供其他应用程序使用.
这个过程中的一个关键点是属性 table。我曾希望能够为新 shapefile 中的要素设置自定义属性。使用下面的代码,我可以使用所需的信息更新数据table,但是一旦我保存并处理了 shapefile 对象,我就无法让它持续存在。
var table = shapefile.DataTable;
var i = 0;
foreach(var branchObject in branches)
{
shapefile.AddFeature(branchObject.Feature);
var row = table.Rows[i];
row.BeginEdit();
row["BranchName"] = branchObject.Name;
row.EndEdit();
i++;
}
table.AcceptChanges();
这为我在 shapefile 中提供了一个正确填充的数据表,但是当我在 MapWindow5 中打开 shapefile 时,属性 table 中的唯一字段是自动生成的 ID。
我显然遗漏了我认为包含在 "AcceptChanges()" 或 "Being/EndEdit()" 中的某种 "Save Changes" 步骤...在 [=26 上还需要调用什么=] 使其更新?
我觉得这在 Codeplex 停用后我找不到的教程之一中有所介绍,但实际上 Google 并没有太大帮助。
事实证明,我的 DataTable 和 DataRows 没有问题。必须明确告诉 shapefile 在进行更改后更新其属性 table。
shapefile.Filename = $"{filePathWithName}.shp";
shapefile.UpdateAttributes();
保存shapefile之前的这两行代码,我现在可以在MapWindow5中看到我梦想中的属性table
注意:
通话中
shapefile.UpdateAttributes();
不先设置 shapefile.Filename 属性 将抛出异常。
更新属性显然需要保存到 shapefile 包的 .dbf 文件,如果不知道该 .dbf 文件应该去哪里,它就无法做到这一点。这需要我进行一些重构,因为直到过程结束,输出 shapefile 才存在于内存之外。