Java 如何使用android地图创建具有自定义分辨率的纬度边界
我正在使用一个Java 如何使用android地图创建具有自定义分辨率的纬度边界,java,android,Java,Android,我正在使用一个LatLngBounds.Builder类来创建基于两个位置的缩放级别,这很好,但是我需要创建一个屏幕一半的边界,因为我在布局中使用了底部工作表 这是绘制多段线并设置这两个位置之间边界的方法: 更新 我先打开底部 private void openBottom(){ if(latLngs != null){ if(bottomSheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED){
LatLngBounds.Builder
类来创建基于两个位置的缩放级别,这很好,但是我需要创建一个屏幕一半的边界,因为我在布局中使用了底部工作表
这是绘制多段线
并设置这两个位置之间边界的方法:
更新
我先打开底部
private void openBottom(){
if(latLngs != null){
if(bottomSheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED){
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}
drawnNewRoute();
}
}
然后,绘制边界:
private void drawnNewRoute() {
if(polyline == null){
po = new PolylineOptions();
for(int i = 0, tam = latLngs.size(); i < tam; i++){
po.add(latLngs.get(i));
}
String data = new Gson().toJson(latLngs);
po.color(Color.BLACK).width(10);
polyline = mMap.addPolyline(po);
ArrayList<LatLng> latlang = new ArrayList<>();
latlang.add(latLngs.get(0));
latlang.add(latLngs.get(latLngs.size() -1));
mMarkerNewPosition = mMap.addMarker(new MarkerOptions().position(finalLocaltion).title(finalLocationName));
mMarkerNewPosition.showInfoWindow();
location_display_incl.setVisibility(View.GONE);
stopLocation();
InitialAddressTxt.setText(InitialAddress);
double finalLat = latLngs.get(latLngs.size() -1).latitude;
double finalLong = latLngs.get(latLngs.size() -1).longitude;
try {
ADRS = getAddress(finalLat,finalLong);
} catch (IOException e) {
e.printStackTrace();
}
FinalAddressTxt.setText(finalLocationName);
String finalComp = ADRS.getLocality() + "," + address.getAdminArea();
FinalComplement.setText(finalComp);
zoomToCoverAllMarkersInMap(latlang);
}
else{
polyline.setPoints(latLngs);
}
}
private void drawnNewRoute(){
如果(多段线==null){
po=新的多段线选项();
for(inti=0,tam=latLngs.size();i
这就是结果:
这就是我需要它的方式
:
下面的表单XML:
<android.support.v4.widget.NestedScrollView
app:layout_behavior="@string/bottom_sheet_behavior"
android:id="@+id/bottomSheet"
android:background="@android:color/white"
android:layout_width="match_parent"
android:layout_height="300dp">
以下是您问题的解决方案 声明LatLng的Arraylist
ArrayList<LatLng> latlang;
现在初始化这两个对象并添加fromLocationLatitude、FromLocationLength和toLocationLatitude、ToLocationLength
fromPosition = new LatLng(fromLocationLatitude, fromLocationLongitude);
toPosition = new LatLng(toLocationLatitude, toLocationLongitude);
latlang.add(fromPosition);
latlang.add(toPosition);
将这两个点添加到数组列表中后,只需将arraylist传递给zoomToCoverAllMarkersInMap(),即可完成此函数及其操作
private void zoomToCoverAllMarkersInMap(ArrayList<LatLng> latLngList)
{
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (LatLng marker : latLngList)
{
builder.include(marker);
}
LatLngBounds bounds = builder.build();
int padding = 60;
final CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);
googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition arg0) {
googleMap.moveCamera(cu);
googleMap.animateCamera(cu);
googleMap.setOnCameraChangeListener(null);
}
});
}
private void zoomtocollarlmarkersinmap(ArrayList latLngList)
{
LatLngBounds.Builder=新的LatLngBounds.Builder();
用于(LatLng标记:latLngList)
{
建造商。包括(标记);
}
LatLngBounds bounds=builder.build();
int=60;
最终CameraUpdate cu=CameraUpdateFactory.newLatLngBounds(边界、填充);
setonCamerachenglistener(新的googleMap.onCamerachenglistener(){
@凌驾
CameraChange上的公共无效(CameraPosition arg0){
谷歌地图。移动摄像机(cu);
谷歌地图。动画美人鱼(cu);
setonCamerachenglistener(null);
}
});
}
注意:setOnCameraChangeListener已被弃用,但它仍在7.0上运行,因此没有问题。是否已修复底部白色区域?是的,300,如果在地图加载后更改,我将更新密钥,如“可见”,而不是“地图聚集”。我将发布答案。请查看我的答案。不起作用,代码几乎是一样的,但是对于不推荐使用的
setOnCameraChangeListener
首先展开底部工作表,然后尝试应用此代码。如果在展开工作表之前设置此代码,则它将永远无法工作。
fromPosition = new LatLng(fromLocationLatitude, fromLocationLongitude);
toPosition = new LatLng(toLocationLatitude, toLocationLongitude);
latlang.add(fromPosition);
latlang.add(toPosition);
private void zoomToCoverAllMarkersInMap(ArrayList<LatLng> latLngList)
{
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (LatLng marker : latLngList)
{
builder.include(marker);
}
LatLngBounds bounds = builder.build();
int padding = 60;
final CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);
googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition arg0) {
googleMap.moveCamera(cu);
googleMap.animateCamera(cu);
googleMap.setOnCameraChangeListener(null);
}
});
}