我正在开发一个跨平台移动应用程序,将位置作为地理坐标存储到数据库中,每个点都代表图形对象的左上角。
此应用程序包含一个地图控件(来自telerik的radmap),它支持地理坐标,因此,您只需添加矩形并正确绘制它。
由于许可问题,我无法在Android版本中使用地图控件(谷歌不允许我们使用地图控件用于商业应用程序 - https://developers.google.com/maps/faq#tos_commercial,对于ios我仍然没有检查出来),所以我会用一个图像作为背景。
我有“地图/图像”的左上角和右下角地理坐标,我必须在角落定义的区域内绘制图形对象。
任何人都可以帮我发现如何将地理坐标转换为屏幕坐标。
数据示例(X,Y):
GEO
左上角:
-0,00939846 -0,00504255
右下角:
0,009398461 -0,01281023
要点:
-0.00464558,-0.00799298
-0.0046509,-0.00845432
-0.00386774,-0.00860988
-0.00344932,-0.00860452
SCREEN
左上角:
0 0
右下角:
? ?
绘制点
? ?
屏幕尺寸
1024 * 768
感谢您的帮助,
Luis Pinho
答案 0 :(得分:3)
我最熟悉iOS
,这就是我的答案。我尝试尽可能多地制作变量,以便您可以手动/编程覆盖它们,而无需更改太多其他代码。< / p>
- (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);
}
基本思想是你需要将点转换为新的坐标系。为此,您需要除以适当的地理维度并乘以适当的视图维度。