티스토리 뷰

개념은 이렇다. 중심 좌표 데이터가 담긴 c와 원형 범위의 반지름(m)인 radius를 받아온다. 

원형 범위의 반지름보다 작은 임의의 값 r을 생성하고, 0 - 360도 (theta의 단위는 라디안이라 Math.PI * (0~2.0)으로 표현)사의의 임의의 각 theta를 생성한다. 

 

그 이후 원점c로부터 thetah각으로 r만큼 뻗어나간 위치를 계산한다.  

public LatLng getRandomLocation(LatLng c, int radius) {
        double d2r = Math.PI / 180;
        double r2d = 180 / Math.PI;
        double earth_rad = 6378000f; //지구 반지름 근사값

        double r = new Random().nextInt(radius) + new Random().nextDouble();
        double rlat = (r / earth_rad) * r2d;
        double rlng = rlat / Math.cos(c.latitude * d2r);

        double theta = Math.PI * (new Random().nextInt(2) + new Random().nextDouble());
        double y = c.longitude + (rlng * Math.cos(theta));
        double x = c.latitude + (rlat * Math.sin(theta));
        return new LatLng(x, y);
}

https://someoneofsunrin.tistory.com/127 에서 사용한 코드를 의미도 잘 모른채 적당히 바꾸었기 때문에 지적 환영.

 

[안드로이드] 구글맵에서 구멍 뚫린 도넛형 범위 표시하기

API에서 제공하는 Circle 써서는 불가능한듯. 그래서 Polygon을 사용해서 구현한다. polygon1은 Polygon객체임. addAll을 통해 큰 원을 그리고, addHole을 통해 구멍을 내준다. LatLng SEOUL = new LatLng(37.56,..

someoneofsunrin.tistory.com

 

 

----------test-----------

21/10/15 추가.

적혀있는 radius로 getRandomLocation메소드를 200번 실행하여 나온 좌표로 마커를 찍어보았다.

3000km정도까진 오차가 거의 없는듯.... 어차피 한국 내에서만 작동하면 되니까 나로써는 ok다. 

추가적으로, 뭔가 중심 쪽에 뭉쳐있는듯한 인상이 있다. 드는 생각 두가지는,

 

1. r값이 같은 빈도로 나온다면, 중앙쪽 영역이 바깥쪽 영역에 비해 r값에 대해서 공유하는 영역이 겹치므로 중앙이 밀집도가 많아보이는 건 당연하다. 

2. 모든 좌표가 나올 확률이 동일하다면, 어느 구역이든 동일한 밀집도를 가져야 한다.

 

로직부터 문제가 있거나 2번 생각이 잘못됐거나 둘 중 하나일텐데 둘 중 하나일텐데 어느쪽이 틀렸는지 모르겠네.

랜덤 좌표 구한 뒤에 다시 그 범위 안에서 가게를 찾을거라서 중앙 부분에서 값이 더 많이 나오는 문제가 있을 것 같긴 한데... 일단은 더 좋은 생각 날때까지 지금 로직 유지해야겠다. 

250m
10km
100km
1000km

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함