Mam Shapefile, który zawiera kilka tysięcy wielokątów.Jak eksportować WKT z Shapefile wC#?
Potrzebuję przeczytać z tego pliku w C# i wyświetlić listę ciągów WKT formatted.
Spojrzałem na DotSpatial i "CatFood" ESRI Shapefile Reader. Mogę albo załadować plik kształtu w porządku, ale nie mogę wymyślić, jak następnie eksportować jako WKT.
W DotSpatial, jedyne przykłady, jakie mogłem znaleźć, to WktWriter
, które pobierają Geometry
. Nie mogłem wymyślić, jak uzyskać Geometry
od Shape
.
Czy istnieje biblioteka odpowiednia do tego?
Aktualizacja
Dzięki odpowiedź mdm20 jest, byłem w stanie napisać, co następuje:
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);
}
}
Powodem brakowało mi go pierwotnie dlatego, że był po this sample, który wykorzystuje fs.ShapeIndices
zamiast fs.GetShape()
. To nie zwraca wartości Shape
, ale ShapeRange
, której nie można przekonwertować na geometrię.
Nowe pytania
- powinienem być ustawienie
fs.IndexMode = true
? Dlaczego lub dlaczego nie? Wygląda na to, że nie ma żadnego wpływu na wyniki ani wyniki. fs.GetShape()
przyjmuje wartość logiczną o nazwiegetAttributes
. Mam swoje atrybuty na moich kształtach i wydaje się, że przechodzą przez to, czy jest to prawda czy fałsz. Ponownie, nie ma zauważalnego wpływu na wydajność w obu kierunkach. Czy to jest oczekiwane?- Uzyskując je w ten sposób, czy WKT reprezentuje rzeczywiste wartości przechowywane w pliku shape? Czy są one w jakikolwiek sposób przekształcone? Czy bierze pod uwagę jakieś ustawienia domyślne z dotSpatial i czy powinienem się przejmować ich zmianą?
- Plik kształtu, który importuję, to world timezone map. Zawiera plik .prj. Czy dotSpatial bierze to pod uwagę, a jeśli nie - czy muszę zrobić coś ekstra?
Wielkie dzięki!
Dzięki! Zobacz moje zaktualizowane pytanie ... z dodatkowymi pytaniami. :) –