Ios7 确定CLLocationCoordinate2D是否在定义的区域(边界)内?

Ios7 确定CLLocationCoordinate2D是否在定义的区域(边界)内?,ios7,core-location,Ios7,Core Location,我试图找到一种简单的方法来确定一个CLLocationCoordinate2D是否位于由一系列其他CLLocationCoordinate2D定义的任意形状的边界内。形状可能足够大,需要考虑大圆路径 CL过去有一个循环区域和containsCoordinate:调用来测试,但在iOS7中已经弃用了它,dox也没有包含替换它的提示。我找不到任何其他的例子,尤其是一个对多边形有效的例子 这里有许多类似的问题,但它们与iOS没有特别的关系,而且,我似乎也找不到一个对大圆多边形有效的方法。这里有一个可能

我试图找到一种简单的方法来确定一个CLLocationCoordinate2D是否位于由一系列其他CLLocationCoordinate2D定义的任意形状的边界内。形状可能足够大,需要考虑大圆路径

CL过去有一个循环区域和containsCoordinate:调用来测试,但在iOS7中已经弃用了它,dox也没有包含替换它的提示。我找不到任何其他的例子,尤其是一个对多边形有效的例子

这里有许多类似的问题,但它们与iOS没有特别的关系,而且,我似乎也找不到一个对大圆多边形有效的方法。

这里有一个可能对您有效的方法示例(使用阿尔冈昆省公园)

要为此使用
CGPathContainsPoint
,不需要
MKMapView

也不需要创建
MKPolygon
,甚至不需要使用
CLLocationCoordinate2D
MKMapPoint
结构。它们只是让代码更容易理解

下面的屏幕截图是根据数据创建的,仅用于说明目的

int numberOfCoordinates=10;
//此示例使用10个坐标绘制原始多边形
//阿尔冈琴省公园周围。使用尽可能多的坐标
//正如您希望达到所需的精度。
CLLocationCoordinate2D算法基准坐标[numberOfCoordinates];
Algonquinpark坐标[0]=CLLocationCoordinate2DMake(46.105,-79.4);
AlgonquinPark坐标[1]=CLLocationCoordinate2DMake(46.15487,-78.80759);
Algonquinpark坐标[2]=CLLocationCoordinate2DMake(46.16629,-78.12095);
AlgonquinPark坐标[3]=CLLocationCoordinate2DMake(46.11964,-77.70896);
AlgonquinPark坐标[4]=CLLocationCoordinate2DMake(45.74140,-77.45627);
AlgonquinPark坐标[5]=CLLocationCoordinate2DMake(45.52630,-78.22532);
AlgonquinPark坐标[6]=CLLocationCoordinate2DMake(45.18662,-78.06601);
AlgonquinPark坐标[7]=CLLocationCoordinate2DMake(45.11689,-78.29123);
AlgonquinPark坐标[8]=CLLocationCoordinate2DMake(45.42230,-78.69773);
AlgonquinPark坐标[9]=CLLocationCoordinate2DMake(45.35672,-78.90647);
//从上述坐标创建CGPath。。。
CGMutablePathRef mpr=CGPathCreateMutable();
对于(int p=0;p
以下是上述测试的结果:

tc[0] (45.500000,-78.500000) in polygon = Yes
tc[1] (45.300000,-79.100000) in polygon = No
tc[2] (45.100000,-77.900000) in polygon = No
tc[3] (47.300000,-79.600000) in polygon = No
tc[4] (45.500000,-78.700000) in polygon = Yes
tc[5] (46.800000,-78.400000) in polygon = No
tc[6] (46.100000,-78.200000) in polygon = Yes

此屏幕截图仅用于说明数据(运行上述代码不需要实际
MKMapView
):

以下是一个可能适合您的方法示例(使用阿尔冈昆省级公园)

要为此使用
CGPathContainsPoint
,不需要
MKMapView

也不需要创建
MKPolygon
,甚至不需要使用
CLLocationCoordinate2D
MKMapPoint
结构。它们只是让代码更容易理解

下面的屏幕截图是根据数据创建的,仅用于说明目的

int numberOfCoordinates=10;
//此示例使用10个坐标绘制原始多边形
//阿尔冈琴省公园周围。使用尽可能多的坐标
//正如您希望达到所需的精度。
CLLocationCoordinate2D算法基准坐标[numberOfCoordinates];
Algonquinpark坐标[0]=CLLocationCoordinate2DMake(46.105,-79.4);
AlgonquinPark坐标[1]=CLLocationCoordinate2DMake(46.15487,-78.80759);
Algonquinpark坐标[2]=CLLocationCoordinate2DMake(46.16629,-78.12095);
AlgonquinPark坐标[3]=CLLocationCoordinate2DMake(46.11964,-77.70896);
AlgonquinPark坐标[4]=CLLocationCoordinate2DMake(45.74140,-77.45627);
AlgonquinPark坐标[5]=CLLocationCoordinate2DMake(45.52630,-78.22532);
AlgonquinPark坐标[6]=CLLocationCoordinate2DMake(45.18662,-78.06601);
AlgonquinPark坐标[7]=CLLocationCoordinate2DMake(45.11689,-78.29123);
AlgonquinPark坐标[8]=CLLocationCoordinate2DMake(45.42230,-78.69773);
AlgonquinPark坐标[9]=CLLocationCoordinate2DMake(45.35672,-78.90647);
//从上述坐标创建CGPath。。。
CGMutablePathRef mpr=CGPathCreateMutable();
对于(int p=0;p