2010-04-13 30 views
8

Tôi vừa mua điện thoại thông minh Google Nexus One và tôi muốn viết một ứng dụng Android nhỏ để giải trí. Giả sử tôi có thể nhận tọa độ GPS hiện tại của mình, vậy thì làm cách nào tôi có thể tìm thấy các mốc hoặc điểm quan tâm lân cận trong phạm vi một số bán kính? Có API để nhận các mốc địa lý được gắn thẻ GPS, như trong cơ sở dữ liệu của Google Earth không?Với tọa độ GPS, làm cách nào để tìm các mốc hoặc điểm ưa thích lân cận?

Ví dụ: nếu tôi ở trung tâm thành phố Chicago, chương trình của tôi sẽ chỉ cho tôi tất cả những thứ "du lịch" để tham quan trong thành phố đó.

Lý tưởng nhất, tất cả sẽ chạy trên điện thoại thông minh của tôi, nhưng nếu cần, tôi có thể có truy vấn trên điện thoại thông minh là máy chủ web, sau đó sẽ chạy nhiều truy vấn hơn.

+0

Bạn đã xem bản đồ google api chưa? – Jay

+0

Bạn đã bị đánh đến cú đấm; có một ứng dụng gọi là "Thư mục Địa điểm" được viết bởi Google thực hiện chính xác những gì bạn mô tả. –

+0

@Daniel Lew Tôi không có ý định viết đơn đăng ký của riêng mình để phân phối. Tôi chỉ muốn thử các API khác nhau. – stackoverflowuser2010

Trả lời

3

Phụ thuộc nơi bạn đang nhận dữ liệu mang tính bước ngoặt của bạn từ. Nếu bạn muốn thực hiện một truy vấn web, bạn có thể chạy với một trong những điều trên.

Cách khác - nếu bạn có dữ liệu của riêng mình, bạn có thể lưu trữ nó trong db với giá trị lat và lon và sau đó tạo hình chữ nhật bao quanh cho truy vấn. Câu hỏi này sẽ cho bạn biết làm thế nào để tính toán một khung giới hạn bao gồm một bán kính nhất định xung quanh điểm hiện tại của bạn (nó sẽ có một hộp, vì vậy nó sẽ lớn hơn một vòng tròn ....

How to calculate the bounding box for a given lat/lng location?

Sử dụng bounding , bây giờ bạn có thể thực hiện truy vấn từ số db where lat < maxlat and lat > minlat and lon > minlon and lon < maxlon của bạn để cung cấp cho bạn tất cả các điểm quan tâm của bạn trong hộp. với từng lần truy cập và sau đó bạn có thể, ví dụ, sắp xếp theo bán kính từ vị trí của bạn.

+0

Đây là một trợ giúp tuyệt vời. Giả sử tôi muốn lưu trữ các mốc của riêng mình và triển khai dịch vụ tra cứu của riêng tôi; nếu tôi có N cột mốc, tôi sẽ phải thực hiện tìm kiếm O (N) thông qua tất cả chúng để tìm địa điểm gần nhất. Có cấu trúc dữ liệu hay cách tiếp cận nào sẽ cải thiện khi tìm kiếm này không? Tôi đã nghĩ đến việc triển khai cây hai cấp (một cấp độ vĩ độ, một cấp độ khác cho kinh độ) hoặc một cây kd hoặc một cây bốn chiều. Bất kỳ ý tưởng? – stackoverflowuser2010

+0

Ý tưởng sẽ là bạn lập chỉ mục trên lat và dài, có nghĩa là việc tìm kiếm mọi thứ trong hình chữ nhật sẽ khá nhanh. Sau khi thực hiện điều đó, bạn chỉ có một số thứ hạn chế mà bạn phải làm O (n). Bạn cũng có thể bắt đầu với một hình chữ nhật thực sự nhỏ, và sau đó truy vấn ra ngoài (không bao gồm hình chữ nhật bên trong của bạn) để thêm nhiều kết quả hơn khi bạn cho là cần thiết. – Fiid

+0

Không chắc chắn - Tôi nghĩ rằng cơ sở dữ liệu địa lý thực sự có sự thông minh hơn về công cụ này. Tôi đã thực hiện tìm kiếm địa lý trên Android bằng cách sử dụng approacdh này và nó hoạt động hợp lý một cách nhanh chóng. Ứng dụng của tôi tìm thấy tất cả các sân bay và sân bay trực thăng trong bán kính 50nm. – Fiid

2

Cách nhanh nhất để làm điều này là:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=business+near+city"); 
startActivity(intent); 

Sau geo bạn đặt tọa độ của bạn, và sau khi q = bạn nhập tearms tìm kiếm của bạn, giống như du lịch + thành phố. Điều này sẽ kích hoạt ứng dụng Google Maps với các địa điểm ưa thích.

Nếu bạn muốn sử dụng chế độ xem bản đồ bên trong ứng dụng của mình, bạn sẽ cần nhận dữ liệu từ một số dịch vụ, chẳng hạn như của riêng bạn. Tuy nhiên, bạn có thể lấy dữ liệu từ tìm kiếm ajax của Google như sau: http://ajax.googleapis.com/ajax/services/search/local?v=1.0&rsz=large&gl=pl&q=tourism+chicago Thông tin thêm tại đây: http://code.google.com/apis/ajaxsearch/documentation/reference.html#_fonje_local Điều này sẽ cho bạn kết quả địa lý và bạn cần phân tích kết quả và có thể đưa chúng vào cơ sở dữ liệu.

+0

Cảm ơn. Tôi không muốn nhất thiết phải nhận được các điểm quan tâm gần đó dưới dạng bản đồ. Tôi thà trả lại nó trong XML. – stackoverflowuser2010

+0

Vậy thì api ajax sẽ làm việc cho bạn, nhưng tôi nghĩ nó chỉ hoạt động với json. –

1

Một nguồn dữ liệu thân thiện với nhà phát triển mà bạn có thể sử dụng là http://compass.webservius.com - đó là cơ sở dữ liệu của hàng triệu danh sách doanh nghiệp ở Hoa Kỳ, dễ dàng tìm kiếm với hộp giới hạn tọa độ bằng API REST.

1

Foursquare có API tuyệt vời cung cấp cho bạn các doanh nghiệp và các địa điểm ưa thích khác có tọa độ GPS. Không yêu cầu người dùng đăng nhập để truy cập. Cơ sở dữ liệu sao lưu liên tục được duy trì bởi người dùng.

https://developer.foursquare.com/overview/venues

+0

Rad. Cám ơn vì đã chia sẻ. – Nick

Các vấn đề liên quan