Ios 检查坐标矩形是否包含CLLocationCoordinate2D

Ios 检查坐标矩形是否包含CLLocationCoordinate2D,ios,core-location,cllocationmanager,cllocationcoordinate2d,Ios,Core Location,Cllocationmanager,Cllocationcoordinate2d,我正在使用一个用于iOS的特殊地图SDK,我正在向地图添加一个自定义形状。形状总是一个不同的大小,它可以是一个圆,正方形,星星等。关键是它总是动态的,每当应用程序运行 将此形状添加到地图后,我可以访问其名为overlayBounds的属性,该属性描述为:此属性包含完全覆盖覆盖的最小矩形。 overlay是我要添加到地图中的形状 每当CLLocationManager生成位置更新时,我都想检查最近的坐标是否位于形状的重叠边界属性内 当访问覆盖边界时,它具有ne属性和sw属性。这两个都只是CLLoc

我正在使用一个用于iOS的特殊地图SDK,我正在向地图添加一个自定义形状。形状总是一个不同的大小,它可以是一个圆,正方形,星星等。关键是它总是动态的,每当应用程序运行

将此形状添加到地图后,我可以访问其名为
overlayBounds
的属性,该属性描述为:
此属性包含完全覆盖覆盖的最小矩形。

overlay
是我要添加到地图中的形状

每当
CLLocationManager
生成位置更新时,我都想检查最近的坐标是否位于形状的
重叠边界
属性内

当访问覆盖边界时,它具有
ne
属性和
sw
属性。这两个都只是
CLLocationCoordinate2D的

因此,如果
OverlyBounds
由两个
CLLocationCoordinate2D
组成,并且
CLLocationManager
总是更新用户的位置并给我最新的坐标(
CLLocationCoordinate2D
),我如何检查最近的坐标是否在
OverlyBounds

在做了大量研究之后,我只找到了一个可行的解决方案,即:


但是这个答案假设我的
overlybounds
属性有4个坐标(
CLLocationCoordinate2D的
),而我只有2个

你的描述似乎比实际问题难多了。因此,如果我理解正确,您的问题只是检查该点是否位于
overlybounds
中描述的矩形内

您只有2个点,因为它足以定义一个矩形。因此,
NE
SW
是另外两个接收点,作为
(NE.x,SE.y)
(SE.x,NE.y)
。这样,您可以使用链接的答案,也可以简单地构造一个
MKMapRect
,其中原点为
NE
,大小为
SE-NE
。因此,在这种情况下,您只需使用
MKMapRectMake
,然后使用
MKMapRectContainsPoint
。但是,当计算大小时,请注意,
SE-NE
可能会产生负面结果,在这种情况下,您需要向大小添加度数。这是180到
x
(纬度)和360到
y
(经度)

MKMapRect rect=MKMapRectMake(东北纬度,东北经度,东南纬度-东北经度,东南经度东北经度);
如果(矩形宽度<.0)矩形宽度+=180.0;
如果(垂直高度<.0)垂直高度+=360.0;
BOOL pointInside=MKMapRectContainsPoint(rect,pointOnMap);
像这样的东西应该能奏效

现在,如果您试图检查点是否在形状本身内部,这实际上取决于形状的定义方式。如果这是某种形式的分析表示,您可能会发现一些方法已经为您提供了返回值的方法,但如果不是这样,那么您的最佳解决方案很可能是将形状绘制到某个画布上,并在需要检查的位置检查画布的颜色。在任何情况下,这里更大的问题是将点和矩形转换为笛卡尔坐标系。如果是这样的话,那就添加一条评论,我会尽力帮助你

MKMapRect rect = MKMapRectMake(NE.latitude, NE.longitude, SE.latitude-NE.latitude, SE.longitude-NE.longitude);
if(rect.width < .0) rect.width += 180.0;
if(rect.height < .0) rect.height += 360.0;
BOOL pointInside = MKMapRectContainsPoint(rect, pointOnMap);