我有我需要用作应用程序的地图的商场图像。我有地图底角的GPS lat/long,我计算出了从底部GPS坐标到地图图像顶部的距离。这些都不是直线上下的线性地图,这意味着我不能只画出我的经纬度,长得很好,很整齐。如何绘制用作地图的图像上的GPS位置?
我已经尝试过使用各种公式,而且我非常接近,但是我无法绘制地图左上角和右上角的顶部经纬度。到目前为止,这是我有:
double distanceFromLeftToRightGPS = bottomLeft.distanceTo(bottomRight);
double bearingleftToRight= bottomLeft.bearingTo(bottomRight);
double distmapFromLeftToRightImg = map.getWidth();
double distmapFromTopToBottomImg = map.getHeight();
double percentageValueOfTopToBottomImg = (distmapFromTopToBottomImg * 100)
/distmapFromLeftToRightImg;
double distanceFromTopToBottomGPS = (percentageValueOfTopToBottomImg * 0.01)
* distanceFromLeftToRightGPS;
double bearingToTopFromBottom = -90;
double lat1 = Math.toRadians(bottomLeft.getLatitude());
double lon1 = Math.toRadians(bottomLeft.getLongitude());
double dist = (distanceFromTopToBottomGPS/1000f)/6371.0f;
double lat2 = Math.asin(Math.sin(lat1) * Math.cos(dist)
+ Math.cos(lat1) * Math.sin(dist) * Math.cos(bearingToTopFromBottom));
double a = Math.atan2(Math.sin(bearingToTopFromBottom) * Math.sin(dist)
* Math.cos(lat1), Math.cos(dist) - Math.sin(lat1) * Math.sin(lat2));
System.out.println("a = " + a);
double lon2 = lon1 + a;
lon2 = (lon2 + 3 * Math.PI) % (2 * Math.PI) - Math.PI;
System.out.println("Latitude = " + Math.toDegrees(lat2) + "\nLongitude = "
+ Math.toDegrees(lon2));
这让我哦,如此接近,但最终的位置是离开它应该是真正的。我也不确定我应该使用什么样的方式来查看地图底部会发生什么。如果其他人有一些关于如何让这个工作很棒的信息。
这张照片是一幅地图,显示出像一个国家或大陆这样的大地理区域,还是显示出像村庄或城市这样的小部分? – AlexWien 2013-03-14 11:39:38
这些是矩形图像,基本上都是从大型商场的蓝色图案中提取的。我实际上遇到了一些与我需要的数据类似的帖子,它使用左上角和右下角的gps坐标来显示地图在谷歌地图上排列的位置,然后找到放置gps位置的位置用户。我根据自己的需求量身定制了它,它工作得很好。 – 2013-03-14 17:16:05
是的,对于这样的小区域来说,这是非常不容易的。没有考虑地球曲率,只有纬度与经度轴的比例不同。 – AlexWien 2013-03-14 17:29:13