1

Я создаю Geozones на карте google. По умолчанию Circle, что карта API предоставляет laggy при прокрутке карты. Итак, я хотел создать свой собственный круг (оверлей на карте). Я создал круг с радиусом 300 метров, который фиксирован. Ширина этого круга должна изменяться в соответствии с уровнем масштабирования, как это делает кружок карты по умолчанию. Я написал метод, как показано ниже, который вычисляет пиксели, принимая значения Radius и Zoom в качестве параметров. Я также добавил круг по умолчанию, чтобы проверить точность моего круга для разных адресов.Как получить число пикселей равное радиусу круга Geozone в соответствии с уровнем масштабирования? ИЛИ Радиус окружности зоны для отображения пикселей?

//Adjusts the width and height of circle according to radius and zoom level 
    private void adjustCircleWidth(final LatLng center, final double zoom) { 
     //With inputs from topic "Zoom" from https://developers.google.com/maps/documentation/android-api/views 
     double widthOfWorldDP = 256 * Math.pow(2, zoom); 

     int radius = 300; //meters. 
     int circleWidthMeters = radius * 2; // *2 to get diameter or width. 

     //From google and alsop from this SOF post http://stackoverflow.com/a/6452332/3209739 
     int EQUATOR_LENGTH_METERS = 40075004; //in meters.. 

     float dpOfCircle = (float) ((widthOfWorldDP * circleWidthMeters)/EQUATOR_LENGTH_METERS); 

     //converts dp to pixels depending on device density.. 
     int pixels = (int) convertDpToPixels(dpOfCircle); 

     mCircleView.requestLayout(); 
     mCircleView.getLayoutParams().height = pixels; 
     mCircleView.getLayoutParams().width = pixels; 
    } 

Хорошо, это работает нормально. Я начал проверять другие местоположения, затем начал показывать варианты. Ширина круга меньше, чем круг по умолчанию для карты. Я проанализировал его, чтобы понять, что он отлично показывает (синхронно с кругом по умолчанию), когда я устанавливаю круг вокруг любого местоположения, которое находится на Экваторе. Для примера круг идеально сочетается со значением по умолчанию для Кении как место, где Кения находится на экваторе. см. прилагаемый сценарий. Если я продолжаю двигаться дальше от экватора, круг становится меньше и меньше по кругу по умолчанию. Скажем, для Германии, поскольку круг местоположения почти наполовину по умолчанию ... см. Прикрепленный сценарий.

Это потому, что используемая мной формула привязана к экватору.

Вы можете помочь с любыми подсказками о том, как я могу сделать его однородным?

+0

кто, черт возьми, дал -1. Речь идет не о голосах, но я хочу знать, что не так с вопросом ?????? Ну, я реализовал его с помощью этого прекрасного сообщения SOF http://stackoverflow.com/questions/13991301/android-maps-api-v2-draw-circle. SOF должен позволить допрашивающему узнать, кто проголосовал, и узнать, что не так, поэтому он может исправить себя. – cgr

ответ

1

Кредиты и благодарность за тонну до Android Maps API v2 draw circle почты.

Я мог бы рассчитать ширину круга в пикселях с учетом широты, долготы и радиуса (от заданного lat, long) в метрах.

private int convertZoneRadiusToPixels(double lat, double lng, double radiusInMeters) { 
    double EARTH_RADIUS = 6378100.0; 
    double lat1 = radiusInMeters/EARTH_RADIUS; 
    double lng1 = radiusInMeters/(EARTH_RADIUS * Math.cos((Math.PI * lat/180))); 

    double lat2 = lat + lat1 * 180/Math.PI; 
    double lng2 = lng + lng1 * 180/Math.PI; 

    Point p1 = mMap.getProjection().toScreenLocation(new LatLng(lat, lng)); 
    Point p2 = mMap.getProjection().toScreenLocation(new LatLng(lat2, lng2)); 
    return Math.abs(p1.x - p2.x); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^