3 回答
TA贡献1880条经验 获得超4个赞
不幸的是,API中没有提供此类功能,因此您必须编写自己的函数。
该站点提供了一些涉及纬度/经度的计算以及示例JavaScript代码。具体来说,标题为“给定距离和起点的目标点”的部分显示了如何计算您的要求。
JavaScript代码在该页面的底部,这是将其转换为Objective-C的一种可能方法:
- (double)radiansFromDegrees:(double)degrees
{
return degrees * (M_PI/180.0);
}
- (double)degreesFromRadians:(double)radians
{
return radians * (180.0/M_PI);
}
- (CLLocationCoordinate2D)coordinateFromCoord:
(CLLocationCoordinate2D)fromCoord
atDistanceKm:(double)distanceKm
atBearingDegrees:(double)bearingDegrees
{
double distanceRadians = distanceKm / 6371.0;
//6,371 = Earth's radius in km
double bearingRadians = [self radiansFromDegrees:bearingDegrees];
double fromLatRadians = [self radiansFromDegrees:fromCoord.latitude];
double fromLonRadians = [self radiansFromDegrees:fromCoord.longitude];
double toLatRadians = asin( sin(fromLatRadians) * cos(distanceRadians)
+ cos(fromLatRadians) * sin(distanceRadians) * cos(bearingRadians) );
double toLonRadians = fromLonRadians + atan2(sin(bearingRadians)
* sin(distanceRadians) * cos(fromLatRadians), cos(distanceRadians)
- sin(fromLatRadians) * sin(toLatRadians));
// adjust toLonRadians to be in the range -180 to +180...
toLonRadians = fmod((toLonRadians + 3*M_PI), (2*M_PI)) - M_PI;
CLLocationCoordinate2D result;
result.latitude = [self degreesFromRadians:toLatRadians];
result.longitude = [self degreesFromRadians:toLonRadians];
return result;
}
在JS代码中,它包含此链接,该链接显示了对大于地球周长1/4的距离的更精确的计算。
另请注意,上面的代码接受以km为单位的距离,因此请确保在通过之前将米除以1000.0。
TA贡献1796条经验 获得超10个赞
我找到了一种方法,必须进行挖掘以找到正确的结构和功能。我最终没有使用度数,而是用经度和纬度来表示米。
这是我的操作方式:
-(CLLocationCoordinate2D)translateCoord:(CLLocationCoordinate2D)coord MetersLat:(double)metersLat MetersLong:(double)metersLong{
CLLocationCoordinate2D tempCoord;
MKCoordinateRegion tempRegion = MKCoordinateRegionMakeWithDistance(coord, metersLat, metersLong);
MKCoordinateSpan tempSpan = tempRegion.span;
tempCoord.latitude = coord.latitude + tempSpan.latitudeDelta;
tempCoord.longitude = coord.longitude + tempSpan.longitudeDelta;
return tempCoord;
}
当然,如果将来我真的需要使用学位,对我进行一些更改(如我所想)很容易(我认为...)。
TA贡献1818条经验 获得超7个赞
使用an MKCoordinateRegion存在一些问题-可以调整返回的区域以适合该位置,因为两个增量可能无法准确地映射到该纬度处的投影,如果您希望其中一个轴的零增量不符合要求,等等。
此功能用于MKMapPoint执行坐标平移,使您可以在地图投影的坐标空间中移动点,然后从中提取坐标。
CLLocationCoordinate2D MKCoordinateOffsetFromCoordinate(CLLocationCoordinate2D coordinate, CLLocationDistance offsetLatMeters, CLLocationDistance offsetLongMeters) {
MKMapPoint offsetPoint = MKMapPointForCoordinate(coordinate);
CLLocationDistance metersPerPoint = MKMetersPerMapPointAtLatitude(coordinate.latitude);
double latPoints = offsetLatMeters / metersPerPoint;
offsetPoint.y += latPoints;
double longPoints = offsetLongMeters / metersPerPoint;
offsetPoint.x += longPoints;
CLLocationCoordinate2D offsetCoordinate = MKCoordinateForMapPoint(offsetPoint);
return offsetCoordinate;
}
- 3 回答
- 0 关注
- 402 浏览
添加回答
举报