我找到了一个示例,可以将折线创建缓冲区以便最终得到一个多边形。
到目前为止,我发现需要使用 Minkowski Sums,但我无法理解其原始算法并将其转化为代码。
希望有C#的示例或该算法的详细步骤说明。
我找到了一个示例,可以将折线创建缓冲区以便最终得到一个多边形。
到目前为止,我发现需要使用 Minkowski Sums,但我无法理解其原始算法并将其转化为代码。
希望有C#的示例或该算法的详细步骤说明。
http://www.charlespetzold.com/blog/2008/04/Rounded-Graphics-in-WPF.html
。 // ...
StreamGeometry geom = new StreamGeometry();
DrawLines(geom);
Pen p = new Pen(Brushes.Black, 10);
p.LineJoin = PenLineJoin.Round;
p.EndLineCap = PenLineCap.Round;
p.StartLineCap = PenLineCap.Round;
PathGeometry pathGeomWide = geom.GetWidenedPathGeometry(p);
PathGeometry pathGeom = pathGeomWide.GetOutlinedPathGeometry();
Path myPath = new Path();
myPath.Stroke = Brushes.Black;
myPath.Data = pathGeom;
myCanvas.Children.Add(myPath);
// ...
private static void DrawLines(StreamGeometry geom)
{
using (var context = geom.Open())
{
context.BeginFigure(new Point(20, 20), false, true);
context.LineTo(new Point(100, 20), true, true);
context.LineTo(new Point(100, 100), true, true);
context.LineTo(new Point(200, 100), true, true);
}
}
你尝试过从Codeplex使用'Dot Spatial'库吗?
http://dotspatial.codeplex.com/
该程序内部使用Geos和Proj4库,这两个库已经包含了您所需的所有功能(世界上大多数GIS服务器和产品都是基于这两个代码库构建的!)。
如果无法使用这些库,您可以使用SQlite:
http://sqlite.phxsoftware.com/
以及Spatialite:
http://www.gaia-gis.it/spatialite/
然后使用 C# 中的 ADO.NET 代码,您可以使用简单的 GIS SQL 查询来执行处理,例如:
SELECT AsText(ST_Buffer(polyline,0.25),4326)
这将返回一个类似于字符串的东西:
MULTIPOLYGON((x y, x y, x y, x y......))
然后你可以轻松解析它。
没有必要重新发明轮子,因为你需要的一切都已经准备就绪。