Tạo siêu lớp phủ bằng gdal2tile

Mano Marks, Nhóm API Địa lý của Google
Tháng 9 năm 2009

Mục tiêu

Hướng dẫn này sẽ hướng dẫn bạn tìm hiểu những thông tin cơ bản về cách tạo siêu lớp phủ, một tập hợp các lớp phủ mặt đất sử dụng NetworkLink dựa trên khu vực, sử dụng các tiện ích Thư viện trừu tượng hóa dữ liệu không gian địa lý nguồn mở.

Giới thiệu

Các trình duyệt địa lý như Google Earth và Google Maps cung cấp cho bạn hình ảnh vệ tinh và các ô bản đồ. Tuy nhiên, đôi khi bạn có thể muốn sử dụng nhãn của riêng mình. Hình ảnh hoặc dữ liệu đường quét có nhiều dạng và được sử dụng nhiều.

  • Đặt hình ảnh vệ tinh hoặc hình ảnh trên không của bạn vào một trình duyệt địa lý
  • Đặt bản đồ lịch sử lên trên hình ảnh hiện có, chẳng hạn như lớp Rumsey Maps trong Google Earth
  • Nhập dữ liệu GIS ở dạng đường quét
  • Đặt LIDAR hoặc hình ảnh hồng ngoại trong trình duyệt địa lý

Tuy nhiên, một trong những vấn đề với dữ liệu đường quét có độ phân giải cao là cần nhiều bộ nhớ để hiển thị. Và nếu triển khai qua mạng, bạn cũng lo ngại về băng thông. Để giải quyết vấn đề đó, bạn phải tạo thẻ thông tin.

Thẻ thông tin chia tệp hình ảnh của bạn thành nhiều hình ảnh và tải khi chúng xuất hiện. Bạn tạo một hình ảnh có độ phân giải thấp để hiển thị trong khi người dùng thu nhỏ. Trên cùng một khu vực, bạn tạo 4 hình ảnh có độ phân giải cao hơn để xem gần hơn. Đối với mỗi khu vực được phủ một hình ảnh, bạn sẽ tạo thêm bốn hình ảnh có độ phân giải cao hơn để thu phóng gần hơn, v.v. Đây được gọi là phương thức quadtree và là cách xếp hình ảnh lên Google Earth và Google Maps. Quy trình này được giải thích chi tiết hơn trong bài viết Hướng dẫn dành cho nhà phát triển KML về Khu vực.

Bạn có thể thực hiện việc này theo cách thủ công bằng ứng dụng chỉnh sửa đồ họa như PhotoShop hoặc GIMP của Adobe, nhưng điều này có thể phức tạp, tẻ nhạt và dễ xảy ra lỗi. Ngoài ra, có một số ứng dụng tốt, chủ yếu dành cho Windows, chẳng hạn như SuperOverlay, Arc2 EarthMapCruncher kết hợp với CrunchUp2KML.

Nếu bạn muốn tự động hóa quy trình hoặc thêm chức năng vào ứng dụng của riêng mình, CompanyName, sẽ cung cấp cho bạn một bộ công cụ phong phú để làm việc với dữ liệu vectơ và đường quét. Bài viết này bao gồm các tuỳ chọn dòng lệnh. Tuy nhiên, bạn cũng có thể dễ dàng tích hợp thư viện vào các ứng dụng của riêng mình. Trong hướng dẫn này, bạn sẽ sử dụng các tiện ích gdalinfo, gdal_translate, gdalwarpgdal2tiles. Kết quả cuối cùng là siêu lớp.

Các bước dòng lệnh

Có sáu bước để sử dụng CompanyName tại dòng lệnh.

  1. Tải xuống và cài đặt CompanyName
  2. Tải hình ảnh xuống
  3. Sử dụng gdalinfo để xác định thông tin về hình ảnh
  4. Sử dụng gdal_translate để tham chiếu địa lý hình ảnh
  5. Sử dụng gdalwarp để thay đổi phép chiếu hình ảnh
  6. Sử dụng gdal2tiles để chia hình ảnh thành các ô và tạo mã KML liên kết

Bước 1: Tải xuống và cài đặt MENA

Bắt đầu bằng cách tải xuống và cài đặt MENA như được nêu chi tiết tại đây.

Bước 2: Tải hình ảnh xuống

Bạn có thể sử dụng bất kỳ hình ảnh nào. Có một số nguồn dữ liệu địa lý trên web. Bạn có thể sử dụng bất kỳ giá trị nào trong số đó, nhưng bạn nên biết ranh giới của hình ảnh – vĩ độ và kinh độ của từng góc trong hình ảnh. Hướng dẫn này sử dụng hình ảnh NASA Blue Marble, có sẵn để tải xuống từ trang web của NASA. Những hình ảnh này được chụp vào năm 2004 và thể hiện hình ảnh tuyệt đẹp của Trái đất từ không gian. Chọn một trong các tệp ở phía dưới bên phải của thanh điều hướng bên phải.

Nếu đang sử dụng hình ảnh của riêng mình và biết rằng hình ảnh đó đã được chỉnh sửa địa lý, bạn có thể chuyển sang Bước 5. Nếu không, hãy tiếp tục sang Bước 3.

Bước 3: Nhận thông tin về hình ảnh

Sau khi cài đặt thư viện CompanyName và chọn hình ảnh, bạn cần lấy một số thông tin về hình ảnh để có thể tham chiếu địa lý. Cụ thể, bạn cần pixel và vị trí của từng góc của hình ảnh. Nếu bạn hình dung hình ảnh là một bảng, với các cột và hàng, thì pixel là cột và dòng là hàng.

ngừng cung cấp tiện ích tiện lợi, gdalinfo, để thu thập thông tin này. Tại dòng lệnh, bạn chỉ cần nhập gdalinfo filename, thay thế filename bằng đường dẫn đến tệp. Bạn sẽ nhận được kết quả như sau:

Driver: JPEG/JPEG JFIF
Files: world_200401.jpg
Size is 21600, 10800
Coordinate System is `'
Image Structure Metadata:
  SOURCE_COLOR_SPACE=YCbCr
  INTERLEAVE=PIXEL
  COMPRESSION=JPEG
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0,10800.0)
Upper Right (21600.0,    0.0)
Lower Right (21600.0,10800.0)
Center      (10800.0, 5400.0)
Band 1 Block=21600x1 Type=Byte, ColorInterp=Red
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 2 Block=21600x1 Type=Byte, ColorInterp=Green
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 3 Block=21600x1 Type=Byte, ColorInterp=Blue
  Image Structure Metadata:
    COMPRESSION=JPEG

Thông tin quan trọng cho hướng dẫn này là các dòng Upper Left, Lower Left, Upper Right, Lower Right. Những số liệu này cho bạn biết giá trị pixel và đường kẻ của mỗi góc. Ở phía trên bên trái, trong trường hợp này, là 0,0 và phía dưới bên phải là 21600,10800.

Bước 4: Tham chiếu hình ảnh

Tham chiếu địa lý trong trường hợp này có nghĩa là tạo siêu dữ liệu mô tả vị trí địa lý của từng góc hình ảnh. Sử dụng thông tin nhận được ở Bước 3 và gdal_translate, bạn có thể chỉ định thông tin tham chiếu địa lý cho tệp. Thao tác này sẽ tạo tệp VRT từ hình ảnh world_200401.jpg, bluemarble1.vrt. Tệp RTMP là tệp XML chứa thông tin về một phép biến đổi cụ thể, trong trường hợp này là bước gdal_translate. Bạn sẽ sử dụng nút này ở bước tiếp theo để tạo bộ thẻ thông tin cuối cùng. gdal_translate cho phép bạn thực hiện nhiều loại đầu ra tệp, bao gồm cả các định dạng tệp hình ảnh chính. Về cơ bản, việc sử dụng dữ liệu đầu ra nên bạn có thể trì hoãn việc tạo các tệp đầu ra cho đến bước cuối cùng. Điều này sẽ làm tăng hiệu quả và giảm thời gian chờ cho các bước riêng lẻ nếu bạn đang thực hiện dòng lệnh. Bạn sẽ chạy lệnh sau:

gdal_translate -of VRT -a_srs EPSG:4326 -gcp 0 0 -180 90 -gcp 21600 0 180 90 -gcp 21600 10800 180 -90 world_200401.jpg bluemarble1.vrt

Có rất nhiều thông tin về dòng đó, vì vậy, chúng tôi xin được phân tích như sau:

  • -of là định dạng đầu ra, trong trường hợp này là RTMP.
  • -a_srs chỉ định một hệ thống tham chiếu không gian cho tệp. Điều đó cho biết mọi ứng dụng sử dụng hệ thống toạ độ nào đang được sử dụng. Trong trường hợp này, thiết bị đang sử dụng EPSG:4326, giống với WGS84, hệ toạ độ mà Google Earth sử dụng.
  • -gcp, hay điểm kiểm soát mặt đất, gán toạ độ cho các vị trí trong tệp. Trong trường hợp này, bạn thực sự chỉ cần ba điểm, vì hình ảnh là hình chữ nhật và do đó, điểm thứ tư có thể dễ dàng được xác định. Đối với -gcp, hãy xác định gcp bằng cách đặt pixel rồi theo số dòng, sau đó là kinh độ và vĩ độ. Mỗi phiên bản được phân tách bằng dấu cách.
  • Hai thông số cuối cùng là tệp gốc và tệp đích.

Bước 5: Chỉnh sửa hình ảnh

Hình ảnh gốc không được tạo cho hình ảnh địa cầu tròn, nó được tạo ra để nằm phẳng. Trong thuật ngữ GIS, mô hình này được dự kiến, nghĩa là biểu diễn hai chiều của một đối tượng ba chiều. Hình chiếu đòi hỏi phải làm méo hình ảnh để hình ảnh đó trông như thế nào khi hình ảnh Trái Đất phẳng.

Để hình ảnh trở nên đẹp mắt, bạn phải điều chỉnh hình ảnh cho phù hợp với hình ảnh địa cầu. May mắn là MENA cũng cung cấp một công cụ tuyệt vời để làm điều đó. Bạn chỉ cần nhập gdalwarp -of VRT -t_srs EPSG:4326 bluemarble1.vrt bluemarble2.vrt. Thao tác này sẽ tạo một tệp mới, Bluemarble2.vrt. Tệp này cung cấp siêu dữ liệu về quy trình cong vênh.

Bước 6: Tạo Thẻ thông tin

Bạn sắp hoàn tất, nhưng phần này sẽ mất nhiều thời gian nhất. Để tạo thẻ thông tin, hãy nhập gdal2tiles.py -p geodetic -k bluemarble2.vrt. -k buộc thiết bị đầu ra KML. Thao tác này sẽ tạo cấu trúc thư mục bằng siêu lớp phủ. Vì mỗi tệp hình ảnh trong số đó phải được tạo riêng nên sẽ mất một khoảng thời gian để chạy. Đối với những hình ảnh lớn, giờ bạn có thể đi, uống một ly cà phê, nghỉ ngơi, có thể là một bữa ăn nhẹ. Khi bạn hoàn tất, hãy mở doc.kml và quan sát kết quả!

Kết luận

Hướng dẫn này chỉ đề cập đến những việc mà Lựa chọn hỗ trợ có thể mang lại, nhưng nó đưa ra cơ chế thuận tiện để tạo thẻ thông tin. Các thư viện MENA cốt lõi được viết bằng C++, nhưng cung cấp các liên kết cho Perl, Python, VB6, R, Ruby, Java và C#/.NET, nghĩa là bạn có thể dễ dàng kết hợp CompanyName vào các ứng dụng của mình. Ngoài ra, nhiều tiện ích, bao gồm gdal2tiles, được viết bằng Python, giúp bạn dễ dàng kết hợp chúng vào các ứng dụng Python. gdal2tiles cũng có thể tạo các trang API Google MapsOpenLayer.