2014-08-26 2 views
0

Итак, у меня есть точка [40.894375, -74.172555], и я хочу создать границу вокруг нее.Найти точки, находящиеся на расстоянии 10 футов от исходного набора точек GPS

Итак, что я делаю, я добавляю туда плавающее число, которое в настоящее время является parseFloat («0.00002»); И я создаю очки, которые, как я надеюсь, выглядят так, как внизу, либо на севере, на юге, на востоке или на западе. Но я получаю список точек, которые идут за несколько миль.

Это пример того, что я ищу:

          ^
              | 
              5-10 ft 
              | 
       <--- 5-10 ft ---- [40.894375,-74.172555] ---- 5-10 ft ---> 
              | 
              5-10 ft 
              | 
              v 

ли кто-нибудь есть идеи о том, как я могу это сделать?

+0

Почему вы добавили 0.00002 в от? –

+0

Вы хотите создать квадратную рамку? – Afsa

+0

нет реальной причины для 0,00002 Я просто хотел на небольшом расстоянии от начальной точки. И Afsa в настоящий момент это только на самом деле должно выглядеть как пример выше. – inoabrian

ответ

1

Я перевел функцию php (link), которая вычисляет точку GPS, если вы дадите ей начальную точку, длину в км и подшипник.

Чтобы найти ваши точки использовать функцию

geoDestination([40.894375,-74.172555], 0.003048, 0); //Point 10 ft north 
geoDestination([40.894375,-74.172555], 0.003048, 90); //Point 10 ft east 
geoDestination([40.894375,-74.172555], 0.003048, 180); //Point 10 ft south 
geoDestination([40.894375,-74.172555], 0.003048, 270); //Point 10 ft west 

Переведенный функция PHP

//start is a array [lat, long] 
//dist in km 
//brng in degrees 
function geoDestination(start, dist, brng){ 
    lat1 = toRad(start[0]); 
    lon1 = toRad(start[1]); 
    dist = dist/6371.01; //Earth's radius in km 
    brng = toRad(brng); 

    lat2 = Math.asin(Math.sin(lat1)*Math.cos(dist) + 
       Math.cos(lat1)*Math.sin(dist)*Math.cos(brng)); 
    lon2 = lon1 + Math.atan2(Math.sin(brng)*Math.sin(dist)*Math.cos(lat1), 
         Math.cos(dist)-Math.sin(lat1)*Math.sin(lat2)); 
    lon2 = fmod((lon2+3*Math.PI),(2*Math.PI)) - Math.PI; 

    return [toDeg(lat2),toDeg(lon2)]; 
} 

function toRad(deg){ 
    return deg * Math.PI/180; 
} 

function toDeg(rad){ 
    return rad * 180/Math.PI; 
} 

function fmod(a, b) { 
    return Number((a - (Math.floor(a/b) * b)).toPrecision(8)); 
} 
+0

Спасибо, я проверю это, когда у меня появится шанс. – inoabrian

+0

Я использовал эту функцию и изменил ее, чтобы дать мне 30 очков, чтобы добавить точность моей границы. Благодарю. – inoabrian

1

Одна минута долготы (N < -> S) является 1 NM (морских миль) = 6076.12 футов , таким образом, 10 футов составляют 0,00164 м. миль (1/6076,12 * 10) или 0,00164 одной минуты долготы или (/ 60) 2,752e-5 степени длинногутида. Таким образом, вам нужно добавить/вычесть 2,752e-5 в/из longutide, чтобы добавить или вычесть 10 футов. Это ок. номер, который вы упомянули в своем вопросе. Для широты (W < -> E) одна минута ia 1 NM на экваторе, для более высоких широт расстояние становится короче (по косинусу широты).

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