Tôi có một số Shapefile có chứa vài nghìn đa giác.Làm thế nào để xuất WKT từ một Shapefile trong C#?
Tôi cần đọc từ tệp này trong C# và xuất danh sách các chuỗi WKT formatted.
Tôi đã xem DotSpatial và "CatFood" ESRI Shapefile Reader. Tôi có thể nhận được hoặc để tải shapefile tốt, nhưng tôi không thể tìm ra cách sau đó xuất khẩu như WKT.
Trong DotSpatial, các ví dụ duy nhất tôi có thể tìm thấy sử dụng số WktWriter
chụp Geometry
. Tôi không thể tìm ra cách để có được một Geometry
từ một Shape
.
Có thư viện nào phù hợp hơn cho điều này không?
Cập nhật
Nhờ câu trả lời mdm20, tôi đã có thể viết như sau:
using (var fs = FeatureSet.Open(path))
{
var writer = new WktWriter();
var numRows = fs.NumRows();
for (int i = 0; i < numRows; i++)
{
var shape = fs.GetShape(i, true);
var geometry = shape.ToGeometry();
var wkt = writer.Write((Geometry) geometry);
Debug.WriteLine(wkt);
}
}
Lý do tôi bỏ lỡ nó ban đầu là vì tôi đang theo dõi this sample, trong đó sử dụng fs.ShapeIndices
thay vì fs.GetShape()
. Điều đó trả về không phải là Shape
, nhưng là ShapeRange
, mà tôi không thể chuyển đổi thành hình học.
Câu hỏi mới
- Tôi có nên được thiết lập
fs.IndexMode = true
? Tại sao hay tại sao không? Nó dường như không có bất kỳ hiệu suất hoặc kết quả nào. fs.GetShape()
có boolean được gọi làgetAttributes
. Tôi có các thuộc tính về hình dạng của tôi, và họ dường như đi qua cho dù điều này được đặt đúng hay sai. Một lần nữa, không có tác động hiệu suất đáng chú ý nào cả. Điều đó có được mong đợi không?- Bằng cách nhận chúng theo cách này, WKT có đại diện cho các giá trị thực được lưu trữ trong shapefile không? Hay chúng được biến đổi theo bất kỳ cách nào? Có phải nó đang lấy bất kỳ cài đặt mặc định nào từ dotSpatial vào tài khoản và tôi có nên lo lắng về việc thay đổi chúng không?
- Shapefile tôi đang nhập là world timezone map. Nó chứa tệp .prj. DotSpatial có tính đến điều này, và nếu không - tôi có cần phải làm gì thêm không?
Rất cám ơn!
Cảm ơn! Vui lòng xem câu hỏi được cập nhật của tôi ... với nhiều câu hỏi hơn. :) –