Tạo một đối tượng Vị trí trong Android với các giá trị vĩ độ và kinh độ


138

Tôi có một chương trình trong đó các giá trị vĩ độ và kinh độ của một vị trí được lưu trữ trong cơ sở dữ liệu mà tôi tải xuống.

Tôi muốn có được khoảng cách giữa các tọa độ này và vị trí hiện tại của tôi.

Lớp Location có một phương thức đơn giản để tìm khoảng cách giữa hai đối tượng Location, vì vậy tôi đã hình dung rằng tôi sẽ tạo một đối tượng Location bằng tọa độ, sau đó gọi phương thức.

Có cách nào làm dễ hơn không? Ngoài ra, nếu có một phương trình khá đơn giản, đáng tin cậy khác mà không làm lộn xộn mọi thứ quá nhiều, thì nó cũng sẽ hoạt động. Cảm ơn.

(android.location.Location)


Câu trả lời:


309

Giả sử rằng bạn đã có một đối tượng vị trí với vị trí hiện tại của bạn.

Location targetLocation = new Location("");//provider name is unnecessary
targetLocation.setLatitude(0.0d);//your coords of course
targetLocation.setLongitude(0.0d);

float distanceInMeters =  targetLocation.distanceTo(myLocation);

1
+1 như các ý kiến ​​trong câu trả lời này, mặc dù được rút ngắn và đơn giản, nhưng thực tế lại rất hữu ích. Cảm ơn bạn @Exception Al
Subby

2
Ví dụ thực sự tồi về tài liệu cho Android, đã lãng phí khá nhiều thời gian cho việc này. Câu hỏi khác của tôi là giả sử tôi cung cấp một nhà cung cấp hợp lệ như gps, nó sẽ cung cấp cho tôi vị trí hiện tại chứ? Nói cách khác, tầm quan trọng của nhà cung cấp
Utsav Gupta

Nếu bạn cần một giá trị mặc định cho một đối tượng Vị trí và kể từ khi bạn không thể khởi tạo nó với một lat / lon, tôi khuyên bạn nên thiết lập chúng trong một initializer tĩnh, ví dụ:static { location.setLatitude(0.0d); location.setLongitude(0.0d); }
Jason Hartley

Tôi đã bỏ lỡ việc viết 'd' và tôi không thể tạo đối tượng vị trí. Sai lầm nhỏ ngớ ngẩn
zulkarnain shah 18/10/17

1
tại sao trong các bài kiểm tra đơn vị, nó không có tác dụng gì khi tôi đặt Lat và Lon trên đối tượng Location. Đối tượng vị trí bằng cách nào đó là null!?!?
Ewoks

30

Bạn có thể tạo các vị trí bằng cách sử dụng hàm tạo của chúng , sau đó đặt các giá trị latutude và kinh độ.

final Location location = new Location("yourprovidername");
location.setLatitude(1.2345d);
location.setLongitude(1.2345d);

1
@dst là gì "yourprovidername"?
ban-geengineering

@ ban-Geoengineering để trống "" không cần thiết.
Alp Altunel

13

Tôi đang trả lời điều này một lần nữa, vì nhiều người như tôi không biết "providername"thực sự là gì . Mã dưới đây trả lời câu hỏi:

Location location = new Location(LocationManager.GPS_PROVIDER);
location.setLatitude(23.5678);
location.setLongitude(34.456);

Ở đây tôi đang sử dụng LocationManager.GPS_PROVIDERlàm tên nhà cung cấp.


Tại sao LocationManager.GPS_PROVIDERvà có bất kỳ lựa chọn thay thế nào chúng ta có thể xem xét?
ban-geengineering

1
Có thêm 2, đó là PASSIVE và NETWORK_PROVIDER. Dưới đây là lời giải thích tốt đẹp cho lý do tại sao và những gì để sử dụng. stackoverflow.com/questions/6775257/ cường
Vijay E

1
Nếu locationđối tượng đã được tạo ra bằng tay, tuy nhiên, nó sẽ không thể thích hợp hơn để sử dụng một chuỗi rỗng hơn LocationManager.GPS_PROVIDER, LocationManager.PASSIVEhoặc LocationManager.NETWORK_PROVIDER?
ban-geengineering
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.