繁体   English   中英

指向多边形*在地图上*

[英]Point in Polygon *On a map*

我正在使用Visual Studio 2010,包括参考动态数据显示地图。 我通过在点之间绘制DragglePoints和Segments在地图多边形上进行绘制。 我找到了一个代码,该代码可以找到point(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.XpointClicked.Position.X在地图值上被赋予了一个完美的变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM