Bạn cần thêm thông tin hơn chỉ là một cặp lat/lon đơn để có thể thực hiện việc này.
Ở giai đoạn này, các thông tin mà bạn đã cung cấp là mất tích hai điều:
- cách lớn diện tích làm bìa hình ảnh của bạn (về lat/lon)? Dựa trên những gì bạn đã cung cấp, tôi không biết liệu hình ảnh có hiển thị diện tích rộng một mét hay rộng một cây số hay không.
- tọa độ trên hình ảnh của bạn trong tọa độ tham chiếu của bạn (-37.803134, 145.132377) là gì? Nó là một trong những góc? Ở giữa một nơi nào đó?
Tôi cũng sẽ giả định rằng hình ảnh của bạn được căn chỉnh về phía bắc/nam - ví dụ: nó không có hướng bắc về phía góc trên cùng bên trái. Điều đó sẽ có xu hướng làm phức tạp mọi thứ.
Cách tiếp cận dễ nhất là tìm ra chính xác tọa độ vĩ độ/vĩ độ tương ứng với điểm ảnh (0, 0) và pixel (1017, 915). Sau đó, bạn có thể tìm ra pixel tương ứng với toạ độ vĩ độ/kinh độ đã cho qua interpolation.
Để phác thảo ngắn gọn quá trình đó, hãy tưởng tượng rằng vĩ độ (/ 37,803134, 145.132377) của bạn tương ứng với pixel (0, 0) và bạn đã phát hiện ra điểm ảnh (1017, 915) tương ứng với lat/lon (-37,798917, 145.138535). Giả sử quy ước thông thường với pixel (0, 0) ở góc dưới cùng bên trái, điều này có nghĩa là phía bắc nằm trong ảnh.
Sau đó, nếu bạn quan tâm đến mục tiêu phối hợp (-37,801465, 145,134984), bạn có thể tìm ra các số tương ứng của điểm ảnh lên hình ảnh nó là như sau:
pixelY = ((targetLat - minLat)/(maxLat - minLat)) * (maxYPixel - minYPixel)
= ((-37.801465 - -37.803134)/(-37.798917 - -37.803134)) * (915 - 0)
= 362.138
Đó là, tương ứng pixel là 362 pixel từ dưới cùng của hình ảnh. Sau đó, bạn có thể thực hiện tương tự cho vị trí pixel ngang, nhưng thay vào đó, sử dụng kinh độ và pixel X.
Phần ((targetLat - minLat)/(maxLat - minLat))
tính toán khoảng cách giữa hai toạ độ tham chiếu và cho 0 để cho biết bạn đang ở vị trí đầu tiên, 1 để chỉ số thứ hai và số ở giữa để cho biết vị trí ở giữa. Vì vậy, ví dụ, nó sẽ tạo ra 0,25 để chỉ ra rằng bạn là 25% về phía bắc giữa hai tọa độ tham chiếu. Bit cuối cùng chuyển đổi nó thành các pixel tương đương.
HTH!
EDIT Ok, dựa trên nhận xét của bạn, tôi có thể cụ thể hơn một chút.Cho rằng bạn đang sử dụng góc trên bên trái là điểm tham chiếu chính của bạn, tôi sẽ sử dụng các định nghĩa sau đây:
minLat = -37.803134
maxLat = -37.806232
MAP_HEIGHT = 916
Sau đó, nếu chúng tôi sử dụng một ví dụ toạ độ (-37,804465, 145,134984), Y tọa độ của pixel tương ứng, so với góc trên cùng bên trái, là:
pixelY = ((targetLat - minLat)/(maxLat - minLat)) * (MAP_HEIGHT - 1)
= ((-37.804465 - -37.803134)/(-37.806232 - -37.803134)) * 915
= 393.11
Do đó, điểm ảnh tương ứng là 393 pixel từ trên xuống. Tôi sẽ cho phép bạn làm việc ra tương đương ngang cho chính mình - về cơ bản là giống nhau. LƯU Ý Các -1
với MAP_HEIGHT
là bởi vì nếu bạn bắt đầu từ số không, số điểm ảnh tối đa là 915, không 916.
EDIT: Một điều tôi muốn tận dụng cơ hội để chỉ ra là điều này là một xấp xỉ. Trong thực tế, không có mối quan hệ tuyến tính đơn giản giữa vĩ độ và kinh độ và các dạng khác của tọa độ Descartes vì một số lý do bao gồm các dự báo được sử dụng trong khi tạo bản đồ và thực tế là Trái Đất không phải là một hình cầu hoàn hảo. Trong các khu vực nhỏ, xấp xỉ này đủ gần để không tạo ra sự khác biệt đáng kể, nhưng về những sự khác biệt về quy mô lớn hơn có thể trở nên rõ ràng. Tùy thuộc vào nhu cầu của bạn, YMMV. (Tôi cảm ơn uray, câu trả lời dưới đây nhắc tôi rằng đây là trường hợp).
Để trả lời câu hỏi của bạn mà bạn đã yêu cầu above..how một diện tích lớn không che hình ảnh của bạn Nó bao gồm roughtly 2-4 miles.what chỗ trên hình ảnh của bạn bạn tham khảo phối hợp (-37,803134, 145,132377) tham khảo đến? Nó là một trong những góc? Ở giữa một nơi nào đó? Tọa độ góc trên cùng bên trái.Điều phối đầy đủ là (-37.803134, -37.806232,145.132377,145.136733). –
Xin cảm ơn câu trả lời của bạn. Có một nghi ngờ nhỏ. Theo công thức của mình pixelY = ((targetLat - minLat)/(maxLat - minLat)) * (MAP_HEIGHT - 1), nếu tôi cố gắng xác định vị trí (-37.803134,145.132377) không có gì khác ngoài trên cùng bên trái nó phải là 0 isnt nó ??? Nhưng nó không ?? ((-37.803134 - -37.806232)/(-37.803134 - -37.806232)) * 915 = 915 –
Đúng vậy, bạn bắt được - rất tiếc, tôi dường như đã trộn lẫn bản thân mình lên đăng tải bản cập nhật đó. Trao đổi các giá trị cho minLat và maxLat và bạn sẽ ổn. – Mac