Hiển thị Tile

Một phần của tài liệu XÂY DỰNG GIẢI PHÁP BẢN ĐỒ TRỰC TUYẾN DẠNG TILE (Trang 40)

Việc lấy dữ liệu từ server ở đây là các tile và hiển thị chúng lên màn hình theo trình tự để được một map thống nhất và chính xác đó chính là nhiệm vụ của tile map client. Màn hình hiển thị tile map cho phép người dùng có thể di chuyển và phóng to, thu nhỏ bản đồ.

Các tile map client được tạo ra phải có các chức năng sau:

 Tính toán các tile để lấp vào map

 Lấy các tile

 Ghép các tile trên map

3.1. Tính toán các tile để lấp vào map

Map View được xác định bởi khu vực địa lý của map và kích thước điểm ảnh của map. Để tính các tile, ta cần thiết lập một chức năng xem map view như là đầu vào và trả lại một danh sách các tile như là đầu ra. Mỗi tile được định nghĩa theo quy mô, hàng và cột. Việc thực hiện còn phục thuộc vào quy mô của map. Đơn giản nhất chúng ta xem các tile như là một tập hợp rời rạc của các mảnh map. Ở các mức độ phóng thì các tile có quy mô và tỷ lệ như nhau. Ngoài ra, để hỗ trợ tính liên tục trong tile map, tile map client phải có khả năng làm việc với dữ liệu ở bất kỳ quy mô nào.

3.1.1. Quy mô rời rạc

Quy mô này xác định hình ảnh tile bưởi quy mô phóng. Ở đây quy mô dùng để xác định trình tự của quy mô map hỗ trợ bởi các tile. Khi tăng mức độ phóng thì quy mô map cũng tăng. Trong trường hợp này khi tăng số lượng các ô vuông thì số lượng điểm ảnh được sử dụng để đại diện cho toàn bộ thế giới cũng sẽ tăng. Một map client sử dụng quy mô rời rạc sẽ cho phép người dùng chỉ chọn các cấp tồn tại trong dữ liệu.

29

Để tính số lượng tile cần lấy, client chỉ cần biết mức độ phóng hiện tại, địa chỉ tile ở map view, và số lượng tile yêu cầu để điền vào map view. Ở đây client không biết không gian địa lý thực của map view. Khi map client chỉ cho phép phóng các mức rời rạc, thì trạng thái của map có thể được lưu bằng cách sử dụng hệ thống tiled-based phối hợp. Nó rất quan trọng để tính số tile và giả định kích thước map là bội nguyên của kích thước tile.

Nguồn của map view là chỉ số của tile nhỏ nhất. Kích thước tile của map view là chiều rộng và chiều cao đại diện. Chiều rộng (cao) của map tính theo pixel thì được chia ra cho chiều rộng (cao) của các tile.

3.1.2. Quy mô map liên tục

Với quy mô map liên tục thì map view ở client phải được định nghĩa bởi không gian địa lý của khung nhìn và kích thước của khung nhìn theo đơn vị pixel.

Từ định nghĩa trên cần xác định mức phóng hợp lý nhất để xem và lấy tile cụ thể trong khu vực địa lý ở cấp độ đó.

Thứ nhất, quy mô map hiện tại phải được tính toán. Thay cho mức phóng ta sử dụng độ mỗi pixel (DPP) được sử dụng để đại diện cho quy mô map. Chú ý DPP phải là liên tục trên toàn bộ trái đất ở mỗi mức phóng cụ thể và quy mô phải được đại diện bằng phép chiếu các tọa độ thực tế. DPP được tính bằng cách sử dụng không gian địa lý và kích thước của map view như ở công thức 2.2 dưới đây :

DPP =

(2.2) Ở đây:

DPPx =

DPPy =

kinh độ lớn nhất của map view kinh độ nhỏ nhất của map view

30

vĩ độ lớn nhất của map view vĩ độ nhỏ nhất của map view

W chiều rộng của map view

H chiều cao của map view

Các mức phóng phải liên quan đến độ mỗi điểm ảnh DPP. DPP cho mỗi mức phóng có thể được tính bằng cách sử dụng các tile giới hạn địa lý và kích thước tile.

Độ mỗi điểm ảnh hiện tại được tính, tiến trình xác định mức độ phóng tốt nhất cho dữ liệu tile có thể được bắt đầu. Việc xác định mức độ phóng là rất cần thiết, nó đảm bảo cho chương trình có tối ưu và hiệu quả không. Điều này sẽ được phân tích kỹ hơn trong Chương 3. Khi mức phóng được chọn, nó được xem như là nguồn tile, danh sách những tile sẽ được hiển thị. Việc tính toán cho việc tạo danh sách tile giống như với quy mô rời rạc. Tile gốc sẽ được tính đầu tiên (có thể ở góc trên bền trái, hay góc dưới bên trái) và quy mô tile cũng sẽ được tính. Sau đó dựa vào chương trình sẽ dựa vào tọa độ địa lý và kích thước map view để tính lượng tile cần lấy. Nó được thể hiện ở phương trình 2.3 dưới đây: c = [ (λ + 180.0) × ] (2.3) r = [ (ϕ + 90.0) × ] Ở đây: c chỉ số hàng r chỉ số cột

λ kinh độ của map view

ϕ vĩ độ của map view

31

3.2. Lấy các tile

Các tile sẽ được lưu trữ cục bộ hoặc lưu trữ trên Network và đôi khi nó được lưu trữ ở cả hai. Nó tạo nên một giao diện trìu tượng để lấy các tile, vì thế chi tiết của cách thực hiện được riêng biệt với phần còn lại của chức năng map phía client. Điều này, nếu client muốn thay đổi hoặc thêm một cơ chế tìm bổ sung thì tác dụng của nó lên toàn bộ hệ thống là rất nhỏ.

3.2.1. Lƣu trữ tile cục bộ

Khi tile được lưu trữ cục bộ thì cơ chế lấy chúng sẽ phức tạp hơn. Khi tile trên đĩa được sử dụng, thì map client phải có kiến thức bên trong về sơ đồ lưu trữ tile. Một số trường hợp các chương trình lưu trữ là khá đơn giản. Số lượng sơ đồ tile trong một file đơn giản là một ví dụ điển hình. Mỗi lớp, quy mô, hàng và sự kết hợp với cột xác định một file ảnh đơn giản. Ngoài ra, phổ biến là cơ sở dữ liệu chương trình lưu trữ tile. Ở đây map client phải có khả năng kết nối đến cơ sở dữ liệu và thực hiện các truy vấn tile. Việc kết nối cơ sở dữ liệu từ phần mềm là rất đơn giản. Loại bộ nhớ hệ thống dùng để lưu trữ các tile theo yêu cầu của map client hiểu cách tổ chức những file này và nhiều khả năng các chỉ sổ được sử dụng để tìm tile bên trong chúng. Trong trường hợp này việc lấy tile sẽ khó khăn hơn, nhưng lợi ích của việc thực hiện chương trình lưu trữ như vậy có thể cao hơn. Có một cơ sở dữ liệu phục thuộc vào map client là điều nên tránh, nó sẽ rất phức tạp cho việc cài đặt và quản lý cơ sở dữ liệu.

Nói chung, việc lưu trữ dữ liệu tile ở bộ nhớ cục bộ nên được giới hạn ở một kích thước cụ thể. Như khi số lượng dữ liệu tăng lên, thì nhu cầu sử dụng bộ nhớ vật lý để hỗ trợ việc lưu trữ cũng tăng lên. Nó không thích hợp để làm một map client với các yêu cầu hệ thống lớn đơn giản như là hỗ trợ dữ liệu đi kèm. Thường thì map client sẽ bao gồm 1 hoặc 2 lớp map với độ phân giản bị giới hạn, nó được sử dụng như là map tổng thể và chỉ cung cấp một số lượng hạn chế các mức phóng thấp. Lớp map tốt hơn từ nguồn bên ngoài được sử dụng dữ liệu có độ phân giải cao.

3.2.2. Lấy tile từ Network

Việc lấy các tile map từ mạng là cơ chế phổ biến cho map client để lấy dữ liệu tile. Đối với Web-base client, nó là một yêu cầu. Đối với map client, nó làm giảm độ phức tạp và kích thước của bản cài đặt. Việc lấy các tile trên Network được thực hiện theo một số

32

cách khác nhau, cách phổ biến nhất là các tile được thực hiện thông qua giao thức truyền thông siêu văn bản (HTTP). Cụ thể, từng tile được lấy bằng cách thực hiện một phương thước GET thông qua HTTP. Bằng cách sử dụng HTTP GET, mỗi tile được thực hiện bới một URL đơn. Khi truy cập tile qua mạng, client không cần biết cơ chế lưu trữ các tile trên máy chủ. Máy chủ có thể lưu trữ các tile trong một cơ sở dữ liệu, như là các tập tin cá nhân, hay trong một vài chương trình tập tin tùy chỉnh nhưng điều này không được phản ảnh trong URL. Ngoài ra, hầu hết các ngôn ngữ lập trình cung cấp các thư viện làm cho việc lấy dữ liệu từ URL sử dụng phương thức HTTP GET trở nên dễ dàng hơn. Có hai loại URL thường được sử dụng trong các hệ thống lấy tile. Thứ nhất, mã hóa các thông số tile trong đường dẫn URL. Phương thức cấu trúc đường dẫn thường được sử dụng khi lưu trữ các tile như các tập tin cá nhân trên hệ thống. Ví dụ:

http://host.com/Tiles/bluemarble/3/5/2/.jpg

bluemarble ở đây nằm trong lớp có tên là Tiles, mức phóng là 3, cột 5 dòng 2. Thứ tự của các tham số này có thể được thay đổi, đặc biệt là vị trí hàng và cột. Loại URL thứ hai, mã hóa các tham số tile trong tham số URL (cặp giá trị sau dấu “?” trong URL). Ví dụ:

http://host.com/Tiles?layer=bluemarble/&level=3/&col=5/&row=2

Dĩ nhiên cả hai phương pháp mã hóa các yêu cầu bản đồ trong 1 URL có rất nhiều biến thể.

Một yếu tố khác cho tiled-based map client truy cập vào lưu trữ tile trên mạng là lớp quản lý. Một phương thức đơn giản của lớp quản lý là cứng hóa danh sách các lớp có sẵn trong client. Mã cứng danh sách 1 lớp thì rất đơn giản. Cứng hóa một danh sách cũng có thể bị vỡ. Khi mà các lớp có sẵn bị thay đổi, map client phải được cập nhập để hỗ trợ lớp danh sách mới. Nếu không, map client sẽ tạo ra một lỗi khi mà người dùng cố gắng truy cập vào một lớp không tồn tại. Trong nhiều trường hợp, map client có thể truy cập vào dữ liệu bảo trì của bên thứ 3. Nếu không kiểm tra liên tục những thay đổi trong lớp có sẵn, khả năng người dùng gặp vấn đề dữ liệu là rất cao.

3.3. Tổng quan về map view

Sau khi map view lấy các tile, nó phải được điền vào map view. Quá trình lắp ráp các tile vào trong map còn phụ thuộc vào công nghệ được sử dụng để xây dựng map client. Tuy nhiên về cơ bản thì chúng là tương tự nhau.

33

3.3.1. Quy mô map view rời rạc

Ở đây thì việc lắp ráp các tile là đơn giản nhất. Khi các tile thích hợp được lấy, chúng phải được kết hợp để tạo nên một map view duy nhất. Map view đơn giản chỉ là những bức ảnh tĩnh hoặc một phần giao diện người dùng trong phần mềm map client.

Giả sử map client là một phần mềm cho phép người dùng tương tác với map. Map sẽ được giao diện người dùng sử dụng các bình chứa để giữ các tile. Như đã biết, kích thước của bản đồ là bội số của kích thước tile. Giao diện bình chứa phụ thuộc vào ngôn ngữ lập trình tạo nên map client. Trong java, các bình chứa sẽ là một Panel hoặc một đối tượng Jpanel (sử dụng thư viện AWT và Swing tương ứng). Các đặc tính của bình chứa:

 Giữ nhiều ảnh

 Tuyệt đối vị trí của ảnh

 Cho phép thay đổi kích cỡ của các bình chứa

Bình chứa sẽ sử dụng hệ trục Decac (nguồn ở dưới bên trái) để lưu trữ các tile ở vị trí nhất định. Khi các tọa độ tile được tính nó có thể đặt trong bình chứa bằng cách sử dụng vị trí tuyệt đối. Các bình chứa giữ ảnh không như cửa sổ của map view. Ứng dụng cửa sổ map view sẽ hiển thị các tile. Khung nhìn là những gì mà người dùng thật sự thấy. Khung nhìn có thể nhỏ hơn hoặc lớn hơn bình chứa map. Tách biệt kích thước của khung nhìn với kích thước của bình chứa map sẽ cho phép bình chứa map cố định một hoặc nhiều kích thước tile, trong khi kích thước khung nhìn có thể thay đổi tùy ý. Bình chứa map sẽ thay đổi kích thước như khung nhìn thay đổi kích thước. Các bình chứa nên có chiều rộng và chiều cao lớn hơn hoặc bằng chiều rộng và chiều cao của khung nhìn. Tối thiếu chiều rộng và chiều cao của khung nhìn là bội số nhỏ nhất của kích thước tile để tính kích thước bình chứa map. Thường thì các bình chứa map sẽ có kích thước cho phép khung nhìn thấy biên sâu của 1 hoặc 2 tile. Biên được sử dụng như là một bộ nhớ đệm tile vì thế khi mà người dùng di chuyển map, những tile sẽ xuất hiện trên map mà không cần phải lấy chúng từ bộ nhớ tile. Bằng cách nạp trước các tile không nhìn thấy, việc thực hiện của bộ nhớ tile trên mạng có thể được cải thiện đáng kể.

34

3.3.2. Quy mô map view liên tục

Khi các map client hỗ trợ quy mô liên tục, hình ảnh tile có thể không được đặt trực tiếp trên map. Thay vào đó, tile phải được biến đổi để phù hợp với map view hiện tại. Nhiệm vụ này thực hiện theo các bước:

 Ghép các tile để được hình ảnh lớn

 Cắt hình ảnh lớn để phù hợp khu vực địa lý và chế độ xem

 Thay đổi kích thước hình ảnh cắt theo kích thước điểm ảnh hiện tại của map view. Ba bước trên là cần thiết, nhưng nó phụ thuộc vào ngôn ngữ lập trình.

Ghép ảnh tile vào một hình ảnh lớn hơn. Ghép tile về cơ bản như đặt chúng vào bình chứa ở map view quy mô rời rạc. Đầu tiên tạo ra hình ảnh trống có kích thước chiều rộng và chiều cao là tổng của tất cả các tile đem ghép. Mỗi tile được ghép vào hình ảnh theo chỉ số của nó. Như cấp zoom rời rạc, lập chỉ số tile ảnh hướng đến việc tính toán chúng. Nếu tile là chỉ số Decac sau đó tung độ phải được biến đổi để phù hợp với việc lập trình chỉ mục ma trận ảnh.

Sau khi hình ảnh lớn được tạo ra, nó phải được cắt giảm để phù hợp với giới hạn địa lý map view. Mỗi góc của map view có một tọa độ địa lý. Mỗi tọa độ phải có một vị trí điểm ảnh trong hình ảnh được ghép. Những tọa độ điểm ảnh này sau đó để cắt ảnh lớn giới hạn tọa độ địa lý của nó phù hợp với map view.

Bước cuối là thay đổi kích thước hình ảnh cắt để có kích thước pixel giống map view. Đầu tiên độ phân giải của map view và chiều rộng của bức ảnh được tính. Các yếu tố chia tỉ lệ cho chiều rộng của ảnh là tỉ lệ với 2 độ phân giải.

35

CHƢƠNG 3: CÁC VẤN ĐỀ TỐI ƢU, CÂN BẰNG TẢI ĐỐI VỚI BẢN ĐỒ DẠNG TILE

Vấn đề tối ưu, cân bằng tải đối với hệ thống bản đồ trực tuyến dạng tile là rất cần thiết. Với hệ thống bản đồ khổng lồ, số lượng tile là rất lớn. Nếu chúng ta không có giải pháp tối ưu và cân bằng tải thì hệ thống sẽ hoạt động rất chậm chạp và cồng kềnh, như thế sẽ không mang lại hiệu quả mong đợi. Để thực hiện tối ưu và cân bằng tải đối với hệ thống bản đồ dạng tile chúng ta sẽ xét các vấn đề chính được bàn luận ở dưới đây.

Một phần của tài liệu XÂY DỰNG GIẢI PHÁP BẢN ĐỒ TRỰC TUYẾN DẠNG TILE (Trang 40)

Tải bản đầy đủ (PDF)

(75 trang)