Làm thế nào để định vị địa lý một gạch Mercator web chính xác bằng cách sử dụng gdal?


16

Để làm ví dụ, tôi sẽ lấy lát sau http://a.tile.openstreetmap.org/3/4/2.png và lưu nó dưới dạng "4_2.png".

Các tọa độ WGS84 của ô này có thể được tính hoặc đọc ở đó bằng cách nhấp vào ô tương ứng:

0 66.51326044311185 45 40.97989806962013 (West North East South)

Cách định vị địa lý cho ô chính xác (sử dụng gdal để tạo một trình định vị địa lý hoặc định dạng tham chiếu địa lý khác) sao cho:

  • Bitmap không cần phải được kéo dài (= các pixel trong geotiff hoàn toàn giống như trong bitmap gốc)
  • Hình ảnh thu được sẽ được mở ở đúng vị trí trong trình xem / trình chỉnh sửa GIS (ví dụ như trong Trình xem miễn phí TatukGIS )?

(Được chỉnh sửa vào ngày 19 tháng 9 năm 2011 để làm cho câu hỏi của tôi rõ ràng hơn và bao gồm các kết luận của tôi)


Kết luận của tôi:

Tôi đầu tiên mặc dù ý tưởng thứ ba (xem bên dưới) là ý tưởng đúng. Tôi đã mở trình duyệt địa lý trong Trình xem GIS và so sánh tọa độ được hiển thị với những gì tôi mong đợi. Geotiff ra khỏi ý tưởng thứ hai dường như được dịch chuyển 2 pixel về phía bắc. Đó là lý do tại sao tôi coi ý tưởng 3 (hoặc 4) là ý tưởng đúng.
Nhưng nếu bạn thử với một ô ở mức thu phóng cao hơn nhiều, thì vị trí địa lý của ý tưởng 3 chắc chắn sẽ bị dịch chuyển về phía nam. Thật ngớ ngẩn khi so sánh tọa độ trên một ô có mức thu phóng 3. Ranh giới quốc gia ở mức thu phóng như vậy được đơn giản hóa để việc so sánh không cho kết quả tốt.

Dan S. đã đúng, hình ảnh gạch đã có trong EPSG: 3857. Ý tưởng thứ hai sau đó là ý tưởng đúng (và cũng cho kết quả tốt ở mức thu phóng cao)


Ý tưởng đầu tiên: EPSG: 4326
Mã EPSG cho tọa độ WGS84 là EPSG: 4326 . Vì vậy, tôi chỉ đơn giản sử dụng tọa độ WGS84 để định vị địa lý cho ô như là geotif bằng gdal_translate :

gdal_translate -of Gtiff -co tfw=yes -a_ullr 0 66.51326044311185 45 40.97989806962013 -a_srs EPSG:4326 4_2.png t4326.tif

Bản đồ kết quả được hiển thị ở đúng nơi nhưng tôi sợ rằng hình chiếu không chính xác và có thể có một sự thay đổi ở giữa ô. Sau khi thử một thời gian dài để kiểm tra xem bằng cách định hướng lại bản đồ bằng gdalwarp, tôi đã tải xuống một phiên bản demo của Global Mapper và đây có vẻ là trường hợp (sames viền như ý tưởng 3 nhưng là một sự thay đổi bên trong ô). Hình ảnh phải được phân tầng để có thể sử dụng tọa độ EPSG: 4326.


Ý tưởng thứ hai: EPSG: 3857
Ngói này sử dụng phép chiếu "web mercator" (phép chiếu bí danh google map), hiện có mã EPSG: EPSG: 3857 (bí danh EPSG: 900913). Tôi chỉ cần chuyển đổi tọa độ bằng gdaltransform :

gdaltransform -s_srs EPSG:4326 -t_srs EPSG:3857
0 66.51326044311185
0 10018754.1713946 0
45 40.97989806962013
5009377.08569731 5009377.08569731 0

Tọa độ của tôi tính bằng mét là:

0 10018754.1713946 5009377.08569731 5009377.08569731 (West North East South)

Bây giờ tôi có thể sử dụng gdal_translate để tạo một geotiff:

gdal_translate -of Gtiff -co tfw=yes -a_ullr 0 10018754.1713946 5009377.08569731 5009377.08569731 -a_srs EPSG:3857 4_2.png t3857.tif

Ấn tượng của tôi là điều này là không chính xác bởi vì biên giới của các bản đồ được dịch chuyển về phía bắc. Nó có vẻ là ý tưởng đúng.


Ý tưởng thứ ba: EPSG: 3857 đến EPSG: 4055
Tôi đọc được rằng "trình duyệt web" sử dụng tọa độ WGS84 nhưng xem xét chúng như thể chúng có tọa độ hình cầu. Do sự khác biệt giữa trắc địa và vĩ độ địa tâm (Xem Wikipedia về vĩ độ ), các giá trị vĩ độ sẽ không giống nhau trên hình elip hoặc trên hình cầu. Tôi thấy rằng EPSG: 4055 là mã cho tọa độ hình cầu trên một hình cầu dựa trên WGS84.

Chuyển đổi tọa độ sang EPSG: 4055:

gdaltransform -s_srs EPSG:4326 -t_srs EPSG:4055
0 66.51326044311185
0 66.3722684317026 -17964.0621483233
45 40.97989806962013
45 40.7894557844857 -9152.84527519904

Các tọa độ hình cầu tương ứng là:

0 66.3722684317026 45 40.7894557844857 (West North East South)

Sau đó, tôi làm như thể những tọa độ vẫn còn trên ellipsoid (EPSG: 4326) và chuyển đổi chúng thành trình duyệt web:

gdaltransform -s_srs EPSG:4326 -t_srs EPSG:3857
0 66.3722684317026
0 9979483.26733298 0
45 40.7894557844857
5009377.08569731 4981335.86590183 0

Các tọa độ kết quả khác với tọa độ theo ý tưởng2:

0 9979483.26733298 5009377.08569731 4981335.86590183 (West North East South)

Bây giờ tôi chỉ cần viết tọa độ vào bản đồ:

gdal_translate -of Gtiff -co tfw=yes -a_ullr 0 9979483.26733298 5009377.08569731 4981335.86590183 -a_srs EPSG:3857 4_2.png t3857_through_4055.tif

Ý tưởng thứ ba này dường như cho kết quả tốt nhất. Nhưng tôi không chắc nó có đúng không. Nếu ý tưởng 3 là chính xác, có mã EPSG để thực hiện thao tác này trong một bước không?


Ý tưởng thứ tư: EPSG: 3857 thông qua Towks84 = 0,0,0,0,0,0,0

gdal (và dường như epsg cũng vậy) định nghĩa EPSG: 3857 như thế:

+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs

trong khi spatialreference.org như thế:

+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs

Nếu tôi sử dụng định nghĩa từ spatialreference.org tôi đã nhận được tọa độ chính xác trong một bước (Tôi vẫn không biết nếu chúng là tọa độ "chính xác" nhưng ít nhất chúng là các tội như ý tưởng 3):

gdaltransform -s_srs EPSG:4326 -t_srs "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
0 66.51326044311185
0 9979483.26733298 -17964.0621483233
45 40.97989806962013
5009377.08569731 4981335.86590183 -9152.84527519904

Tại sao có sự khác biệt trong định nghĩa của EPSG: 3857?

Câu trả lời:


11

Hình ảnh gạch đã có trong EPSG: 3857. Tại sao không chỉ tạo một tập tin thế giới để tham khảo nó?

http://en.wikipedia.org/wiki/World_file

Đối với ô bao trùm N. America ở zoom 1, bạn sẽ xem các nội dung thế giới sau:

78271.517
0
0
-78271.517
-19998372.6
19998372.6

Những con số đó đến từ đâu:

  • Dòng 1: chiều rộng của một pixel hình ảnh trong tọa độ thế giới = 20037508.342789244 mét / 256 pixel.
  • Dòng 2 và 3: xoay vòng, vì vậy n / a.
  • Dòng 4: chiều cao của một pixel hình ảnh trong tọa độ thế giới. Tương tự như dòng 1 nhưng âm tính, vì trong các tệp hình ảnh tăng y tương ứng với 'xuống' trong khi trong hệ tọa độ, tăng y tương ứng với 'lên'.
  • Dòng 5: Tọa độ X trong tọa độ thế giới của trung tâm của pixel trên cùng bên trái. Đây là -20037508.342789244, như được báo cáo bởi các liên kết la carte, cộng với 1/2 pixel để đưa nó vào trung tâm.
  • Dòng 6: Ditto, chỉ tọa độ Y của trên cùng bên trái.

GDAL nên chọn worldfile của bạn (.pgw cho png); bạn vẫn sẽ phải nói với nó EPSG: 3857 trên dòng lệnh.

(Lưu ý: không có thời gian để kiểm tra điều này, vì vậy tất cả đều thoát khỏi vòng bít ... nhưng hy vọng sẽ đúng trong lần thử đầu tiên!;)


Cảm ơn và xin lỗi vì câu trả lời muộn. Nhưng thực sự tôi nghĩ rằng điều này sẽ dẫn đến điều tương tự như ý tưởng thứ hai của tôi, trong đó gdaltransform thực sự chỉ được sử dụng để định vị hình ảnh.
Tên

Bạn đã đúng về hình ảnh gạch đã được ghi trong EPSG: 3857. Giải pháp thực sự chỉ đơn giản là sử dụng EPSG: 3857. Đó là cách tôi sử dụng để kiểm tra kết quả sai.
Tên

0

Các chức năng cần thiết để tạo gạch toàn cầu được sử dụng trên web. Nó chứa các lớp thực hiện chuyển đổi tọa độ cho:

  • GlobalMercator (dựa trên EPSG: 900913 = EPSG: 3785 ) cho các ô tương thích Google Maps, Yahoo Maps, Microsoft Bing Maps

  • GlobalGeodetic (dựa trên EPSG: 4326) cho Bản đồ cơ sở OpenLayers và các ô tương thích Google Earth

http://svn.osgeo.org/gdal/sandbox/klokan/gdal2tiles.py


Cảm ơn bạn nhưng nó không trả lời câu hỏi của tôi. Tôi không muốn tạo ra gạch. Tôi muốn biết những gì là / sẽ là địa lý chính xác của gạch.
Tên

Tôi đã làm "Nếu đúng, có mã EPSG để thực hiện thao tác này trong một bước không?" Trả lời EPSG: 900.913
Mapperz

Bạn đã không: EPSG: 900913 hoạt động như EPSG: 3857 (hoặc như EPSG: 3785) và không có giấy phép để thực hiện thao tác trong một bước, bạn vẫn phải vượt qua EPSG: 4055. Ngoài ra, tôi đã đề cập đến EPSG: 900913 như một bí danh cho EPSG: 3857 trong câu hỏi ban đầu của tôi.
Tên

0

Về câu hỏi phụ của tôi trong các ý tưởng thứ tư: Tại sao lại có sự khác biệt trong định nghĩa của EPSG: 3857 giữa định nghĩa trong gdal và trên spatialreference.org :

Sự khác biệt chính là gdal sử dụng "+ nadgrids = @ null" và spatialreference "+ Towgie84 = 0,0,0,0,0,0,0". Theo tài liệu hoặc định dạng PROJ.4, cả hai tham số được sử dụng cho các phép biến đổi chuẩn. Tôi tìm thấy một nhận xét thú vị từ Mikael Rittri trên máy chủ danh sách Proj4 :

"The +to definition you suggest is not correct for WGS84 Web Mercator, though.
This is because the datum shift you use, 

   +towgs84=0,0,0,0,0,0,0

is not the same as unmodified lat/long, or "without any datum shift" as you say.
It means "no datum shift" only if the +from and +to definitions use the same ellipsoid,
and in your case the +from definition uses the WGS84 ellipsoid, while the +to definition
uses a sphere instead.  

So, you have to use a trick: use 

   +nadgrids=@null 

instead."

Việc sử dụng "+ Towks84 = 0,0,0,0,0,0,0" dường như không đúng hoặc ít nhất là chỉ trong các điều kiện cụ thể.

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.