【发布时间】:2013-05-06 01:44:44
【问题描述】:
我正在使用一个 API,它允许我指定坐标的“边界框”,它允许我只返回该框内的结果:
- 返回已排序的指定边界框内的地理藏宝列表 由到盒子中心的距离。
- 参数南 纬度、西经、北纬、东经定义 边界框的边缘。
- 坐标应为十进制度 使用 北纬和东经的正数和负数 南纬和西经的数字。
- 盒子不能越过 180° 经线或 90° 或 -90° 点。
这方面的数学有点超出我的能力,但我发现了一些有用的计算,但我不确定它是否是我需要的 API:
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(self.mapView.centerCoordinate, 2000.0, 2000.0);
CLLocationCoordinate2D northWestCorner, southEastCorner;
northWestCorner.latitude = center.latitude - (region.span.latitudeDelta / 2.0);
northWestCorner.longitude = center.longitude + (region.span.longitudeDelta / 2.0);
southEastCorner.latitude = center.latitude + (region.span.latitudeDelta / 2.0);
southEastCorner.longitude = center.longitude - (region.span.longitudeDelta / 2.0);
有人知道我该怎么做吗?此处的计算是否对获取定义边界框边缘的west longitude, north latitude, east longitude 没有帮助?
编辑:
我得到的错误:
Invalid value for parameter: bbox=south,west,north,east
使用中心值:
center=37.552821,-122.377413
转换后的盒子(根据上面的计算):
bbox=37.561831,-122.388730,37.543811,-122.366096
最终工作代码:
// Current distance
MKMapRect mRect = mapView.visibleMapRect;
MKMapPoint eastMapPoint = MKMapPointMake(MKMapRectGetMinX(mRect), MKMapRectGetMidY(mRect));
MKMapPoint westMapPoint = MKMapPointMake(MKMapRectGetMaxX(mRect), MKMapRectGetMidY(mRect));
CLLocationDistance distance = MKMetersBetweenMapPoints(eastMapPoint, westMapPoint);
// Region
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(request.center, distance, distance);
CLLocationCoordinate2D northWestCorner, southEastCorner;
northWestCorner.latitude = request.center.latitude + (region.span.latitudeDelta / 2.0);
northWestCorner.longitude = request.center.longitude - (region.span.longitudeDelta / 2.0);
southEastCorner.latitude = request.center.latitude - (region.span.latitudeDelta / 2.0);
southEastCorner.longitude = request.center.longitude + (region.span.longitudeDelta / 2.0);
base = [base stringByAppendingFormat:@"bbox=%f,%f,%f,%f&", southEastCorner.latitude,northWestCorner.longitude,northWestCorner.latitude,southEastCorner.longitude];
【问题讨论】:
标签: ios objective-c mapkit cllocation mkcoordinateregion