การสร้างวัตถุตำแหน่งใน Android ด้วยค่าละติจูดและลองจิจูด


138

ฉันมีโปรแกรมที่เก็บค่าละติจูดและลองจิจูดของตำแหน่งในฐานข้อมูลซึ่งฉันดาวน์โหลด

ฉันต้องการรับระยะทางระหว่างพิกัดเหล่านี้และตำแหน่งปัจจุบันของฉัน

คลาส Location มีวิธีการง่ายๆในการค้นหาระยะห่างระหว่างวัตถุ Location สองแห่งดังนั้นฉันจึงคิดว่าฉันจะสร้างวัตถุ Location ที่มีพิกัดแล้วเรียกวิธีการนั้น

มีวิธีง่าย ๆ ในการทำเช่นนี้? นอกจากนี้หากมีสมการที่เรียบง่ายและน่าเชื่อถืออีกข้อหนึ่งที่ไม่เกะกะอะไรมากเกินไปมันก็ใช้ได้เหมือนกัน ขอบคุณ

(android.location.Location)


ดูstackoverflow.com/questions/8049612/สำหรับข้อมูลเพิ่มเติม
พอลทอมป์สัน

คำตอบ:


309

สมมติว่าคุณมีวัตถุที่ตั้งอยู่กับคุณที่ตั้งปัจจุบัน

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 เป็นความคิดเห็นในคำตอบนี้ แต่ย่อและเรียบง่ายในความเป็นจริงมีประโยชน์จริง ๆ ขอบคุณ @Exception Al
Subby

2
ตัวอย่างเอกสารที่ไม่ดีจริงๆสำหรับ Android เสียเวลากับเรื่องนี้ไปบ้าง คำถามอื่นของฉันคือสมมติว่าฉันให้ผู้ให้บริการที่ถูกต้องเช่น gps มันจะให้ตำแหน่งปัจจุบันกับฉันหรือไม่ กล่าวอีกนัยหนึ่งความสำคัญของผู้ให้บริการคืออะไร
Utsav Gupta

หากคุณต้องการค่าเริ่มต้นสำหรับวัตถุสถานที่ตั้งและตั้งแต่คุณไม่สามารถเริ่มต้นด้วย lat lon / ผมขอแนะนำให้ตั้งค่าพวกเขาในการเริ่มต้นคงที่เช่นstatic { location.setLatitude(0.0d); location.setLongitude(0.0d); }
เจสันฮาร์ทลี่

Ya i พลาดการเขียน 'd' และฉันไม่สามารถสร้างวัตถุตำแหน่งได้ ความผิดพลาดเล็ก ๆ น้อย ๆ
zulkarnain shah

1
เหตุใดในการทดสอบหน่วยจึงไม่มีผลใด ๆ เมื่อฉันตั้งค่า Lat และ Lon บนวัตถุ Location วัตถุที่ตั้งเป็นโมฆะ!?!?
Ewoks

30

คุณสามารถสร้างสถานที่โดยใช้Constructorจากนั้นตั้งค่า latutude และลองจิจูด

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

1
@dst อะไร"yourprovidername"?
บ้าน geoengineering

@ ban-geoengineering ปล่อยว่างเปล่า "" ไม่จำเป็น
Alp Altunel

13

ฉันตอบคำถามนี้อีกครั้งเพราะคนจำนวนมากเช่นฉันไม่รู้ว่า"providername"จริง ๆ แล้วคืออะไร โค้ดด้านล่างตอบคำถาม:

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

ที่นี่ฉันใช้LocationManager.GPS_PROVIDERเป็นชื่อผู้ให้บริการ


เหตุLocationManager.GPS_PROVIDERใดเราจึงต้องพิจารณาทางเลือกอื่น ๆ
บ้าน geoengineering

1
มีอีก 2 ซึ่งคือ PASSIVE และ NETWORK_PROVIDER นี่คือคำอธิบายที่ดีสำหรับสาเหตุและสิ่งที่ควรใช้ stackoverflow.com/questions/6775257/…
Vijay E

1
หากlocationวัตถุจะถูกสร้างขึ้นด้วยตนเองแม้ว่ามันจะไม่เหมาะสมมากขึ้นเพื่อใช้เป็นสตริงว่างมากกว่าLocationManager.GPS_PROVIDER, LocationManager.PASSIVEหรือLocationManager.NETWORK_PROVIDER?
บ้าน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.