歡迎來到 GIS 的世界-Day 08:用 DotSpatial 讀取
DotSpatial 是第一個登場的處理 Shapefile 套件,是我第一個在職場中接觸到的套件,也是我到目前為止還有疑惑還沒釐清的套件。
之所以在有疑問的情況下還是選擇介紹這個套件的原因,除了能處理 Shapefile 的套件本來就不多之外,也有可能會遇到像我一樣的情況,舊有的專案需要使用這個套件進行維護,所以最後還是選擇納入這次文章的範圍。
環境說明 — .NET Framework 4.8
DotSpatial 在他的 GitGub 上有特別說明:
DotSpatial is a geographic information system library written for .NET Framework.
因此只有這個套件的範例不是使用 .NET 6 來撰寫。另外要注意的是,除了主要的
DotSpatial.Data 之外,其餘套件有些在預設安裝的時候不會選擇 1.9.0 的版本,之前有遇到過版次不一導致功能出現一些問題,這時候可以試試看升版能不能解決。

讀取
var shpPath = "test.shp";
var columnInfo = new Dictionary<int, string>();
var shapefile = Shapefile.OpenFile(shpPath);
var fields = shapefile.Attributes.Columns;
for (var i = 0; i < fields.Count; i++)
{
// 列出所有欄位名稱
var field = fields[i];
columnInfo.Add(i, field.ColumnName);
}var feature = shapefile.Features.FirstOrDefault();
var data = feature.DataRow.ItemArray;
for (var i = 0; i < data.Length; i++)
{
// 取得所有的值
if (string.IsNullOrEmpty(data[i].ToString())) continue;
Console.WriteLine($"{columnInfo[i],-11}:{data[i]}");
}// 取得類型和 WKT
Console.WriteLine($"{feature.GeometryType,-11}:{feature.BasicGeometry.ToString()}");就像前一篇所介紹的,需要先找到 Feature 才能取得資料。讀取完成的結果如下圖:
