将GPS坐标映射到图像并在其上绘制一些GPS点
我有一些问题想清楚我的错误在哪里。 我得到以下内容:
有一个图像和其左上角和右下角顶点的相应GPS坐标。 例如:
topLeft.longitude = 8.235128;
topLeft.latitude = 49.632383;
bottomRight.longitude = 8.240547;
bottomRight.latitude = 49.629808;
现在有一个点位于该地图中:
p.longitude = 8.238567;
p.latitude = 49.630664;
我在横向全屏(1024 * 748)中绘制图像。
现在我想计算我的点的精确像素位置(x,y)。
为了做到这一点,我试图从这里使用大圆距离方法:链接。
CGFloat DegreesToRadians(CGFloat degrees)
{
return degrees * M_PI / 180;
};
- (float) calculateDistanceP1:(CLLocationCoordinate2D)p1 andP2:(CLLocationCoordinate2D)p2 {
double circumference = 40000.0; // Erdumfang in km am Äquator
double distance = 0.0;
double latitude1Rad = DegreesToRadians(p1.latitude);
double longitude1Rad = DegreesToRadians(p1.longitude);
double latititude2Rad = DegreesToRadians(p2.latitude);
double longitude2Rad = DegreesToRadians(p2.longitude);
double logitudeDiff = fabs(longitude1Rad - longitude2Rad);
if (logitudeDiff > M_PI)
{
logitudeDiff = 2.0 * M_PI - logitudeDiff;
}
double angleCalculation =
acos(sin(latititude2Rad) * sin(latitude1Rad) + cos(latititude2Rad) * cos(latitude1Rad) * cos(logitudeDiff));
distance = circumference * angleCalculation / (2.0 * M_PI);
NSLog(@"%f",distance);
return distance;
}
这是我获得Pixel位置的代码:
- (CGPoint) calculatePoint:(CLLocationCoordinate2D)point {
float x_coord;
float y_coord;
CLLocationCoordinate2D x1;
CLLocationCoordinate2D x2;
x1.longitude = p.longitude;
x1.latitude = topLeft.latitude;
x2.longitude = p.longitude;
x2.latitude = bottomRight.latitude;
CLLocationCoordinate2D y1;
CLLocationCoordinate2D y2;
y1.longitude = topLeft.longitude;
y1.latitude = p.latitude;
y2.longitude = bottomRight.longitude;
y2.latitude = p.latitude;
float distanceX = [self calculateDistanceP1:x1 andP2:x2];
float distanceY = [self calculateDistanceP1:y1 andP2:y2];
float distancePX = [self calculateDistanceP1:x1 andP2:p];
float distancePY = [self calculateDistanceP1:y1 andP2:p];
x_coord = fabs(distancePX * (1024 / distanceX))-1;
y_coord = fabs(distancePY * (748 / distanceY))-1;
return CGPointMake(x_coord,y_coord);
}
x1和x2是p的经度上的点,纬度是topLeft和bottomRight。 y1和y2是p的纬度上的点,并且具有topLeft和bottomRight的经度。
所以我得到了p的经度左右之间的距离和p上纬度上下的距离。 (需要计算像素位置)
现在我计算x1和p之间的距离(x_0和x_p之间的距离),然后计算y1和p之间的距离(y_0和y_p之间的距离)
最后但并非最不重要的像素位置计算并返回。
结果是,我的观点是在红色而不是在蓝色的位置:
也许你会发现任何错误或对提高准确性有任何建议。
也许我不明白你的问题,但不应该使用MKMapView
的转换地图坐标方法吗?
看到这张图片
我用你的坐标,简单地做了以下工作:
x_coord = 1024 * (p.longitude - topLeft.longitude)/(bottomRight.longitude - topLeft.longitude);
y_coord = 748 - (748 * (p.latitude - bottomRight.latitude)/(topLeft.latitude - bottomRight.latitude));
红点标记了这一点。 对于如此小的距离,你并不需要使用大圆圈,而舍入误差会使事情变得更加不准确
链接地址: http://www.djcxy.com/p/47295.html上一篇: Map GPS Coordinates to an Image and draw some GPS Points on it
下一篇: google maps