iT邦幫忙

2022 iThome 鐵人賽

DAY 8
0
Software Development

歡迎來到 GIS 的世界!30 天從後端開始學 GIS系列 第 8

一起來用 DotSpatial 處理 Shapefile 吧! - 1 讀取

  • 分享至 

  • xImage
  •  

文章同步發表至 Medium

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 的版本,之前有遇到過版次不一導致功能出現一些問題,這時候可以試試看升版能不能解決。

套件 版本 備註
DotSpatial.Data 1.9.0 相依於其他四個套件
DotSpatial.Projections 1.9.0
DotSpatial.Serialization 1.9.0
DotSpatial.Mono 1.9.0
DotSpatial.Topology 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 才能取得資料。讀取完成的結果如下圖:


上一篇
一起來處理 Shapefile 吧! - Shapefile 怎麼看
下一篇
一起來用 DotSpatial 處理 Shapefile 吧! - 2 建立
系列文
歡迎來到 GIS 的世界!30 天從後端開始學 GIS30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言