给定地图中坐标的折线,如何知道坐标是否在此折线内?
例如,在此图片中:
polywantcracker http://f.cl.ly/items/461O0V050S2p3Z3J2J1R/Image%202013.04.01%2009:20:57.png
我怎么知道40.744818,-73.989701(每个例子)是否在里面?
最好是在PHP中:P
谢谢!
答案 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 algorithm
(RCA
):
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/(不完全是我写的,但应该有用)