2013-12-06 9 views
21

Я хочу нарисовать статический круг над картой с Google Maps. Когда пользователь зажимает, карта будет увеличивать/уменьшать масштаб.Получить расстояние от видимой части карты Google

Мне нужно знать радиус карты (относящийся к области, содержащейся в круге) и соответственно изменить направляющую в нижней части.

Кто-нибудь знает, как получить расстояние слева от правого края экрана? Я ничего не нашел на Google Maps API doc.

Что-то вроде этого:

enter image description here

ответ

39

с помощью VisibleRegion вы можете получить все угловые кординаты, а также центр.

VisibleRegion vr = mMap.getProjection().getVisibleRegion(); 
double left = vr.latLngBounds.southwest.longitude; 
double top = vr.latLngBounds.northeast.latitude; 
double right = vr.latLngBounds.northeast.longitude; 
double bottom = vr.latLngBounds.southwest.latitude; 

и вы можете calcuate расстояния от два региона по этому

Location MiddleLeftCornerLocation;//(center's latitude,vr.latLngBounds.southwest.longitude) 
Location center=new Location("center"); 
center.setLatitude(vr.latLngBounds.getCenter().latitude); 
center.setLongitude(vr.latLngBounds.getCenter().longitude); 
float dis = center.distanceTo(MiddleLeftCornerLocation);//calculate distane between middleLeftcorner and center 

enter image description here

+0

получать расстояние от верхнего угла собирается сделать круг больше, чем видимая ширина зоны мудрый, так что это действительно не правильно – tyczj

+0

На самом деле я имел в виду средний левый угол. Я теперь исправил свой ответ –

+0

, как рассчитать MiddleLeftCornerLocation? это нулевое значение – pmb

2

Сначала получите точку карта центра с

googleMap.getCameraPosition().target; 

затем выяснить ширину карты и получить высоту/2 и преобразовать их к Point, используя значения xy, которые вы только что получили.

затем связать эту точку на карте

LatLng widthPoint = map.getProjection().fromScreenLocation(point); 

теперь, когда вы имеете точку tagret и точку ширины можно рассчитать расстояние между 2 точками, которые дадут вам радиус.

Примечание

это предполагает, что всегда в портретном режиме, если вы находитесь в ландшафтном режиме круг будет больше, чем в видимой области, поэтому в этом случае, если вы хотите, чтобы получить расстояние от высоты

11

я получил некоторое время, чтобы написать код для «MiddleLeftCornerLocation» переменного в большом ответе дается @Md , Мосье Хоссейн Tonmoy, так просто, чтобы закончить его (я не имею достаточно очков репутации комментировать свой ответ, извините):

VisibleRegion vr = map.getProjection().getVisibleRegion(); 
    double bottom = vr.latLngBounds.southwest.latitude; 

    Location center = new Location("center"); 
    center.setLatitude(vr.latLngBounds.getCenter().latitude); 
    center.setLongitude(vr.latLngBounds.getCenter().longitude); 

    Location middleLeftCornerLocation = new Location("center"); 
    middleLeftCornerLocation.setLatitude(center.getLatitude()); 
    middleLeftCornerLocation.setLongitude(left); 

    float dis = center.distanceTo(middleLeftCornerLocation); 
Смежные вопросы