Радиус круга внутри видимой области карты Gogle - PullRequest
0 голосов
/ 18 февраля 2019

Я хочу получить радиус круга, вписанного в прямоугольник, который является видимой областью на экране ... Google Map SDK предоставляет только nearLeft, farLeft, nearRight и farRight ... С этим я могу получитьэто следующее:

enter image description here

Но мне нужно:

enter image description here.

Я использовал следующий код:

    public static double getMapVisibleRadius(GoogleMap map) {
    VisibleRegion visibleBounds = map.getProjection().getVisibleRegion();
    LatLng center = visibleBounds.latLngBounds.getCenter();
    LatLng northEast = visibleBounds.nearLeft;
    // r = radius of the earth in km
    double r = 6378.8;
    // degrees to radians (divide by 57.2958)
    double ne_lat = northEast.latitude / 57.2958;
    double ne_lng = northEast.longitude / 57.2958;
    double c_lat = center.latitude / 57.2958;
    double c_lng = center.longitude / 57.2958;
    // distance = circle radius from center to Northeast corner of bounds
    double r_km = r * Math.acos(
            Math.sin(c_lat) * Math.sin(ne_lat) +
                    Math.cos(c_lat) * Math.cos(ne_lat) * Math.cos(ne_lng - c_lng)
    );
    return r_km; // radius in meters

}

, который обеспечивает радиус окружности на первом изображении.

Я также пытался использовать расстояние до места, чтобы найти среднюю точкуиз левого и ближнего левого ... Я планировал найти расстояние между центром карты и, следовательно, найти среднюю точку.Однако я не смог получить Latlng этого пункта .. Таким образом, я не смог продолжить ..

VisibleRegion visibleBounds = mGoogleMap.getProjection().getVisibleRegion();
    float[] distanceBetweentopAndBottomLeftCorners = new float[1];
    float[] distanceBetweenMiddleOfLeftAndCenterOfVisibleRegion = new float[1];
    LatLng topLeftCorner = visibleBounds.farLeft;
    LatLng bottomLeftCorner = visibleBounds.nearLeft;
    Location.distanceBetween(topLeftCorner.latitude, topLeftCorner.longitude, bottomLeftCorner.latitude, bottomLeftCorner.longitude, distanceBetweentopAndBottomLeftCorners );
    float centerOfVisibleRegionLeftToScreen = distanceBetweentopAndBottomLeftCorners [0]/2;
   // Here I am unable to proceed since the above calculated value is a float and not Latlng. My idea was to find the distance between this value and center of visible bound;

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 18 февраля 2019

Вы измеряете расстояние между верхними левыми и нижними левыми координатами, чтобы получить вертикальное расстояние (до нижнего края).Для измерения горизонтального расстояния вам следует использовать координаты «farLeft and farRight» или «nearLeft and nearRight» (слева направо).

VisibleRegion visibleBounds = mGoogleMap.getProjection().getVisibleRegion();
float[] distanceBetweenLeftAndRightCorners = new float[1];
LatLng topLeftCorner = visibleBounds.farLeft;
LatLng topRightCorner = visibleBounds.farRight;
Location.distanceBetween(topLeftCorner.latitude, topLeftCorner.longitude, topRightCorner.latitude, topRightCorner.longitude, distanceBetweenLeftAndRightCorners );
float thisIsWhatYouNeedInMeters = distanceBetweenLeftAndRightCorners [0]/2;

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

Если вы хотите точно измерить то, как вы хотите, ниже приведены координаты, которые вы можете передать в distanceBetween ().Как я уже говорил, результаты не будут отличаться.

LatLng leftCenter = new LatLng((visibleBounds.farLeft.latitude + visibleBounds.nearLeft.latitude)/2, (visibleBounds.farLeft.longitude + visibleBounds.nearLeft.longitude)/2);
LatLng screenCenter = visibleBounds.latLngBounds.getCenter();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...