给定地图中的坐标折线,我如何知道坐标是否在该折线内?
例如,在这张图片中:
我怎么知道 40.744818,-73.989701(例如)是否在里面?
最好在 PHP 中:P
谢谢 !
这个问题已经解决(使用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
测试比运行)<
>
RCA
RCA
(下面的解决方案不是面向对象的。如果您使用OOP
该解决方案可能会更好:))
帮助链接在哪里是 php 中的实现:http: //assemblysys.com/php-point-in-polygon-algorithm/(不完全是我写的,但应该可以)