如何在 C# 中将 KML 转换为 WKT?
how can you convert KML to WKT in c#?
我可以使用 nettopologysuite 轻松地将 WKT 转换为 KML,例如:
WKTReader wktR = new WKTReader();
GeoAPI.Geometries.IGeometry geom = wktR.Read(wktString);
KMLWriter writer = new KMLWriter();
string kml = writer.Write(geom);
但我找不到任何关于如何反其道而行之的文档或想法。我想我需要一个来自 nettopologysuite IO KML 的 KMLReader 对象,但只有一个作者。有没有我没有看到的方法?
您是对的 - NetTopologySuite 没有任何读取 KML 的功能。这可能是因为 KML 主要面向地图叠加层功能,并且有许多结构(如照片和屏幕叠加层)无法转换为更通用的几何结构。
KML 确实具有等效的通用几何图元(点、线、多边形),因此您只需要一些方法来加载它们,然后您就可以实现转换。
最直接的方法是确定您需要哪些 KML 元素,然后实施两步转换。用 SharpKml.Core 之类的库加载它们(展平和提取感兴趣的结构),然后实施构建器将它们转换为 NTS 等价物。有关如何从 KML 中提取感兴趣的元素的文档可在此处访问:https://github.com/samcragg/sharpkml/blob/master/docs/ExtractingElements.md
我可以使用 nettopologysuite 轻松地将 WKT 转换为 KML,例如:
WKTReader wktR = new WKTReader();
GeoAPI.Geometries.IGeometry geom = wktR.Read(wktString);
KMLWriter writer = new KMLWriter();
string kml = writer.Write(geom);
但我找不到任何关于如何反其道而行之的文档或想法。我想我需要一个来自 nettopologysuite IO KML 的 KMLReader 对象,但只有一个作者。有没有我没有看到的方法?
您是对的 - NetTopologySuite 没有任何读取 KML 的功能。这可能是因为 KML 主要面向地图叠加层功能,并且有许多结构(如照片和屏幕叠加层)无法转换为更通用的几何结构。
KML 确实具有等效的通用几何图元(点、线、多边形),因此您只需要一些方法来加载它们,然后您就可以实现转换。
最直接的方法是确定您需要哪些 KML 元素,然后实施两步转换。用 SharpKml.Core 之类的库加载它们(展平和提取感兴趣的结构),然后实施构建器将它们转换为 NTS 等价物。有关如何从 KML 中提取感兴趣的元素的文档可在此处访问:https://github.com/samcragg/sharpkml/blob/master/docs/ExtractingElements.md