指向多边形*在地图上*

时间:2014-10-05 08:52:43

标签: c# polygon point dynamic-data-display point-in-polygon

我正在使用Visual Studio 2010,包括参考动态数据显示地图。 我通过在点之间绘制DragglePoints和Segments来绘制地图多边形。 我找到了一个代码,可以找到点(x,y)是否为多边形,但是在地图上它不起作用。

 pt = e.GetPosition(this.plotter.CentralGrid); // Get the mouse position
 ps = this.plotter.Viewport.Transform.ScreenToViewport(pt); // Transform the mouse positon to Screen on chartplotter

// Now ps is the point converting to the map point - it works perfect
// I'm using it for another things.(like Painting a dragglepoint or something else.

for (int k = 0; k <= listPolygons.Count - 1; k++)
{
   bool ifInside = PointInPolygon(new Point(ps.X, double.Parse(this.plotter.Viewport.Transform.DataTransform.ViewportToData(ps).Y.ToString())), listPolygons[k]); // Sending to the functing pointInPolygon the point and list of polygons we have
   if (ifInside)
   {
       listPolygons[k].removePolygon(listPolygons[k], plotter);
       listPolygons.RemoveAt(k);
       break;
   }
}

和函数PointInPolygon:

private bool PointInPolygon(Point point, Polygon polygon) 
{
    List<DraggablePoint> points = polygon.getListPoints();
    DraggablePoint pointClicked = new DraggablePoint(new Point(point.X, point.Y));
    int i, j, nvert = polygon.getNumberOfVertx();
    bool c = false;

    for(i = 0, j = nvert - 1; i < nvert; j = i++)
    {
        if (((points[i].Position.Y) >= pointClicked.Position.Y) != (points[j].Position.Y >= pointClicked.Position.Y) &&
                (pointClicked.Position.X <= (points[j].Position.X - points[i].Position.X) * (pointClicked.Position.Y - points[i].Position.Y) / (points[j].Position.Y - points[i].Position.Y) + points[i].Position.X))
                c = !c;
    }

    return c;
}

此处c始终返回false,无论我是在多边形内部还是在外部点击。 points[i].Position.Ypoints[i].Position.X以及pointClicked.Position.YpointClicked.Position.X在地图上给出了完美的变量。

0 个答案:

没有答案