获取坐标是否在折线内

时间:2013-04-01 07:23:16

标签: php maps coordinates

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

例如,在此图片中:

polywantcracker http://f.cl.ly/items/461O0V050S2p3Z3J2J1R/Image%202013.04.01%2009:20:57.png

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

最好是在PHP中:P

谢谢!

1 个答案:

答案 0 :(得分:2)

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

这是matemathical描述: http://en.wikipedia.org/wiki/Point_in_polygon,这里有一些不同的算法,你可以使用什么。我建议你从这里Ray casting algorithmRCA): http://rosettacode.org/wiki/Ray-casting_algorithm

你可以在php中实现伪代码;)

要解决数学问题,建议您浏览此项目:http://www.phpmath.com/home 希望你能为你的问题找到一个实现的php解决方案;)

如果您需要更高的性能,可以在2D中照顾collusion detection。 第一步:在多边形周围创建外部直肠,查看矩形中的点是否为insde。如果在里面,你有可能你的点在poly中,而不是运行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 max,2 min,2 <和2 { {1}}条件测试比>更快,如果某个点在矩形之外,则无需运行RCA

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

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