【问题标题】:How to Get Shape Name如何获取形状名称
【发布时间】:2016-01-19 11:09:23
【问题描述】:

使用 DotSpatial,如果我以 IFeatureSet 的形式打开一个 Shapefile,我可以在 FeatureSet 中看到一组形状,并且这些形状具有属性的集合。但我看不到找到与形状关联的名称的明显方法?

例如,如果我有以下代码:

var featureSet = Shapefile.Open("../../Ecuador/map.shp");

var rowCount = featureSet.NumRows();

for (var i = 0; i < rowCount; i++)
{
    var shape = featureSet.GetShape(i, true);
    var geometry = shape.ToGeometry();
}

如果我通过在Shape 对象上放置断点来调试此代码,我可以看到属性集合。在我使用的示例中,每个形状都有 12 个属性。我可以看到这些属性之一是我认为是形状的名称(在这个例子中,我正在查看厄瓜多尔的省份),但我不知道如何可靠地配对这些属性中的哪一个是形状名称,在这种情况下是省的名称。


编辑

这是我可以看到的第一个形状的可用属性的示例:

快速浏览一下,我会说索引 4 处的属性是我需要的,但我如何以编程方式找到它?


进一步编辑

看起来,通过在数据中进一步挖掘,属性的标签可能是IFeatureSet中的DataTable列名:

虽然...如果我想导入这些形状,我会以编程方式选择其中哪些?只有这样才能让进行导入的人手动选择正确的吗?

【问题讨论】:

  • 您是否正在寻找与每个形状相关联的唯一标识符?属性表中的某些列可能不是唯一的。通常,用户出于制图原因选择列,例如列可能包含用户希望在地图上显示的标签,不一定是唯一的。 DotSpatial 中的 FID 是唯一的。
  • 谢谢。我正在寻找形状的名称。在我的示例中,我正在加载厄瓜多尔各省的形状数据(多边形)。在 KML 中,每个要素都有一个“名称”元素,我希望在其中找到每个省的名称。我认为,自从我重新考虑这一点并查看了 GeoJSON 等其他格式后,我得出的结论是,使用 Shapefile 数据就在那里,但它是在 DBF 数据的属性集合中找到的。根据我的发现,您似乎需要知道省份名称存储在属性 4 中。
  • 形状文件的 DBF 不一定有名称属性。 KML 包含制图元素,但形状文件不包含
  • 干杯,我最终选择了类似于 Google 地球解决方案的解决方案。我向用户展示了一个包含属性集列的表格,并让用户选择哪一个代表命名数据。

标签: shapefile dotspatial


【解决方案1】:

我找到了一个名为Importing Geographic Information Systems (GIS) data in Google Earth 的页面。

从 shapefile 导入的过程显示了一个屏幕截图,要求用户从可用属性表中选择包含形状名称的属性。

似乎将名称附加到要素的任务是由用户手动处理的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2022-10-08
    • 2019-10-06
    • 1970-01-01
    • 2016-12-02
    • 2019-06-05
    • 1970-01-01
    相关资源
    最近更新 更多