Как создать маркеры на карте Android в круговом диапазоне - PullRequest
0 голосов
/ 23 ноября 2018

Я пытаюсь сделать приложение в стиле pokemonGo.Я пытался использовать формулы широты и долготы для вычисления диапазона координат, в котором должны появляться маркеры (покемон), но мне удалось получить только прямоугольную область.Я хотел бы создать их в круглом поле вокруг игрока, как я могу это сделать?

Вот код, по которому я вычислил прямоугольный участок.

        Random r = new Random();
        int randomDistanceLatitude = r.nextInt(range*2) - range;
        r = new Random();
        int randomDistanceLongitude = r.nextInt(range*2) - range;


        double latitudeDegreeToAdd = 1.7 * randomDistanceLatitude * 0.000009043717329571146924;
        double longitudeDegreeToAdd = randomDistanceLongitude * (1 / (111320 * Math.cos(infoLocal.getLastKnownLocation().getLatitude())));

        LatLng enemy1Location = new LatLng(infoLocal.getLastKnownLocation().getLatitude() + latitudeDegreeToAdd, infoLocal.getLastKnownLocation().getLongitude() + longitudeDegreeToAdd);

        enemies[i] = mMap.addMarker(new MarkerOptions().position(enemy1Location).title("Monster").snippet("Click to Attack!").icon(BitmapDescriptorFactory.fromResource(R.drawable.enemy3)).anchor(0.5f, 0.5f));

1 Ответ

0 голосов
/ 27 января 2019

Кажется, это математический вопрос.

Формула круга: (x, y) = (cos (угол) * rX, sin (угол) * rY) + (centerX, centerY)

Итак, код будет выглядеть следующим образом.

Random r = new Random();
double radius = r.nextFloat() * range; // or r.nextDouble()...
double angle = r.nextFloat() * 2.0f * Math.PI;
double randomDistanceLatitude = Math.cos(angle) * radius;
double randomDistanceLongitude = Math.sin(angle) * radius;
...

Поскольку lat lng не находится в декартовой системе координат, это не чистый круг, но range в этом случае достаточно мал, чтобы игнорироватьтакие искажения, я думаю.


Дополнительные примечания.

Если mMap означает карту Google Maps, у вас могут быть интересы в Картах Google - Форма - Круг

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...