M. *_*zal 5 android google-maps
我使用com.google.android.gms.maps.GoogleMap在SherlockFragmentActivity.
XML代码是这样的:
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="fill_parent"
android:layout_height="150dip" />
Run Code Online (Sandbox Code Playgroud)
int zoomLevel =?//我如何计算两个不同latlong值的缩放级别,因为android map v3需要将缩放级别告诉为int
map.setZoom(zoomLevel);
Run Code Online (Sandbox Code Playgroud)
我有起始值和目标值 com.google.android.gms.maps.model.LatLng
LatLng开始,结束;
我正在添加一个像pligon GoogleLocation.addPolyLineOnGMap(mMap, startPoint, endPoint, startMarker, endMarker)
我的问题是如何计算谷歌地图的缩放级别,以便它可以在地图上适当地显示两个标记.
Nik*_*lia 15
使用LatLngBounds.Builder添加其中的所有边界并构建它,然后创建CameraUpdate对象并使用填充传递updatefactory中的边界.使用此CameraUpdate对象为地图相机设置动画.
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (Marker m : markers) {
builder.include(m.getPosition());
}
LatLngBounds bounds = builder.build();
int padding = ((width * 10) / 100); // offset from edges of the map
// in pixels
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds,
padding);
mMap.animateCamera(cu);
Run Code Online (Sandbox Code Playgroud)
对我来说,我需要通过 计算初始地图设置的缩放GoogleMapOptions,因此使用LatLngBounds.Builder
不起作用且未优化。这就是我根据城市的东北和西南坐标计算缩放的方法
它引用了这里和这个答案,你可以简单地将下面的代码放入你的帮助器类中:
final static int GLOBE_WIDTH = 256; // a constant in Google's map projection
final static int ZOOM_MAX = 21;
public static int getBoundsZoomLevel(LatLng northeast,LatLng southwest,
int width, int height) {
double latFraction = (latRad(northeast.latitude) - latRad(southwest.latitude)) / Math.PI;
double lngDiff = northeast.longitude - southwest.longitude;
double lngFraction = ((lngDiff < 0) ? (lngDiff + 360) : lngDiff) / 360;
double latZoom = zoom(height, GLOBE_WIDTH, latFraction);
double lngZoom = zoom(width, GLOBE_WIDTH, lngFraction);
double zoom = Math.min(Math.min(latZoom, lngZoom),ZOOM_MAX);
return (int)(zoom);
}
private static double latRad(double lat) {
double sin = Math.sin(lat * Math.PI / 180);
double radX2 = Math.log((1 + sin) / (1 - sin)) / 2;
return Math.max(Math.min(radX2, Math.PI), -Math.PI) / 2;
}
private static double zoom(double mapPx, double worldPx, double fraction) {
final double LN2 = .693147180559945309417;
return (Math.log(mapPx / worldPx / fraction) / LN2);
}
Run Code Online (Sandbox Code Playgroud)
LatLng简单地创建new LatLng(lat-double, lng-double)
width是height地图布局大小(以像素为单位)
| 归档时间: |
|
| 查看次数: |
7629 次 |
| 最近记录: |