Bản đồ thế giới tương tác Python

Vài tháng trước, tôi muốn tạo một bản đồ tương tác cho một ứng dụng web thú vị mà chúng tôi đang phát triển. Tôi đã dành hàng giờ trên internet để tìm thư viện hoàn hảo để bắt đầu, nhưng tôi rất khó xem tài liệu vì không có hướng dẫn từng bước phù hợp để triển khai và tùy chỉnh hình ảnh khi cần. Tôi ước mình có một hướng dẫn so sánh các tính năng và triển khai chính xác cùng với các chi tiết về tùy chỉnh. Bài viết này là một nỗ lực để viết một hướng dẫn như vậy

Bài viết tiếp tục so sánh việc triển khai bản đồ nền tương tác [choropleth] bằng cách sử dụng ba thư viện phổ biến có sẵn cho Python cũng như các chi tiết và tùy chỉnh của kết quả cuối cùng

  1. Altair – triển khai đơn giản và nhanh chóng với bộ chức năng dễ truy cập
  2. Plotly – có chức năng phong phú. Bao gồm Mapbox, cài đặt tùy chỉnh và kiểu dáng
  3. Folium – Tờ rơi – hoàn toàn tùy biến và tương tác. Bao gồm chú giải công cụ, cửa sổ bật lên và hơn thế nữa

điều kiện tiên quyết

Bản đồ hợp xướng yêu cầu hai loại dữ liệu trong nền, một trong số đó là dữ liệu không gian địa lý, ranh giới địa lý để điền vào bản đồ [thường là tệp vectơ .shp [Shapefile] hoặc GeoJSON] và hai điểm dữ liệu trên mỗi ô vuông của bản đồ để tô màu

Thư viện Geo Pandas hữu ích khi bạn cần lấy dữ liệu theo định dạng yêu cầu. Ví dụ sử dụng tệp GeoJSON của các bang Ấn Độ. Bạn có thể bắt đầu với bất kỳ Shapefile hoặc GeoJSON công khai nào

bàn thờ

Altair Là một thư viện trực quan hóa cho Python dựa trên Vega… Đoạn điệp khúc được triển khai với nỗ lực tối thiểu và bao gồm các yếu tố tương tác – tô sáng, chú giải công cụ, v.v.

Altair tương thích với các trang nhanh… Bạn có thể tạo các bài đăng trên blog đơn giản trong vài phút bằng cách chuyển đổi các tệp Jupyter Notebook với mã tối thiểu. Kiểm tra Readme trên GitHub

Đoạn mã

# Importing required Libraries
import geopandas as gpd
import json
import altair as alt
import pandas as pd

Chúng tôi đọc Shapefile dưới dạng khung GeoPandas

gdf = gpd.read_file['states_india.shp']

Khung trông như thế này

Tạo một lớp cơ sở và một lớp choropleth

# Creating configs for color,selection,hovering
multi = alt.selection_multi[fields=['count','state'], bind='legend']
color = alt.condition[multi,
                  alt.Color['count', type="ordinal",
                  scale=alt.Scale[scheme="yellowgreenblue"]],
                  alt.value['lightgray']]
hover = alt.selection[type="single", on='mouseover', nearest=True,
                      fields=['x', 'y']]
#Creating an altair map layer
choro = alt.Chart[gdf].mark_geoshape[
    stroke="black"
].encode[ 
    color=color, 
    tooltip=['state','count']
].add_selection[
        multi
    ].properties[ 
    width=650,
    height=800
]
# Legend
c1 = alt.layer[choro].configure_legend[
    orient="bottom-right",
    direction = 'horizontal',
    padding = 10,
    rowPadding = 15
]
#Adding Labels
labels = alt.Chart[gdf].mark_text[].encode[
    longitude="x",
    latitude="y",
    text="count",
    size=alt.value[8],
    opacity=alt.value[0.6]
]
c2 = alt.Chart[gdf].mark_geoshape[
    stroke="black"
].encode[ 
    color=color, 
    tooltip=['state','count']
].add_selection[
        hover
    ].project[
    scale=100, 
]
[c1+labels].configure_view[strokeWidth=0]

Đoạn mã trên sẽ hiển thị bản đồ tương tác với chức năng hiển thị chú giải công cụ và tô sáng khi chọn [nhấp chuột]

ưu

  • Thực hiện đơn giản và nhanh chóng. Bao gồm một bộ tính năng được xác định trước để tăng tốc công việc của bạn
  • Tương thích với các trang nhanh

Điểm trừ

  • Ít tùy chọn tùy chỉnh và tương tác hạn chế
  • Không thể sử dụng các phần cách điệu bên ngoài của bản đồ như OSM, Mapbox, v.v.
  • API được ghi chép kém

Triển khai với Plotly

Thư viện Plotly để lập biểu đồ bằng Python, hiển thị các bản đồ sẵn sàng xuất bản với nhiều tính năng tương tác và tùy chỉnh

Có sẵn các cấu hình bản đồ cơ sở tùy chỉnh từ Mapbox, OSM và các tùy chọn kiểu dáng khác, cũng như triển khai đơn giản với Plotly Express và tài liệu phong phú. Điều này làm cho Plotly trở thành một trong những tùy chọn ưa thích để tạo bản đồ tương tác

Đoạn mã

# Importing required libraries

from plotly.graph_objs import Scatter, Figure, Layout
import plotly
import plotly.graph_objs as go
import json
import numpy as np
import geopandas as gpd

Nhập Shapefile

gdf = gpd.read_file['states_india.shp']
with open['states_india_1.json'] as response:
 india = json.load[response]

Tạo một lớp cơ sở và thêm các phần của bản đồ

fig = go.Figure[go.Choroplethmapbox[geojson=india, locations=gdf['st_nm'], z=gdf['state_code'],featureidkey="properties.st_nm",colorscale="Viridis", zmin=0, zmax=25,marker_opacity=0.5, marker_line_width=1]]
fig.update_layout[mapbox_style="carto-positron",
                  mapbox_zoom=3.5,mapbox_center = {"lat":23.537876 , "lon": 78.292142} ] 
fig.update_layout[margin={"r":0,"t":0,"l":0,"b":0}]
fig.show[]

Đoạn mã trên sẽ hiển thị bản đồ tương tác với chức năng thu phóng và hiển thị chú giải công cụ. Việc triển khai này bao gồm một số lượng lớn các tính năng khác, được mô tả chi tiết hơn. nơi đây…

ưu

  • Thực hiện rất đơn giản với các thư viện biểu đồ và Plotly Express. Có nhiều tài liệu
  • Rất nhiều cài đặt và tùy chọn kiểu dáng có thể tùy chỉnh
  • Tương thích với Dash và các tùy chọn khác để nhúng đoạn mã vào các ứng dụng web bên ngoài

Điểm trừ

  • Không có cách nào để thêm cửa sổ bật lên và các yếu tố tương tác khác ngoài các tùy chọn được xác định trước
  • Có thể yêu cầu quyền truy cập mã thông báo để hoạt động với nhiều kiểu bên ngoài. Kiểm soát hạn chế đối với các giới hạn mở rộng và tương tác liên quan

Triển khai với Folium

Folium kết hợp tính dễ sử dụng của hệ sinh thái Python với điểm mạnh của tờ rơi. thư viện ánh xạ js. Nó cho phép bạn hiển thị các bản đồ choropleth có thể tùy chỉnh, đáp ứng và tương tác, cũng như chuyển các trực quan hóa vectơ, raster, HTML phong phú dưới dạng các điểm đánh dấu trên bản đồ

Thư viện có một số bộ ô bản đồ tích hợp sẵn từ OpenStreetMap, Mapbox và Stamen, đồng thời hỗ trợ các bộ tùy chỉnh thông qua API Mapbox hoặc Cloudmade. Hình ảnh, video, GeoJSON và TopoJSON được hỗ trợ

Đoạn mã

# Importing required Libraries
import geopandas as gpd
import pandas as pd
import folium
import branca
import requests
import json
from folium.features import GeoJson, GeoJsonTooltip, GeoJsonPopup

Nhập Shapefile

gdf = gpd.read_file['states_india.shp']
with open['states_india_1.json'] as response:
    india = json.load[response]
#Creating a custom tile [optional]
import branca
# Create a white image of 4 pixels, and embed it in a url.
white_tile = branca.utilities.image_to_url[[[1, 1], [1, 1]]]

Thêm các lớp cơ sở và lớp Choropleth

________số 8_______

Đoạn mã trên sẽ hiển thị bản đồ choropleth tương tác với gợi ý di chuột, nhấp để phóng to và cửa sổ bật lên tùy chỉnh khi nhấp

ưu

  • Một số cài đặt và tùy chọn kiểu có thể tùy chỉnh cùng với các tính năng tương tác độc đáo như cửa sổ bật lên / phần bản đồ / hình nền tùy chỉnh và thu phóng nhấp để thu phóng
  • Tùy chọn để chuyển trực quan hóa vectơ, raster, HTML dưới dạng điểm đánh dấu trên bản đồ
  • Tùy chọn hiển thị bản đồ dưới dạng HTML và các tùy chọn khác để nhúng đoạn vào các ứng dụng web bên ngoài
  • Một lượng tài liệu kha khá để khám phá tất cả các chức năng có sẵn

Điểm trừ

  • Phụ thuộc vào nhiều thư viện

Phần kết luận

Ba công cụ này cho phép bạn tạo bản đồ tương tác tùy chỉnh cho trang web của mình mà không gặp nhiều rắc rối

Các độc giả thân mến, bạn đã bao giờ tạo các bản đồ tương tác như vậy cho các dự án của mình chưa?

Bạn có thể nhận được một nghề nghiệp yêu cầu từ đầu hoặc Nâng cấp kỹ năng và tiền lương bằng cách tham gia các khóa học SkillFactory trực tuyến

Bạn có thể tạo bản đồ tương tác bằng Python không?

Có hai gói Python tuyệt vời để tạo bản đồ tương tác. tán lá và mapboxgl . Cả hai gói này đều được xây dựng dựa trên thư viện JavaScript có tên là tờ rơi. js. Bài học này sẽ tập trung vào folium, đã tồn tại lâu hơn mapboxgl và do đó, được cộng đồng Python ghi lại đầy đủ.

Folium trong Python là gì?

Folium là một thư viện Python mạnh mẽ giúp bạn tạo một số loại bản đồ Tờ rơi . Theo mặc định, Folium tạo bản đồ trong một tệp HTML riêng. Vì kết quả Folium có tính tương tác nên thư viện này rất hữu ích cho việc xây dựng trang tổng quan. Bạn cũng có thể tạo bản đồ Jupyter nội tuyến trong Folium.

Bản đồ [] trong Python là gì?

Python's map[] là hàm tích hợp sẵn cho phép bạn xử lý và chuyển đổi tất cả các mục trong một lần lặp mà không cần sử dụng vòng lặp for rõ ràng, a technique commonly known as mapping. map[] is useful when you need to apply a transformation function to each item in an iterable and transform them into a new iterable.

Làm cách nào để sử dụng Folium trong Python?

Tôi sử dụng Python 3. 7, Lá 0. 12. .
Bước 1 - Nhập Pandas và Folium. Bước đầu tiên, như mọi khi, là nhập các thư viện. nhập gấu trúc dưới dạng pd. .
Bước 2 - Lấy vị trí trạm xe đạp và lưu vào khung dữ liệu Pandas. .
Bước 3 — Chỉ giữ lại những cột tôi cần. .
Bước 4 — Tạo bản đồ. .
Bước 5 — Thêm điểm vào bản đồ

Chủ Đề