2

给定地图中的坐标折线,我如何知道坐标是否在该折线内?

例如,在这张图片中:

多想饼干

我怎么知道 40.744818,-73.989701(例如)是否在里面?

最好在 PHP 中:P

谢谢 !

4

1 回答 1

2

这个问题已经解决(使用javascript),请阅读:https ://gis.stackexchange.com/questions/26225/solving-the-point-in-polygon-problem-using-google-maps-and-fusion-tables

这是数学描述: http ://en.wikipedia.org/wiki/Point_in_polygon ,这里有一些不同的算法,你可以使用。我向您推荐Ray casting algorithm( RCA) 从这里: http ://rosettacode.org/wiki/Ray-casting_algorithm

有一个伪代码可以在 php 中实现;)

为了解决数学问题,推荐浏览这个项目:http ://www.phpmath.com/home 并希望你能找到一个已实现的 php 解决方案来解决你的问题;)

如果您需要更高的性能,您可以collusion detection在 2D 中进行处理。第一步:在你的多边形周围创建一个外矩形,看是矩形中的点。如果在里面,你有机会你的点在多边形里面,然后运行Ray Casting Algorithm​​. 看:

$px //the x coordinate of your point
$py //the y coordinate of your point
$ppy //the y coordinates of points of your polygon (in the correct order)
$ppx //the x coordinates of points of your polygon (in the correct order)

$isInside = 
    (max($ppy)>$py && min($ppy)<$px && max($ppx)>$px && min($ppy)<$px)?
    RCA($px,$py,$ppx,$ppy): 
    false;    
}

/**
 * @description decide, is a point in poligon
 * @param float $px the x coordinate of your point
 * @param float $py the y coordinate of your point
 * @param array(float) $ppx the x coordinates of the points of polygon
 *             array(x1,x2,...) 
 * @param array(float) $ppy the y coordinates of the points of polygon
 *             array(y1,y2,...) 
 *             points of polygon: [x1,y1],[x2,y2],...
 * @return boolean : Is the point inside the polygon?
 */
function RCA($px,$py,array $ppx,array $ppy){
      //the implementation
}

(如果在你的使用中,外矩形外有很多坐标,这段代码跑得更快。2、2、2、2max条件min测试比运行)<>RCARCA

(下面的解决方案不是面向对象的。如果您使用OOP该解决方案可能会更好:))

帮助链接在哪里是 php 中的实现:http: //assemblysys.com/php-point-in-polygon-algorithm/(不完全是我写的,但应该可以)

于 2013-04-01T07:31:59.670 回答