Làm cách nào để tạo bản đồ bằng Python?

Bản đồ tương tác là phương tiện tuyệt vời để trực quan hóa dữ liệu vì chúng cho phép người dùng tự khám phá tập dữ liệu. Hầu hết các bản đồ tương tác đều có chức năng để người dùng xoay và thu phóng xung quanh bản đồ, nhấp vào điểm đánh dấu và nhận thêm dữ liệu từ cửa sổ bật lên. Việc tạo bản đồ tương tác cũng làm nổi bật khả năng của người tạo trong việc tiến hành thu thập và xử lý dữ liệu phía sau, cũng như thiết kế trải nghiệm người dùng phía trước hiệu quả

Vì lý do này, việc thêm bản đồ tương tác vào danh mục đầu tư của bạn là một cách tuyệt vời để thể hiện khả năng của bạn với khách hàng, khiến bạn nổi bật trước các nhà tuyển dụng tiềm năng hoặc chia sẻ dự án cá nhân với cộng đồng rộng lớn hơn

Chúng tôi sẽ hướng dẫn toàn bộ quy trình làm việc để tạo ra một bản đồ tương tác về các dấu ấn lịch sử của Luân Đôn từ việc thu thập và xử lý dữ liệu, thông qua thiết kế bản đồ và lưu trữ trực tuyến.  

Tiểu sử

Khi khám phá các đường phố của thành phố Luân Đôn, bạn có thể hòa mình vào lịch sử bằng cách đọc một số trong hàng nghìn dấu ấn lịch sử kết nối các địa điểm với các sự kiện, tòa nhà và con người đáng chú ý trong suốt lịch sử. Tuy nhiên, không phải ai cũng có cơ hội để làm điều này trực tiếp. Bản đồ tương tác là phương tiện lý tưởng để người dùng khám phá và tìm hiểu thêm về lịch sử của Luân Đôn từ cơ sở dữ liệu về các dấu ấn lịch sử

Làm cách nào để tạo bản đồ bằng Python?

Ví dụ về một trong nhiều dấu ấn lịch sử trải khắp London và phần còn lại của Vương quốc Anh. Hình ảnh từ. https. //mảng mở. org/mảng/2825

Mặc dù chúng tôi chọn các mảng lịch sử ở Luân Đôn, quy trình công việc chung ở đây có thể được tuân theo đối với bất kỳ tập dữ liệu và/hoặc vị trí nào khác. Chúng tôi thực sự khuyên bạn nên chọn một vị trí và tập dữ liệu mà bạn quan tâm — nghiên cứu và thu thập dữ liệu là những kỹ năng cực kỳ hữu ích. Xem bài đăng về “Dữ liệu GIS miễn phí và nơi tìm dữ liệu đó” để biết một số mẹo hay

Nếu bạn thấy hướng dẫn này hữu ích trong việc tạo bản đồ của riêng mình, vui lòng chia sẻ nó với chúng tôi trên Twitter @MapScaping

Yêu cầu

Một con trăn 3. 8 môi trường với các gói sau. lá 0. 12. 1, GeoPandas 0. 9. 0 và gấu trúc 1. 4. 2. Nếu bạn thiết lập môi trường Python không gian địa lý theo hướng dẫn của chúng tôi tại đây, thì bạn đã sẵn sàng

Phần 1 – Thu thập dữ liệu

Chúng tôi sẽ lấy nguồn ranh giới quận và dữ liệu lịch sử của London từ các nguồn sau

  • quận. https. //dữ liệu. London. chính phủ. uk/dataset/statistical-gis-boundary-files-london?resource=9ba8c833-6370-4b11-abdc-314aa020d5e0
  • Cơ sở dữ liệu mảng bám lịch sử. https. //mảng mở. tổ chức/dữ liệu

OpenPlaques là cơ sở dữ liệu cộng đồng về các điểm đánh dấu lịch sử. Chúng tôi chỉ sử dụng dữ liệu từ Vương quốc Anh, nhưng cơ sở dữ liệu bao gồm các dấu ấn lịch sử trên toàn cầu (hãy cân nhắc hướng bản đồ của bạn đến thành phố yêu thích của bạn. )

Sử dụng Pandas và GeoPandas, đọc dữ liệu vào GeoDataFrames

nhập khẩu lá

từ lá. plugin nhập MarkerCluster

nhập geopandas dưới dạng gpd

nhập gấu trúc dưới dạng pd

# Đọc ở Vương quốc Anh dữ liệu Mảng lịch sử

mảng_df = pd. read_json(“https. //s3. eu-tây-2. amazonaws. com/openplaques/open-plaques-United-Kingdom-2021-06-26. json"). dropna(). drop('updated_at', axis=1)

mảng bám = gpd. GeoDataFrame(

mảng_df, hình học = gpd. point_from_xy(plaques_df. kinh độ, mảng_df. vĩ độ, crs=4326)

)

mảng_df = Không có

# Đọc dữ liệu quận London

quận = gpd. read_file(“https. // skgrange. github. io/www/data/london_boroughs. json")

Phần 2 – Xử lý dữ liệu

Trong ví dụ này, chúng tôi sẽ kết hợp cả lớp điểm có thể nhấp và lớp choropleth đa giác. Để kết nối lớp choropleth của chúng tôi với các tính năng của Điểm mảng, chúng tôi thực hiện phép nối không gian để trích xuất số lượng Điểm mảng lịch sử có trong mỗi đa giác Borough

# Tìm số mảng ở mỗi quận

quận = quận. tham gia(

gpd. sjoin (mảng, quận). groupby(“index_right”). kích thước(). đổi tên(“numPlaques”),

cách=“trái”,

)

Biết có bao nhiêu điểm đánh dấu trong mỗi quận là một số liệu khá hữu ích, nhưng chúng ta có thể làm tốt hơn. Giả sử bạn đang lên kế hoạch cho một chuyến đi và muốn xem càng nhiều Mảng bám càng tốt trong một ngày, biết rằng mật độ Mảng bám sẽ là một số liệu hữu ích hơn.  

Boroughs GeoDataFrame chứa một trường diện tích tính bằng ha. Chúng tôi chuyển đổi đây là km vuông trực quan hơn và tính toán mật độ Mảng bám cho mỗi đa giác Borough

# Tính mật độ mảng bám

quận[‘area_sqkm’] = quận[‘area_ha’] / 100

quận[‘PlaqueDensity_sqkm’] = quận[‘numPlaques’] / quận[‘area_sqkm’]

Bây giờ chúng tôi có dữ liệu ở định dạng phù hợp và sẵn sàng vẽ trên bản đồ

Phần 3 – Tạo Bản đồ với Folium

Khởi tạo bản đồ với Folium đơn giản bằng cách gọi chức năng “Bản đồ” với tọa độ của trung tâm bản đồ

bản đồ = lá. Bản đồ(vị trí=[51. 507351, –0. 127758])

bản đồ

Có một số tham số chúng ta có thể áp dụng bao gồm xác định zoom_start và kiểu bản đồ cơ sở. Folium sử dụng OpenStreetMap làm bản đồ cơ sở theo mặc định, nhưng chúng tôi chọn Stamen Toner vì phong cách sạch hơn và trông lịch sử hơn. Chúng tôi cũng giảm chiều cao bản đồ để nhường chỗ cho tiêu đề

# Khởi tạo bản đồ trên London

bản đồ = lá. Bản đồ(vị trí=[51. 507351, –0. 127758], tiles=“Mực nhị hoa”,

zoom_start=10, height=‘92%’,prefer_canvas=True)

# Thêm tiêu đề

title_html = ”’

Các mảng lịch sử của Luân Đôn

Nhấp vào vòng tròn màu xanh để biết thêm thông tin

”’

bản đồ. get_root(). html. add_child(thoa. Phần tử(title_html))

bản đồ

Phần 4 – Thêm dữ liệu và bản đồ kiểu

đánh dấu

Có 3370 điểm đánh dấu trong bộ dữ liệu Mảng bám lịch sử của chúng tôi. Vẽ từng mảng như một điểm đánh dấu riêng lẻ sẽ khiến bản đồ khó đọc, đặc biệt là khi thu nhỏ. Chúng tôi sẽ sử dụng tính năng MarkerCluster trong Folium để tổng hợp các điểm đánh dấu gần đó với nhau khi bản đồ được thu nhỏ. Sau khi thêm các tính năng, chúng tôi sẽ thấy rằng điều này làm cho bản đồ trông gọn gàng hơn trong khi vẫn truyền tải vị trí chung của các Mảng lịch sử

Vòng lặp for bên dưới định cấu hình cửa sổ bật lên, tạo kiểu cho điểm đánh dấu Plaque và thêm tính năng này vào lớp MarkerCluster

# Tạo điểm đánh dấu cho từng vị trí mảng bám. Định dạng cửa sổ bật lên

marker_cluster = MarkerCluster(). add_to(bản đồ)

cho chỉ mục, hàng trong mảng. lặp đi lặp lại ()

    html = f”””Title: {row[‘title’]}


        Inscription: {row[‘inscription’]}


        Erected: {row[‘erected_at’]}


        Find more info here

“””

iframe = lá. Khung nội tuyến (html,

chiều rộng = 200,

chiều cao=200)

cửa sổ bật lên = lá. Cửa sổ bật lên (iframe,

max_width=400)

tán lá. CircleMarker(location=[row[“vĩ độ”], row[“kinh độ”]],

bán kính = 10,

color="#3186cc",

điền = Đúng,

fill_color=“#3186cc”,

cửa sổ bật lên=cửa sổ bật lên). add_to(marker_cluster)

bản đồ

choropleth

Đầu tiên, chúng ta sẽ xác định phong cách của lớp London Boroughs. Folium bao gồm thư viện Branca để tạo kiểu màu choropleth. Chúng tôi xác định tỷ lệ của tập dữ liệu và sau đó áp dụng một bản đồ màu. Branca có một số bản đồ màu tích hợp, nhưng ở đây chúng tôi xác định bản đồ màu của riêng mình. Bản đồ màu này được chọn từ tập hợp các lược đồ màu theo hướng dữ liệu do CARTO cung cấp. Cuối cùng, chúng tôi xác định một chức năng để áp dụng bản đồ màu, đặt độ mờ và tính năng nét viền

# Phong cách Choropleth

cám nhập khẩu. bản đồ màu như bcm

# Tạo bản đồ màu

# Đoạn đường nối màu “Mùa thu” từ https. //carto. com/carto-màu/

tỷ lệ = (quận [‘Mật độ mảng bám_sqkm’]. lượng tử((0, 0. 02, 0. 5, 0. 9, 0. 98, 1))). liệt kê()

bản đồ màu = bcm. LinearColormap(colors=[‘#008080’,‘#70a494’, ‘#b4c8a8’, ‘#edbb8a’, ‘#de8a5a’,‘#ca562c’],

chỉ số = quy mô,

vmin=min(quận[‘PlaqueDensity_sqkm’]),

vmax=max(quận[‘PlaqueDensity_sqkm’]))

style_function = lambda x. {

'tô màu'. colormap(x[‘properties’][‘PlaqueDensity_sqkm’]),

'màu'. 'màu đen',

'cân nặng'. 1. 5,

'fillOpacity'. 0. 3

}

Áp dụng các tính năng của Khu dưới dạng lớp phủ GeoJson trên bản đồ với kiểu dáng và chú giải công cụ bật lên cho biết tên Khu và số lượng Mảng

Thêm bản đồ màu vào bản đồ sẽ thêm chú thích ở góc trên cùng bên phải

# Vẽ lớp choropleth

tán lá. GeoJson(

quận,

style_function=style_function,

tooltip=folium. GeoJsonTooltip(

các trường = ['tên', 'numPlaques'],

aliases=[‘Borough’, ‘Dấu ấn lịch sử’],

bản địa hóa=True

)

). add_to(bản đồ)

bản đồ màu. chú thích = 'Điểm đánh dấu lịch sử trên mỗi sq. km’

bản đồ màu. add_to(bản đồ)

Phần 5 – Khám phá bản đồ

Đó là nó. Chúng tôi có một bản đồ đẹp mắt mà chúng tôi có thể sử dụng để khám phá tập dữ liệu và tìm hiểu về lịch sử của Luân Đôn (và cả phần còn lại của Vương quốc Anh). Bạn sẽ nhận thấy rằng mỗi cửa sổ bật lên Plaque chứa một liên kết đến trang OpenPlaques với thông tin thêm. Hãy thử tự mình nhìn xung quanh và xem bạn tìm thấy những điều thú vị nào.  

Có thể tìm thấy một điểm đánh dấu quan trọng đối với cộng đồng Geospatial ở góc Phố Broadwick và Phố Lexington ở Khu Westminster (phía đông nam Phố Regent và Phố Oxford)

Dấu hiệu dành riêng cho Tiến sĩ. John Snow, một bác sĩ người Anh đã có những tiến bộ đáng kể trong dịch tễ học và sức khỏe cộng đồng. Snow được công nhận là một trong những người đầu tiên sử dụng phân tích không gian địa lý để tìm hiểu bệnh tật trong công trình chứng minh rằng Dịch tả đã lây lan qua nguồn nước uống ở London vào giữa những năm 1800

Làm cách nào để tạo bản đồ bằng Python?

Bản đồ của bạn sẽ trông giống như thế này

Phần 6 – Lưu trữ và lưu trữ trực tuyến

Folium có chức năng xuất chế độ xem bản đồ sang tệp HTML Tờ rơi có thể được hiển thị trong trình duyệt web. Hãy xuất bản đồ của chúng tôi dưới dạng HTML và cũng lưu dữ liệu Mảng và Khu vực đã xử lý của chúng tôi trong khi chúng tôi đang ở đó

bản đồ. tiết kiệm(". /mục lục. html”)

với mở(“. /UK-plaques-2021-06-26. json”, “w”) làm tệp ngoài

outfile. viết (mảng bám. to_json())

quận. nộp(". /london-quận. geojson”, trình điều khiển=“GeoJSON”)

Có một số cách để lưu trữ bản đồ web trực tuyến ở định dạng HTML. Trang GitHub là một tùy chọn tuyệt vời cho các bản đồ nhỏ hơn. Tuy nhiên, bản đồ chúng tôi tạo trong hướng dẫn này quá lớn để tải trên GitHub.  

AWS S3 là một lựa chọn tốt và cung cấp tầng lưu trữ đối tượng miễn phí lên tới 5GB. Sau khi tạo tài khoản, hãy mở bảng điều khiển AWS s3, tạo bộ chứa mới và áp dụng các cài đặt sau.  

  • Trong “Quyền sở hữu đối tượng”, Chọn “Đã bật ACL”
  • Đảm bảo bỏ chọn hộp “Chặn tất cả quyền truy cập công khai” vì chúng tôi muốn có thể chia sẻ bản đồ công khai

Trong bộ chứa mới của bạn, hãy tải lên tệp HTML mà bạn đã xuất

Cuối cùng, bạn cần công khai tệp. Chọn tệp trong bảng điều khiển AWS s3. Trong “Hành động”, chọn “Công khai bằng ACL”

Bây giờ hãy nhấp vào tệp và sao chép URL đối tượng. Đây là liên kết mà bạn có thể chia sẻ với mọi người để truy cập bản đồ web của mình được lưu trữ trên s3

Phần kết luận

Hướng dẫn này sẽ cung cấp cho bạn trải nghiệm cần thiết để tạo các bản đồ web tương tác hấp dẫn. Hãy thử điều này trên tập dữ liệu mà bạn quan tâm và thoải mái chia sẻ kết quả với chúng tôi trên Twitter & LinkedIn

Làm cách nào để vẽ bản đồ bằng Python?

Theo liên kết này để biết thêm. .
Nhập thư viện. Trong 1]. nhập gấu trúc dưới dạng pd nhập geopanda dưới dạng gpd nhập matplotlib. pyplot dưới dạng plt
Đọc tệp dữ liệu. Trong 2]. df = pd. .
Đọc tập tin hình dạng. Trong 3]. shp_gdf = gpd. .
Hợp nhất tệp dữ liệu và tệp hình dạng dựa trên tên của các tiểu bang Ấn Độ. Trong [4]. .
Vẽ bản đồ của Ấn Độ

Làm cách nào để tạo bản đồ bằng matplotlib?

Viết dữ liệu trên bản đồ (Thư viện mẫu) .
viền(). vẽ đường đồng mức
đường viền (). vẽ đường viền đầy
imshow(). vẽ một hình ảnh
pcolor(). vẽ một biểu đồ giả màu
pcolormesh(). vẽ một ô giả màu (phiên bản nhanh hơn cho các mắt lưới thông thường)
kịch bản(). vẽ đường và/hoặc đánh dấu
tiêu tan(). vẽ điểm bằng bút đánh dấu

Đối tượng bản đồ Python là gì?

Hàm Python map() được sử dụng để áp dụng một hàm trên tất cả các thành phần của đối tượng bản đồ có thể lặp lại và trả về đã chỉ định. Đối tượng bản đồ Python là một trình vòng lặp, vì vậy chúng ta có thể lặp lại các phần tử của nó . Chúng ta cũng có thể chuyển đổi đối tượng bản đồ thành các đối tượng chuỗi như danh sách, tuple, v.v. sử dụng chức năng nhà máy của họ.

Kiểu dữ liệu ánh xạ trong Python là gì?

Loại ánh xạ là loại dữ liệu bao gồm tập hợp các khóa và giá trị được liên kết . Loại ánh xạ tích hợp duy nhất của Python là từ điển. Từ điển triển khai kiểu dữ liệu trừu tượng mảng kết hợp.