2013-03-24 39 views
5

Câu hỏi nhanh về tính toán Lat/Long.Vĩ độ/Kinh độ Khoảng cách

Tôi muốn đặt một bộ giá trị, ví dụ: Lat: 55.123456 Dài -6.123456 và làm việc ra bốn điểm là một khoảng cách tùy ý.

enter image description here

Khi vuông nhất định, tôi muốn làm việc ra giá trị cho Latitude trên bên trái và bên phải. Vì vậy, các đường màu đỏ là 1,5km từ điểm bắt đầu. Tương tự như vậy đối với kinh độ, các đường màu xanh dương sẽ cách điểm bắt đầu 1,5km. Đầu ra sẽ là 4 điểm, tất cả khoảng cách tính bằng kilômét.

Tóm tắt: Vĩ độ + Y = Giá trị Latitude X km đi

Làm việc với iPhone tại thời điểm này và tính toán cơ sở dữ liệu rất thô.

CHỈNH SỬA: Chỉ cần làm rõ, khoảng cách quá ngắn đến độ cong đó (Và do đó độ chính xác) không phải là vấn đề.

+1

Bạn biết Trái đất là một hình cầu hơn là mặt phẳng, phải không? –

+0

Và để theo dõi từ bình luận của Matt, tôi nghĩ rằng [Khoảng cách Great Circle] (http://en.wikipedia.org/wiki/Great-circle_distance) là những gì bạn đang theo dõi. – rickerbh

+0

@Matt, nhận thức rõ về hình cầu: D Khoảng cách quá ngắn (Sub 3km) Nó không quan trọng. Tôi chỉ muốn thêm một giá trị float vào điểm hiện tại để cho tôi một vĩ độ hoặc điểm dài, đó là khoảng cách đã đặt. – Colin

Trả lời

3

Vâng, để tính toán thô với khoảng cách tương đối nhỏ (dưới 100km), bạn có thể giả định rằng có 40_000_000/360 = 111 111 mét trên mỗi vĩ độ và 111 111 * cos (vĩ độ) mét trên mỗi độ kinh độ. Điều này là do một mét được định nghĩa là 1/40_000_000 một phần của kinh tuyến Paris;).

Nếu không, bạn nên sử dụng khoảng cách vòng tròn lớn, như được ghi chú trong các nhận xét. Đối với độ chính xác cao, bạn cũng cần phải tính đến rằng Trái đất là hình cầu hơi lệch một chút chứ không phải hình cầu.

+0

Cảm ơn begemotv2718. Nhưng làm thế nào mà có liên quan đến một giá trị nổi? Tôi không muốn chuyển đổi thành mức độ, phút và giây, chỉ để chuyển đổi thành một phao. – Colin

+0

Xin lỗi, không thể hiểu ý bạn là gì. Vĩ độ cho điểm 3km về phía bắc sẽ là LatitudeInitial + (3km/111.111km) làm điểm nổi. Kinh độ cho điểm 3km về phía đông ban đầu sẽ là LongitudeInitial + (3km/(111.111km * cos (LatitudeInitial))). Đối với điểm ban đầu 55.123456 Long -6.123456, điều này sẽ là 55.123456 + 3/111.111 = 55.150456 và cho kinh độ -6.123456 + 3/(111.111 * cos (55.123456)) = - 6.123456 + 0.0472185 = -6.0762375 – begemotv2718

6

Trong OBJ-C này phải là một giải pháp phù hợp:

float r_earth = 6378 * 1000; //Work in meters for everything 
float dy = 3000; //A point 3km away 
float dx = 3000; //A point 3km away 
float new_latitude = latitude + (dy/r_earth) * (180/M_PI); 
float new_longitude = longitude + (dx/r_earth) * (180/M_PI)/cos(latitude * 180/M_PI); 
+0

công thức sai, dx và dy nên được 1500 – AlexWien

+0

Sửa chữa nhưng nó là một ví dụ để khoảng cách là tùy ý. – Colin

1
// parameter: offset in meters 
float offsetM = 1500; // 1.5km 

// degrees/earth circumfence 
float degreesPerMeter = 360.0/40 000 000; 
float toRad = 180/M_PI; 

float latOffsetMeters = offsetM * degreesPerMeter; 
float lonOffsetMeters = offsetM * degreesPerMeter * cos (centerLatitude * toRad); 

Bây giờ chỉ cần thêm +/- latOffsetMeters và +/- lonOffsetMeters để centerLatitude/centerLongitude của bạn.

Công thức hữu dụng lên tới hàng trăm kilomet.