将屏幕尺寸(像素)转换为Latitude&经度

时间:2012-06-13 17:14:12

标签: android eclipse web-services google-maps

好的,所以我正在尝试编写一个代码,该代码根据当前可查看区域返回地图的所有4个角位置的值。例如,用户通过他的设备访问谷歌地图,他专注于特定区域并点击按钮并返回所有四个角落的位置(纬度和经度)。

为此,我有中心坐标,现在我想要当前可视区域的范围,并获得左上角和右下角坐标。为此,我用过,

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x; // returns 480
int height = size.y; // returns 800

现在我想将它们转换为纬度和经度值,以便我可以使用简单的数学运算,例如:

topLeftLat= centerLat + lat/2;
topLeftLon= centerLon - lng/2;
bottomRightLat= centerLat - lat/2;
bottomRightLon = CenterLon + lng/2;

这会给我角落的坐标。 lat和lng是纬度和长度值的转换后的分辨率。

1 个答案:

答案 0 :(得分:2)

这需要5分钟搜索谷歌,所以我不知道为什么我给你这个...学习研究是开发人员最重要的部分。

GeoPoint mapCenter = myMap.getMapCenter();

   float centerLatitude = (float)(mapCenter.getLatitudeE6())/1000000;
   float centerLongitude = (float)(mapCenter.getLongitudeE6())/1000000;

   float latitudeSpan = (float)(myMap.getLatitudeSpan())/1000000;
   float longitudeSpan = (float)(myMap.getLongitudeSpan()/1000000);

   GeoPoint mapTopLeft = myMap.getProjection().fromPixels(0, 0);
   float topLatitude = (float)(mapTopLeft.getLatitudeE6())/1000000;
   float leftLongitude = (float)(mapTopLeft.getLongitudeE6())/1000000;

   GeoPoint mapBottomRight
   = myMap.getProjection().fromPixels(myMap.getWidth(), myMap.getHeight());
   float bottomLatitude = (float)(mapBottomRight.getLatitudeE6())/1000000;
   float rightLongitude = (float)(mapBottomRight.getLongitudeE6())/1000000;

String info =
     "Center: " + centerLatitude + "/" + centerLongitude + "\n"
     + "Top Left: " + topLatitude + "/" + leftLongitude + "\n"
     + "Bottom Right: " + bottomLatitude + "/" + rightLongitude + "\n"
     + "latitudeSpan: " + latitudeSpan + "\n"
     + "longitudeSpan: " + longitudeSpan + "\n";

   Toast.makeText(AndroidMapActivity.this,
     info,
     Toast.LENGTH_LONG).show();
  }};

完整教程可在Android-er: Get the the coordinates (Latitude and Longitude) currently displayed on MapView

获取