5

Tôi đang phát triển một ứng dụng dựa trên vị trí, trong đó tôi cần lấy tên vị trí lân cận của bất kỳ địa điểm nào do người dùng chọn. Tôi đang sử dụng Google Places API đang hoạt động tốt cho tôi.Làm thế nào để có được tên thành phố hoặc tiểu bang lân cận của một địa điểm trong nước trong ios?

Chỉ có vấn đề là dịch vụ trả về null cho các địa điểm trong nước. Có cách nào để tôi có thể lấy lại các địa điểm lân cận cho một địa chỉ trong nước hay đại dương không?

Trả lời

2

AFAIK API không có cách nào để thực hiện điều đó. Vì vậy, bạn đã có hai lựa chọn, theo thứ tự các nỗ lực cần:

  1. Khi dùng chạm nước chỉ ném một hộp thoại nói "Hãy chọn một
    điểm trên cạn"
    . Bên cạnh không có nỗ lực và sẽ hơi làm phiền người dùng.
  2. Cố gắng tìm chính địa chỉ đất gần nhất và sử dụng nó để chạy yêu cầu API trên (thay vì điểm gốc). Dưới đây là một số ý tưởng về điều đó.

Cách tiếp cận tốt có thể dựa trên this answer: về cơ bản bạn có thể nhận tệp KML với đa giác đất. Vì lý do hiệu suất, bạn có thể đơn giản hóa các đa giác trong phạm vi có ý nghĩa đối với các mức thu phóng của bạn. Bây giờ nếu quan điểm của bạn nằm trong một trong những đa giác đó - đó là biển. Và bạn có thể chỉ cần lặp qua tất cả các cạnh đa giác và chọn điểm gần nhất với điểm của bạn, sau đó chọn một điểm trên đó - gần nhất với điểm của bạn - và thực hiện một bước nhỏ có kích thước epsilon về phía bên ngoài của đa giác để có được một vùng đất bạn có thể thực hiện yêu cầu mã địa lý. Ngoài ra, tác giả ban đầu cho thấy bạn có thể sử dụng công thức Haversine để xác định điểm gần đất liền - Tôi không thực sự quen thuộc với thiết bị của nó.

Nhược điểm là, bạn phải đối phó với KML, lặp qua rất nhiều đa giác và tối ưu hóa chúng (và mất độ chính xác làm điều đó, ngoài sự khác biệt có thể có giữa marineregions.org dữ liệu và dữ liệu Google Places)

Một mát lừa bạn có thể thử đang sử dụng Sobel Filter [phát hiện cạnh] trên mảnh bản đồ có thể nhìn thấy để xác định vị trí đường bờ biển (mặc dù bạn sẽ nhận được một số điểm tích cực sai), sau đó theo dõi nó (như trong raster-> vector) để nhận một số điểm và các cạnh để tính toán vị trí đất gần nhất, theo cách tương tự như cách tiếp cận cũ. Đây là bản vẽ vụng về của ý tưởng enter image description here

Để phát hiện cạnh Sobel, xem xét GPUImage lib - chúng có bộ lọc được triển khai và có thể sẽ hoạt động nhanh vì lib thực hiện tất cả các tính toán trên GPU.

UPD Hóa ra đó cũng là một dịch vụ gọi là Koordinates có dữ liệu đường bờ biển sẵn, kiểm tra the answer here

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