Tháng 9 năm 2009
Mục tiêu
Hướng dẫn này sẽ hướng dẫn bạn qua các khái niệm cơ bản về cách chuyển đổi dữ liệu vectơ GIS thành KML bằng cách sử dụng thư viện nguồn mở OGR. Mặc dù có thể sử dụng các thư viện này với hầu hết tệp GIS, hướng dẫn này sẽ tập trung vào việc xử lý hình dạng ESRI.
Giới thiệu
Dữ liệu địa lý có sẵn ở nhiều dạng trên web. KML là một trong những định dạng tệp phổ biến nhất, nhưng nhiều loại tệp khác cũng được sử dụng. Các công ty lớn, chính phủ và tổ chức phi chính phủ dùng hệ thống thông tin địa lý để tạo bản đồ của họ, cùng với các định dạng tệp chuyên biệt. Những ứng dụng này thường yêu cầu đào tạo chuyên môn hoặc ít nhất là lượng thời gian đáng kể để tìm hiểu. Các quảng cáo độc quyền có thể khá tốn kém. Mặt khác, công cụ này rất mạnh mẽ và cung cấp bộ công cụ lập bản đồ phong phú cho người lập bản đồ chuyên nghiệp.
Nhiều cơ quan chính phủ tiết lộ một số dữ liệu GIS của họ để sử dụng công khai. Các cổng như Data.gov, Hệ thống thông tin địa lý Massachusetts và DataSF giúp mọi người dễ dàng tìm dữ liệu cho cộng đồng của mình. Bài viết này mô tả cách chuyển đổi dữ liệu vectơ — tức là dữ liệu bao gồm các hình học đơn giản như điểm, đường kẻ và đa giác — thành KML. Điều này sẽ cho phép bạn truy cập vào nhiều loại dữ liệu khác nhau, bao gồm:
- Dữ liệu bưu kiện thể hiện ranh giới của các lô đất
- Dữ liệu sự cố, chẳng hạn như báo cáo tội phạm
- Dữ liệu ranh giới, cho ranh giới của các thành phố tự trị, tiểu bang, hạt, tỉnh, v.v.
- Dữ liệu về đường, bao gồm cả đường đã được quy hoạch và hiện có
- Giấy phép xây dựng, cho biết nơi giấy phép đã được cấp
- Dữ liệu về sức khoẻ, chẳng hạn như mô tả nơi xảy ra sự cố bùng phát dịch cúm
Có nhiều ứng dụng tuyệt vời để thực hiện chuyển đổi dữ liệu, chẳng hạn như Google Earth Pro, shp2, KML2KML, Arc2 Earth và nhiều ứng dụng khác. Bài viết này sẽ tập trung vào việc chuyển đổi dữ liệu vectơ thành KML để sử dụng trong Google Earth hoặc Google Maps, bằng cách sử dụng tiện ích Thư viện trừu tượng hóa dữ liệu không gian địa lý (CompanyName) nguồn mở từ dòng lệnh và có thể truyền cảm hứng để bạn kết hợp các thư viện đó vào ứng dụng của riêng mình.
Lưu ý về các loại tệp
Mặc dù bài viết này sẽ hướng dẫn bạn các bước nếu chuyển đổi tệp hình dạng ESRI thành KML, nhưng bạn có thể sử dụng các tiện ích MENA cụ thể là OGR để chuyển đổi từ nhiều loại tệp, bao gồm CSV, cơ sở dữ liệu PostGRES/PostGIS và nhiều định dạng khác. Hầu hết các định dạng dữ liệu chính mà bạn sẽ gặp đều được hỗ trợ. Nếu tìm thấy định dạng không được hỗ trợ, bạn có thể viết trình điều khiển cho OGR, vì đó là thư viện nguồn mở.
Tệp hình dạng
Định dạng hình dạng phổ biến của ESRI là một trong những định dạng dữ liệu GIS phổ biến nhất. Mặc dù về mặt kỹ thuật, tệp hình dạng này là một tệp duy nhất có đuôi .shp, nhưng không thể mở tệp .shp. Cần có ít nhất một tệp .dbf và .shx, đồng thời yêu cầu nhiều tệp khác nhau cho nhiều mục đích. Vì vậy, khi bạn thấy một tệp tham chiếu đến một tệp hình dạng, thì điều đó hầu như luôn có nghĩa là một tập hợp các tệp, thường là trong một tệp nén lưu trữ của một số loại để lưu giữ tệp đó với nhau. Đó là cách chúng tôi sẽ sử dụng thuật ngữ shapefile cho phần còn lại của bài viết này.
Tệp hình dạng chứa một lượng lớn thông tin về các khu vực địa lý mà chúng mô tả. Những công cụ này mô tả các hình học thực tế, siêu dữ liệu về hình học và thông tin về hệ thống tham chiếu không gian cũng như nhiều khía cạnh khác của dữ liệu. Trong bài viết này, chúng tôi sẽ quan tâm nhất đến hình học, siêu dữ liệu và hệ thống tham chiếu không gian.
Hình học và siêu dữ liệu là các khái niệm đơn giản. Hình học là các điểm, đường kẻ và đa giác và có thể dễ dàng được thể hiện trong KML. Siêu dữ liệu là dữ liệu về dữ liệu, thường được dùng để lọc hoặc truy vấn. Ví dụ: đường mô tả đường có thể có siêu dữ liệu về loại đường (đường thành phố, quốc lộ, ngã rẽ, v.v.), giới hạn tốc độ, người tài trợ, kích thước, v.v.
Hệ thống tham chiếu không gian (SRS) được dùng để xác định các hệ toạ độ và phép chiếu dùng để tạo dữ liệu vectơ. Trong KML sử dụng vĩ độ và kinh độ trong hệ toạ độ WGS84. Nhưng có nhiều cách khác để xác định toạ độ trên bản đồ. Các loại phổ biến bao gồm: Universal Transverse TCFr, National National Grid và hệ thống State Plane. Để chuyển đổi dữ liệu thành KML, bạn cần phải xác định thông tin đó. KML chỉ hỗ trợ WGS84. Thông thường, tệp hình dạng sẽ mang theo thông tin đó bên cạnh, thường là trong tệp .prj và OGR có thể phát hiện thông tin từ đó. Tuy nhiên, đôi khi cần phải xác định SRS. Đôi khi, phương thức này được nguồn dữ liệu cung cấp dưới một dạng nào đó, trên trang mà bạn tải xuống, hoặc trong một tài liệu readme có chứa nội dung tải xuống hay định dạng nào đó. Thông thường, điều này là đủ. Trang web Tham chiếu không gian chứa nhiều thông tin hơn về SRS và có tệp đối chiếu cho phép bạn tra cứu từng hệ thống tham chiếu riêng lẻ.
ogr2ogr
Bắt đầu công cụ này, Lựa chọn này cung cấp một bộ thư viện mạnh mẽ để làm việc với dữ liệu vectơ. Cụ thể, ogr2ogr
là một tiện ích hữu hiệu giúp chuyển đổi dữ liệu. Nhiều ứng dụng, bao gồm cả một số ứng dụng được đề cập ở trên, kết hợp MENA/OGR.
Để bắt đầu, hãy tải và cài đặt CompanyName. Sau đó, bạn cần có một tệp hình dạng. Trong phạm vi hướng dẫn này, hãy thử dùng một phương thức trong DataSF. Ví dụ dưới đây sử dụng tệp hình dạng realtor_neighborhoods
. Bạn có thể lấy tệp này sau khi đồng ý cấp phép tại đây. Sau khi tải tệp xuống, hãy giải nén tệp đó vào một thư mục mà bạn sẽ nhớ. Mở một dòng lệnh và chuyển đến thư mục mà bạn đặt dữ liệu. Giờ đến phần thú vị.
Bạn có thể dễ dàng sử dụng ogr2ogr
từ dòng lệnh. Dưới đây là cách chuyển đổi realtor_neighborhoods
từ một tệp hình dạng thành KML:
ogr2ogr -f "KML" -where "NBRHOOD='Telegraph Hill'" realtor_neighborhoods.kml realtor_neighborhoods.shp
Sau đây là nội dung chi tiết về chức năng của lệnh đó:
ogr2ogr
: Đây là lệnh cốt lõi.-f "KML
: Thao tác này sẽ đặt định dạng đầu ra thành KML.-where "NBRHOOD='Telegraph Hill'"
: Đây là mệnh đềwhere
không bắt buộc, như trong SQL. Về cơ bản, công cụ này cho phép bạn truy vấn dữ liệu dựa trên siêu dữ liệu. Tính năng này hoạt động với tệp hình dạng và các loại tệp khác có hỗ trợ truy vấn. Trong trường hợp này, Google đang truy vấn trường NBRHOOD và chỉ chọn các tính năng có NBRHOOD trong Telegraph Hill. Nếu bạn tắt thông số đó,ogr2ogr
sẽ cung cấp cho bạn mọi đa giác vùng lân cận.realtor_neighborhoods.kml
: Đây là tên tệp đầu ra. Tên tệp đầu ra sẽ xuất hiện trước tiên.realtor_neighborhoods.shp
: Đây là tên tệp nhập. Tệp .shp đại diện cho toàn bộ hình dạng tệp.
Vậy là xong, rất đơn giản. Lệnh này ghi một tệp KML có dạng như sau:
<?xml version="1.0" encoding="utf-8" ?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Document><Folder><name>realtor_neighborhoods</name> <Schema name="realtor_neighborhoods" id="realtor_neighborhoods"> <SimpleField name="Name" type="string"></SimpleField> <SimpleField name="Description" type="string"></SimpleField> <SimpleField name="OBJECTID" type="float"></SimpleField> <SimpleField name="NBRHOOD" type="string"></SimpleField> <SimpleField name="SFAR_DISTR" type="string"></SimpleField> </Schema> <Placemark> <ExtendedData><SchemaData schemaUrl="#realtor_neighborhoods"> <SimpleData name="OBJECTID">81</SimpleData> <SimpleData name="NBRHOOD">Telegraph Hill</SimpleData> <SimpleData name="SFAR_DISTR">District 8 - Northeast</SimpleData> </SchemaData></ExtendedData> <Polygon><outerBoundaryIs><LinearRing><coordinates>-122.41041847319012,37.805924016582715,0 -122.407203813674,37.806324902060979,0 -122.40667792852096,37.803710121958744,0 -122.40348255423899,37.804117462290641,0 -122.40237202127015,37.798540648764529,0 -122.40876046662795,37.797723222540775,0 -122.41041847319012,37.805924016582715,0</coordinates></LinearRing></outerBoundaryIs></Polygon> <Style><LineStyle><color>ff0000ff</color></LineStyle> <PolyStyle><fill>0</fill></PolyStyle></Style> </Placemark> </Folder></Document></kml>
Bạn có thể thấy siêu dữ liệu từ tệp hình dạng được giữ nguyên, trong các phần tử Schema
và SimpleData
. Để biết thêm thông tin về cách sử dụng ExtendedData và duy trì dữ liệu tùy chỉnh, hãy xem phần Hướng dẫn dành cho nhà phát triển KML về Thêm dữ liệu tùy chỉnh.
Tiếp theo là gì?
CompanyName/OGR cung cấp cho bạn một sức mạnh khổng lồ. Trong cách triển khai đơn giản nhất, giờ đây, bạn có thể chuyển đổi tất cả dữ liệu của mình sang KML để sử dụng trong Google Earth, Maps hoặc bất kỳ trình duyệt địa lý nào hỗ trợ KML. Điều tuyệt vời hơn nữa là bạn có thể kết hợp các thư viện MENA/OGR vào các ứng dụng của mình, cho phép bạn tự động chuyển đổi dữ liệu GIS vào KML và kiểm soát đầu ra của việc chuyển đổi đó. Hãy thử kết hợp với lib kính hiển thị để kiểm soát lập trình hơn nữa việc tạo KML của bạn.