谷歌地图api V2resize屏幕以匹配绘制的圆圈
我在地图中绘制一个圆圈(在用户的当前位置),我希望屏幕可以缩放以使圆圈具有一定的余量。 我现在在做什么:
drawCercleAroundPin(_googleMap, DataManager.RADIUS_SEARCH_CERCLE, _location); moveCamera(_googleMap, (10 / ((DataManager.RADIUS_SEARCH_CERCLE / 900) + 1))+10, 2000, _location, null);
好吧,我尝试了一些愚蠢的微积分,因为我无法找到合适的解决方案……
有没有人有想法?
如果我理解正确,您希望地图适合圆圈边界? 如果是这样
像这样添加一个圆圈
mMap.addCircle(new CircleOptions() .center(new LatLng(location.getLatitude(), location.getLongitude())) .radius(100) .strokeColor(Color.RED) .fillColor(Color.BLUE));
**那么你需要你的圈子的边框,阅读这个 **
LatLngBounds bounds = boundsWithCenterAndLatLngDistance(new LatLng(location.getLatitude(), location.getLongitude()),200,200);
**并尝试**
private static final double ASSUMED_INIT_LATLNG_DIFF = 1.0; private static final float ACCURACY = 0.01f; public static LatLngBounds boundsWithCenterAndLatLngDistance(LatLng center, float latDistanceInMeters, float lngDistanceInMeters) { latDistanceInMeters /= 2; lngDistanceInMeters /= 2; LatLngBounds.Builder builder = LatLngBounds.builder(); float[] distance = new float[1]; { boolean foundMax = false; double foundMinLngDiff = 0; double assumedLngDiff = ASSUMED_INIT_LATLNG_DIFF; do { Location.distanceBetween(center.latitude, center.longitude, center.latitude, center.longitude + assumedLngDiff, distance); float distanceDiff = distance[0] - lngDistanceInMeters; if (distanceDiff < 0) { if (!foundMax) { foundMinLngDiff = assumedLngDiff; assumedLngDiff *= 2; } else { double tmp = assumedLngDiff; assumedLngDiff += (assumedLngDiff - foundMinLngDiff) / 2; foundMinLngDiff = tmp; } } else { assumedLngDiff -= (assumedLngDiff - foundMinLngDiff) / 2; foundMax = true; } } while (Math.abs(distance[0] - lngDistanceInMeters) > lngDistanceInMeters * ACCURACY); LatLng east = new LatLng(center.latitude, center.longitude + assumedLngDiff); builder.include(east); LatLng west = new LatLng(center.latitude, center.longitude - assumedLngDiff); builder.include(west); } { boolean foundMax = false; double foundMinLatDiff = 0; double assumedLatDiffNorth = ASSUMED_INIT_LATLNG_DIFF; do { Location.distanceBetween(center.latitude, center.longitude, center.latitude + assumedLatDiffNorth, center.longitude, distance); float distanceDiff = distance[0] - latDistanceInMeters; if (distanceDiff < 0) { if (!foundMax) { foundMinLatDiff = assumedLatDiffNorth; assumedLatDiffNorth *= 2; } else { double tmp = assumedLatDiffNorth; assumedLatDiffNorth += (assumedLatDiffNorth - foundMinLatDiff) / 2; foundMinLatDiff = tmp; } } else { assumedLatDiffNorth -= (assumedLatDiffNorth - foundMinLatDiff) / 2; foundMax = true; } } while (Math.abs(distance[0] - latDistanceInMeters) > latDistanceInMeters * ACCURACY); LatLng north = new LatLng(center.latitude + assumedLatDiffNorth, center.longitude); builder.include(north); } { boolean foundMax = false; double foundMinLatDiff = 0; double assumedLatDiffSouth = ASSUMED_INIT_LATLNG_DIFF; do { Location.distanceBetween(center.latitude, center.longitude, center.latitude - assumedLatDiffSouth, center.longitude, distance); float distanceDiff = distance[0] - latDistanceInMeters; if (distanceDiff < 0) { if (!foundMax) { foundMinLatDiff = assumedLatDiffSouth; assumedLatDiffSouth *= 2; } else { double tmp = assumedLatDiffSouth; assumedLatDiffSouth += (assumedLatDiffSouth - foundMinLatDiff) / 2; foundMinLatDiff = tmp; } } else { assumedLatDiffSouth -= (assumedLatDiffSouth - foundMinLatDiff) / 2; foundMax = true; } } while (Math.abs(distance[0] - latDistanceInMeters) > latDistanceInMeters * ACCURACY); LatLng south = new LatLng(center.latitude - assumedLatDiffSouth, center.longitude); builder.include(south); } return builder.build(); }
最后打电话
CameraUpdateFactory#newLatLngBounds(bounds, padding);
- 如何从具有GridBagLayout布局的JPanel获取位于特定gridx中的组件,gridy?
- 线程“main”中的exceptionjava.lang.IllegalStateException:在Ubuntu上运行Selenium Test时,驱动程序可执行文件不存在
- 成员应该在类或构造函数中初始化吗?
- Google App Engine – 删除JPQL查询和级联
- 如何使用com.google.gson类创建json对象
- Google App Engine for Java中的多对多关系(包含属性)
- 片段删除问题
- Android Studio 1.2.2 ClassNotFoundException android.widget.viewstub
- 不可变的类和子类
- 当我在FlowableOnSubscribe类中调用onNext时,我的订阅者的onNext和onComplete函数不会运行
- SQLiteDatabase getWritableDatabase(){throw new RuntimeException(“Stub!”); }