c语言编程笔录

首页 >   > 笔记大全

笔记大全

怎样用python在地图上画比例

更新时间:2023-10-01

第一段:引言

绘制地图是GIS中最常见的操作之一。比例是一个很重要的概念,它告诉我们地图上显示的距离和真实距离之间的关系。比例通常以一个代表距离的分数表示。例如,1:10,000的比例说,地图上的1厘米相当于实际地面上的10,000厘米。在python中,我们可以使用一些库和工具来绘制地图和显示比例尺。在下面的几个段落中,我们将探讨如何使用一些流行的库来实现这一点。

第二段:使用geopandas绘制比例

Geopandas是一个为了处理地理空间数据而构建的Python库。它以geojson作为输入,允许我们以矢量的方式绘制地图。在下面的代码片段中,我们将首先使用geopandas和matplotlib绘制带有比例尺的地图。这个例子中,我们将用一个名为'world.map'的shapefile文件作为输入:

import geopandas as gpd
import matplotlib.pyplot as plt

world = gpd.read_file('world_map.shp')

# 绘制地图
f, ax = plt.subplots(1)
world.plot(ax=ax, color='lightgray', edgecolor='black')

# 绘制比例尺
# 修改第一个参数即可改变比例尺的长度和起始位置
# 修改第二个参数即可改变比例尺的单位
plt.bar(0.1, 0.1, width=0.2, bottom=0, edgecolor='black')
plt.text(0.3, 0.09, '1000 km', fontsize=12)
plt.axis('off')
plt.show()

第三段:使用folium绘制比例

Folium是一个用于绘制交互式地理信息数据可视化的Python库。它可以轻松地生成带有比例尺的地图。在下面的代码示例中,我们将使用folium创建一个地图,并通过设置control_scale参数来添加比例尺:

import folium
from folium.plugins import MeasureControl

m = folium.Map(location=[45.5236,-122.6750],zoom_start=13)
m.add_child(MeasureControl(position='bottomleft', primary_length_unit='miles', secondary_length_unit='feet', primary_area_unit='sqmiles', secondary_area_unit='acres'))
m.save('map.html')

第四段:使用plotly绘制比例

Plotly是一个用于绘制交互式数据可视化的Python库。它可以创建丰富的图表、地图和动画。在下面的代码示例中,我们将使用plotly创建一个Choropleth map,并添加比例尺。

import plotly.graph_objects as go

fig = go.Figure(go.Choropleth())

# 添加区域颜色
fig.add_trace(go.Choropleth(
    locations=['NY'],
    z=[1],
    colorscale='Blues',
    autocolorscale=False,
    marker_line_color='white',
    colorbar=dict(
        title={'text': "比例尺"},
        thickness=25)
))
# 添加比例尺线
fig.add_trace(go.Scatter(
    x=[-73.8],
    y=[40.7],
    xaxis='x2',
    yaxis='y2',
    mode="lines",
    line=dict(
        color="black",
        width=3),
    showlegend=False,
))
# 添加比例尺文字
fig.add_trace(go.Scatter(
    x=[-73.8],
    y=[40.7],
    xaxis='x2',
    yaxis='y2',
    mode="text",
    name="",
    text=["100 km"],
    textposition="middle right",
    showlegend=False)
)

fig.update_layout(
    title_text='地图标题',
    geo_scope='usa',
    xaxis2=dict(
        domain=[0.75, 1],
        anchor='y2',
        showticklabels=False
    ),
    yaxis2=dict(
        domain=[0, 0.5],
        anchor='x2',
        showticklabels=False
    )
)

# 显示地图
fig.show()