0
0
Lập trình
Flame Kris
Flame Krisbacodekiller

Hướng Dẫn Tạo Máy Chủ Bản Đồ MapTiler Trên Raspberry Pi

Đăng vào 2 ngày trước

• 11 phút đọc

Khám Phá Bản Đồ Của Bạn Với MapTiler Trên Raspberry Pi

Tại Sao Nên Xây Dựng Máy Chủ Bản Đồ Của Riêng Bạn?

Bạn đã chán ngấy việc phụ thuộc vào Google Maps? Với MapTiler Server trên Raspberry Pi, bạn sẽ có:

Quyền riêng tư và offline: Bản đồ sẽ được lưu trên thiết bị của bạn.
Kiểm soát: Thêm các kiểu tùy chỉnh, lớp phủ hoặc dữ liệu.
Kinh nghiệm: Làm chủ Linux, API, và công nghệ không gian địa lý một cách dễ dàng.
Vui vẻ: Xây dựng một bảng điều khiển mẫu "Khám Phá Zurich" với bản đồ offline đẹp mắt!

Những Gì Bạn Sẽ Tạo Ra

Cuối cùng của hướng dẫn này, Raspberry Pi của bạn sẽ:

  1. Cung cấp bản đồ như một chuyên gia (ngay cả với giấy phép miễn phí).

  2. Chạy một ứng dụng bảng điều khiển demo trên màn hình của bạn hoặc một bảng điều khiển toàn màn hình trực tiếp trên Pi.

  3. Xử lý các tác vụ cơ bản như cấu hình Pi, tải lên dữ liệu mẫu, và triển khai một ứng dụng web đơn giản.

Những Gì Bạn Cần Chuẩn Bị

Mục Tại Sao Bạn Cần
Raspberry Pi (4/5) hoặc Raspberry Pi 3 A+ Bộ não của máy chủ bản đồ
Thẻ MicroSD (32GB+) Lưu trữ cho hệ điều hành và bản đồ
Nguồn điện Giữ cho Pi của bạn hoạt động!
Màn hình/bàn phím/mouse Để thiết lập (bạn có thể ngắt kết nối sau)

Cài Đặt Hệ Điều Hành – Thổi Hồn Vào Pi Của Bạn

Bước 1: Cài Đặt Raspberry Pi Imager

  1. Tải xuống Raspberry Pi Imager từ trang web chính thức.

  2. Cài đặt nó trên máy tính của bạn (có sẵn cho Windows, macOS và Linux).

Bước 2: Chọn Hệ Điều Hành

  1. Chọn phiên bản Pi dựa trên mô hình của bạn.

  2. Chọn Chọn Hệ Điều Hành và chọn Raspberry Pi OS (64-bit) hoặc hình ảnh tương thích khác.

  3. Chọn thẻ MicroSD của bạn trong phần Chọn Lưu Trữ.

Bước 3: Sử Dụng Cài Đặt Sửa Đổi Để Cấu Hình Trước

  1. Cấu hình các cài đặt sau:

    • Tên máy: Đặt một tên tùy chỉnh (ví dụ: pi-maps).
    • Tên người dùng và mật khẩu: Tạo một tên người dùng bạn thích và một mật khẩu bảo mật cho người dùng admin.
    • Wi-Fi: Nhập SSID và mật khẩu của bạn để kết nối tự động.
    • Ngôn ngữ: Đặt ngôn ngữ và mã quốc gia của bạn.
    • SSH (dưới Dịch vụ): Bật SSH để truy cập từ xa.
  2. Nhấn Lưu để quay lại menu chính.

Bước 4: Hoàn Thành Thẻ SD và Khởi Động Pi

  1. Nhấn Ghi, xác nhận và chờ quá trình hoàn tất.

  2. Chèn thẻ MicroSD vào Raspberry Pi của bạn và bật nó lên.

  3. Cài đặt đã được cấu hình trước sẽ tự động áp dụng, giúp bạn tiết kiệm thời gian trong quá trình thiết lập!

Cài Đặt MapTiler Server Trên Raspberry Pi Qua CLI

Bước 1: Tải Xuống và Cài Đặt MapTiler Server

  1. Tải xuống gói .deb ARM64 cho MapTiler Server từ trang web chính thức.

  2. Chuyển file đến Raspberry Pi của bạn (nếu được tải xuống trên máy khác).

    💡 Mẹo

    Bạn có thể kéo và thả trình cài đặt vào thẻ SD của bạn sau khi đã ghi. Trình cài đặt sẽ nằm trong đường dẫn /boot/firmware/.

  3. Mở terminal trên Raspberry Pi và chạy:

Copy
sudo dpkg -i maptiler-server-4.6.1-linux-arm64.deb

Bước 2: Khởi Động Máy Chủ

  1. Khởi động MapTiler Server với lệnh sau:

    Copy
    maptiler-server
  2. Máy chủ sẽ khởi động và bạn có thể truy cập nó trong trình duyệt tại:

http://:3650/admin/

Nếu bạn chạy máy chủ mà không có tùy chọn, máy chủ sẽ tự động tạo cấu hình ban đầu và mật khẩu. Hãy giữ nó để đăng nhập vào giao diện quản trị của máy chủ.

💡 Mẹo

Chạy maptiler-server --help để khám phá thêm các tùy chọn như cách đặt mật khẩu, thư mục chính và các tùy chọn khác.

Bước 3: Bật Khởi Động Tự Động (Tùy Chọn)

Để đảm bảo MapTiler Server khởi động tự động khi khởi động như một dịch vụ:

Copy
sudo maptiler-server-servicify

Lệnh này sẽ khởi động một kịch bản hướng dẫn bạn qua việc thiết lập thư mục làm việc của MapTiler Server (sử dụng đường dẫn tuyệt đối), cổng và mật khẩu quản trị. Sau đó, nó sẽ tạo tệp dịch vụ systemd và khởi động dịch vụ.

Thêm Dữ Liệu Mẫu Miễn Phí Vào MapTiler Server

Bước 1: Tải Dữ Liệu Mẫu Miễn Phí

  1. Truy cập MapTiler Data và đăng nhập (bạn đã có tài khoản từ khi tải trình cài đặt máy chủ).

  2. Nhấp vào "DỮ LIỆU CỦA TÔI" ở góc trên bên phải.

  3. Chuyển đến tab Máy chủ và tải gói dữ liệu mẫu miễn phí (một tệp ZIP). Gói này bao gồm các kiểu bản đồ và dữ liệu cho khu vực Zurich.

Bước 2: Tải Dữ Liệu Mẫu Lên MapTiler Server

  1. Mở giao diện quản trị MapTiler Server trong trình duyệt của bạn:
    http://:3650/admin/

  2. Đăng nhập bằng thông tin xác thực admin của bạn.

  3. Trong giao diện quản trị, nhấp vào "Bản Đồ Mới" hoặc kéo và thả tệp ZIP đã tải xuống trực tiếp vào giao diện.

  4. Chờ MapTiler Server xử lý và tải lên dữ liệu mẫu.

Bước 3: Khám Phá Dữ Liệu Mẫu

  1. Khi đã tải lên, chuyển đến tab Tiles để xem trước dữ liệu OpenStreetMap thô cho Zurich.

  2. Chuyển đến tab Bản Đồ để xem các kiểu bản đồ khác nhau (ví dụ: Đường phố, Ngoài trời, Vệ tinh Kết hợp).

    • Các kiểu này đã được cấu hình trước và sẵn sàng sử dụng với dữ liệu Zurich.

Bước 4: Kiểm Tra Cài Đặt Của Bạn

  1. Mở bất kỳ kiểu bản đồ nào trong trình duyệt của bạn bằng cách nhấp vào nó trong tab Bản Đồ.

  2. Sử dụng các mức thu phóng lên đến 14 để có chi tiết đầy đủ ở Zurich hoặc thử nghiệm với việc thu phóng quá mức cho các mức cao hơn.

⚠️ Cảnh báo
Trên các phiên bản Pi nhẹ hoặc có bộ nhớ thấp (như Pi 3 A+ của tôi), DỪNG lại ở đây. Việc chạy MapTiler Server và một trình duyệt trên cùng một bo mạch không phải là một ý tưởng hay. Tuy nhiên, bạn có thể sử dụng các phiên bản này để phục vụ các ô cho một trình duyệt chạy trên thiết bị khác.

Tạo Bảng Điều Khiển Trên Raspberry Pi

Một màn hình bản đồ tự động xoay để khám phá Zurich bằng sức mạnh của Raspberry Pi

Bước 1: Tạo Tệp HTML

  1. Trên Raspberry Pi của bạn, tạo một tệp mới:

    Copy
    nano ~/explore-zurich.html
  2. Dán mã hoàn chỉnh này:

    Copy
    <!DOCTYPE html>
    <html>
    <head>
    <title>Khám Phá Zurich</title>
    <script src="https://cdn.maptiler.com/maptiler-sdk-js/v3.0.1/maptiler-sdk.umd.min.js"></script>
    <link href="https://cdn.maptiler.com/maptiler-sdk-js/v3.0.1/maptiler-sdk.css" rel="stylesheet" />
    <style>
        body { margin: 0; padding: 0; }
        #map { position: absolute; top: 0; bottom: 0; width: 100%; }
        .map-title { 
            position: absolute; 
            top: 10px; 
            left: 10px; 
            z-index: 1; 
            background: white; 
            padding: 5px 10px; 
            border-radius: 5px;
            font-family: Arial;
        }
    </style>
    </head>
    <body>
    <div class="map-title" id="styleName">Khám Phá Zurich 🗺️</div>
    <div id="map"></div>
    
    <script>
        // Khởi tạo với MapTiler SDK
        maptilersdk.config.apiKey = '';  // Không cần API key cho máy chủ cục bộ
    
        // Tọa độ hộp giới hạn của Zurich
        const ZURICH_BBOX = {
            minLon: 8.4476, 
            maxLon: 8.5926,
            minLat: 47.3362,
            maxLat: 47.4145
        };
    
        // Các kiểu có sẵn từ dữ liệu mẫu của bạn
        const styles = [
            { id: "basic", name: "Kiểu Cơ Bản" },
            { id: "outdoor", name: "Kiểu Ngoài Trời" },
            { id: "streets", name: "Kiểu Đường Phố" },
            { id: "satellite-hybrid", name: "Kiểu Vệ Tinh Kết Hợp" }
        ];
    
        let currentStyleIndex = 0;
    
        // Khởi tạo bản đồ với kiểu đầu tiên
        const map = new maptilersdk.Map({
            container: 'map',
            style: `http://localhost:3650/api/maps/basic/style.json`,
            center: [8.5417, 47.3769], // Trung tâm Zurich
            zoom: 12
        });
    
        // Tạo vị trí ngẫu nhiên trong Zurich
        function getRandomZurichPosition() {
            const lon = ZURICH_BBOX.minLon + 
                Math.random() * (ZURICH_BBOX.maxLon - ZURICH_BBOX.minLon);
    
            const lat = ZURICH_BBOX.minLat + 
                Math.random() * (ZURICH_BBOX.maxLat - ZURICH_BBOX.minLat);
    
            return [lon, lat];
        }
    
        // Cập nhật bản đồ mỗi phút
        function updateMap() {
            // Vòng qua các kiểu
            currentStyleIndex = (currentStyleIndex + 1) % styles.length;
            const style = styles[currentStyleIndex];
    
            map.setStyle(`http://localhost:3650/api/maps/${style.id}/style.json`);
            document.getElementById('styleName').textContent = style.name;
    
            // Bay tới vị trí ngẫu nhiên
            map.flyTo({
                center: getRandomZurichPosition(),
                zoom: 14 + Math.random() * 4, // Thu phóng ngẫu nhiên giữa 14-18
                duration: 3000
            });
        }
    
        // Cập nhật ban đầu và đặt khoảng thời gian
        map.on('load', function() {
            updateMap();
            setInterval(updateMap, 10000);
        });
    </script>
    </body>
    </html>

Bước 2: Truy Cập Bảng Điều Khiển

  1. Mở trình duyệt Chromium trên Pi của bạn:

    Copy
    chromium-browser ~/explore-zurich.html
  2. Để vào chế độ kiosk (toàn màn hình):

    Copy
    chromium-browser --kiosk ~/explore-zurich.html

Những Gì Bạn Sẽ Thấy

✅ Tự động xoay kiểu mỗi 10 giây
✅ Chuyển đổi mượt mà giữa các vị trí ngẫu nhiên ở Zurich
✅ Bốn góc nhìn bản đồ khác nhau từ dữ liệu mẫu của bạn

Pi 3 A+ phục vụ ô cho bảng điều khiển bản đồ chạy từ máy tính để bàn.

Bài Học Rút Ra

  • Raspberry Pi 3 A+ là đủ để lưu trữ và phục vụ ô (đặc biệt với GUI đã tắt), nhưng không thể được sử dụng để hiển thị bảng điều khiển bản đồ trên màn hình cùng một lúc. Sử dụng phiên bản Pi mới hơn (4/5) để có trải nghiệm bản đồ mượt mà, chọn bo mạch >8GB bộ nhớ cho màn hình độ phân giải cao.

  • Đối với một số tình huống, lấy địa chỉ IP của Pi và kết nối đến console qua SSH.

  • Đối với một giải pháp hoàn toàn offline, đặt MapTiler SDK JS và CSS trực tiếp trên Pi và tham chiếu cục bộ.

Tiến Xa Hơn Cơ Bản

  • Thêm dữ liệu tùy chỉnh.

  • Thử chuyển sang chế độ 3D / Cầu.

  • Nhiều tính năng SDK hơn - ví dụ: lưu vị trí trong sảnh của bạn.

  • Thêm một sự thật hàng ngày về vị trí được chọn ngẫu nhiên bằng cách sử dụng API định vị địa lý.

  • Triển khai một lớp phủ thời tiết đơn giản cho vị trí đã chọn.

  • Cấu hình Pi của bạn để chạy Chromium.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào