2013-09-25 1 views
4

반경을 가려는 임은지도에서 5KM을 말합니다. 나는 그 중간의 좌표를 가지고있다.Km 단위의 다른 좌표 점과 거리를 사용하여 반경별로 좌표 점을 만들 수 있습니까?

나는 그 원에있는 점의 좌표를 계산하고 알려주는 방법이 필요합니다.

설명 :

enter image description here

(.! 것을 할 수있는 더 좋은 방법이 있다면 내가 공유하십시오, 내 서버에서 __Km 반경 좌표 점을 얻을 필요 타이를)

좌표가 원 안에 있는지 없는지 확인해 보겠습니다.

(lan, lon)은 포인트입니다.

임 혼란

if ((lat<x1 && lat>x2) && (lon<y1 && lon>y2)) 

    then the point is inside the circle. 

그러나 세계의 일부 지역에서 일을 나던하는 문제를 프로그래머 .... 레이더를 만드는 방법은?

(안드로이드 응용 프로그램)

감사합니다!

+1

원에 무한한 수의 점이 있습니다. 어느 것을 원하니? –

+0

도면에있는 영역에서 필요합니다. – NirPes

+0

그래서 NE와 SW 에서요? –

답변

5

당신이 극에 너무 가까이하지 않을 때 당신은 위도 - 경도 공간에서 타원형으로 지구 표면에 자그마한 진정한 원에 근접 할 수 있습니다. 타원은 적도의 원이지만, 여러분이 극에 접근 할 때 점점 더 찌그러 뜨리게됩니다. 관심있는 원의 중심의 좌표를 가정

(lat0, lon0)하고 반경 설정 r = 5km입니다 : 이제 포인트

C = 40075.04km    - Earth circumference 
A = 360*r/C     - semi-minor in north-south direction 
B = 360*r/(C*cos(lat0))  - semi-major in east-west direction 

타원 내에서이 조건을 충족하는 것이 (lat,lon) :

(lat-lat0)²/A² + (lon-lon0)²/B² < 1 

자바 :

boolean pointInCircle(double lat0, double lon0, double r, double lat, double lon) { 
    double C = 40075.04, A = 360*r/C, B = A/Math.cos(Math.toRadians(lat0)); 
    return Math.pow((lat-lat0)/A, 2) + Math.pow((lon-lon0)/B, 2) < 1; 
} 

더 정확한 결과를 얻으려면 중심과 주어진 점 (일반적으로 haversine formula을 사용) 사이에 compute the distance을 입력 할 수 있지만 수식은 더 복잡하며 많은 점의 거리를 계산해야하는 경우 계산이 고비용이 될 수 있습니다.

+0

정말 고마워요! PHP에서 (lat-lat0) ²/A² + (lon-lon0) ²/B² <1'를 확인하는 방법을 알려주시겠습니까? - 필요한 포인트 만 다운로드하기 때문에. @Joni – NirPes

+0

'Math.pow' 대신'pow','Math.cos' 대신'cos','Math.toRadians' 대신'deg2rad'를 사용하십시오. – Joni

+0

그리고 실제로 당신은 반경 (고정)이 아닌 원주를 사용하기로되어있었습니다. – Joni

1
double dx = x - x0; 
double dy = y - y0; 
if (dx * dx + dy * dy < r * r) { 
    // point (x, y) is inside the circle centered (x0, y0) with radius r 
} 
관련 문제