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