Android 地理坐标到屏幕坐标的算法

Android 地理坐标到屏幕坐标的算法,android,ios,xamarin.ios,xamarin.android,geo,Android,Ios,Xamarin.ios,Xamarin.android,Geo,我正在开发一个跨平台的移动应用程序,它将位置作为地理坐标存储到数据库中,每个点代表图形对象的左上角 这个应用程序包含一个地图控件(来自telerik的radmap),它支持地理坐标,因此,您只需添加矩形,它就能正确地绘制它 由于许可问题,我无法在android版本中使用地图控件(谷歌不允许我们在商业应用程序中使用地图控件,对于ios,我仍然没有检查),因此我将使用图像作为背景 我已经得到了“地图/图像”的左上角和右下角的地理坐标,并且我必须在角定义的区域内绘制图形对象 谁能帮我找到如何将地理坐标

我正在开发一个跨平台的移动应用程序,它将位置作为地理坐标存储到数据库中,每个点代表图形对象的左上角

这个应用程序包含一个地图控件(来自telerik的radmap),它支持地理坐标,因此,您只需添加矩形,它就能正确地绘制它

由于许可问题,我无法在android版本中使用地图控件(谷歌不允许我们在商业应用程序中使用地图控件,对于ios,我仍然没有检查),因此我将使用图像作为背景

我已经得到了“地图/图像”的左上角和右下角的地理坐标,并且我必须在角定义的区域内绘制图形对象

谁能帮我找到如何将地理坐标转换成屏幕坐标

数据示例(X,Y):

左上角:

-000939846-000504255

右下角:

0009398461-001281023

要绘制的点:

-0.00464558,-0.00799298

-0.0046509,-0.00845432

-0.00386774,-0.00860988

-0.00344932,-0.00860452

        SCREEN
左上角:

0 0

右下角:

?

要点

?

屏幕大小

1024*768

谢谢你的帮助


路易斯·皮尼奥(Luis Pinho)

我的iOS操作系统最流利,所以这就是我的答案。我尝试尽可能多地创建变量,以便您可以手动/编程地重写它们,而不必更改太多其他代码

- (CGPoint)convertGeoPoint:(CGPoint)point toView:(UIView*)view {
    CGPoint geoTopLeft = CGPointMake(-0.00939846, -0.00504255);
    CGPoint geoBottomRight = CGPointMake(0.009398461, -0.01281023);
    CGFloat geoWidth = geoBottomRight.x - geoTopLeft.x;
    CGFloat geoHeight = geoBottomRight.y - geoTopLeft.y;

    // This is the block you would change to suit your needs
    CGPoint viewTopLeft = CGPointMake(view.frame.origin.x, view.frame.origin.y);
    CGFloat viewWidth = view.frame.size.width;
    CGFloat viewHeight = view.frame.size.height;

    return CGPointMake(viewTopLeft.x + (point.x-geoTopLeft.x)*viewWidth/geoWidth, viewTopLeft.y + (point.y-geoTopLeft.y)*viewHeight/geoHeight);
}

基本思想是需要将点转换为新的坐标系。为此,您需要除以适当的地理维度,然后乘以适当的视图维度。

您已经标记了Monodroid和Monotouch。这实际上是一个Xamarin应用程序吗?是的,我正在使用Xamarin试用版(目前),并计划购买一个商业许可证。嗨,Sam,我正在excel中运行您的代码(我现在没有任何osx可用-将其留在办公室-在xCode上运行)。根据我的模拟,结果似乎是有希望的,至少我已经用这个算法正确运行了测试。非常感谢你!!!很乐意帮忙!如果它最终没有如您所期望的那样工作,请告诉我。
- (CGPoint)convertGeoPoint:(CGPoint)point toView:(UIView*)view {
    CGPoint geoTopLeft = CGPointMake(-0.00939846, -0.00504255);
    CGPoint geoBottomRight = CGPointMake(0.009398461, -0.01281023);
    CGFloat geoWidth = geoBottomRight.x - geoTopLeft.x;
    CGFloat geoHeight = geoBottomRight.y - geoTopLeft.y;

    // This is the block you would change to suit your needs
    CGPoint viewTopLeft = CGPointMake(view.frame.origin.x, view.frame.origin.y);
    CGFloat viewWidth = view.frame.size.width;
    CGFloat viewHeight = view.frame.size.height;

    return CGPointMake(viewTopLeft.x + (point.x-geoTopLeft.x)*viewWidth/geoWidth, viewTopLeft.y + (point.y-geoTopLeft.y)*viewHeight/geoHeight);
}