Vários métodos de projetar vários pontos no mapa usando python

Projete vários pontos no mapa

Vários pacotes de visualização de mapas são usados ​​no artigo

O documento oficial do Basemap está aqui → Basemap

O documento oficial da Folium está aqui → Folium

O formato dos dados é assim:
(as duas colunas de longitude e latitude são realmente usadas)
Insira a descrição da imagem aqui

Introdução de dados

Os dados são selecionados a partir dos dados do ponto da baioneta na cidade de Yiwu (incluindo latitude e longitude). O objetivo é projetar a longitude e a latitude da câmera baioneta no mapa para ver a distribuição aproximada.

1. Pacote Folium

É mais fácil entender o código diretamente

import folium
import xlrd
import pandas as pd
locations = pd.read_excel(r'1_点位.xlsx')
locations = locations.dropna()
locations = locations[(locations['LNG']>=119) & (locations['LNG']<=130)]
locations = locations[(locations['LAT']>=29) & (locations['LAT']<=30)]
a = []
a.append(locations['LNG'].min())
a.append(locations['LNG'].max())
a.append(locations['LAT'].min())
a.append(locations['LAT'].max())
places_on_boundary = [('1', a[2], a[0]),
('2', a[2], a[1]), ('3',a[3], a[1]),
('4', a[3], a[0]), ('5',a[2], a[0]),
('6', a[2], a[1]), ('7',a[3], a[1])]
# get the coordinates for these places
lats = [x[1] for x in places_on_boundary]
lons = [x[2] for x in places_on_boundary]
coordinates = zip(lats, lons)
# print(coordinates)
m = folium.Map(location=[(a[2]+a[3])/2, (a[0]+a[1])/2], zoom_start=13)
print(m)
boundary = folium.PolyLine(locations=coordinates,weight=1,color = 'red')
m.add_child(boundary)
#for point in coordinates:
 #   print(point)
  #  folium.Marker(point).add_to(m)

workbook = xlrd.open_workbook('点位.xlsx')
sheet = workbook.sheet_by_index(0)
cameralist = []
for row in range(1, sheet.nrows):
    values = sheet.row_values(row)
    cameralist.append((values[4], values[3]))
for point in cameralist:
    folium.CircleMarker(location=[point[0], point[1]],radius=0.3,weight=3).add_to(m)
m.save('点位.html')


No final, você obterá essa imagem, que é interativa. A vantagem desse mapa é que você pode visualizar o mapa no arquivo html e realizar operações como aumentar e diminuir o zoom.
Insira a descrição da imagem aqui

2.Basemap 包

O pacote Basemap é uma ferramenta de visualização que pode desenhar no mapa. Ele pode ser melhor combinado com o matplotlib, mas não é preciso para a rede de estradas e é adequado para desenhar em uma área muito grande (mapa-múndi ou mapa-país ou cada continente).

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
fig = plt.figure(1,(10,8),dpi = 100)
m = Basemap(projection='lcc', resolution=None,llcrnrlon =119.848322 , llcrnrlat=29.048459,  urcrnrlon= 120.211491, urcrnrlat=29.509874,lat_1 = 29.048459,lat_0 =29.509874,lon_0 = 120.211491 ) 
A = []
for i in range(len(locations['LNG'])):
    A.append(m(locations['LNG'].iloc[i],locations['LAT'].iloc[i]))
X = []
Y = []
for i in range(len(A)):
    X.append(A[i][0])
    Y.append(A[i][1])
m.etopo(scale=0.5, alpha=0.5)
m.shadedrelief()
m.scatter(X,Y,linewidth =1)

Esta é a imagem desenhada, emmm
Insira a descrição da imagem aqui

3. Um excelente pacote de visualização de mapas

Aqui está um pacote plot_map feito pelo chefe, que pode adicionar um mapa de fundo ao mapa temático, o projeto github do chefe → https://nbviewer.jupyter.org/github/ni1o1/pygeo-tutorial/


import pandas as pd
#读取数据
locations = pd.read_excel(r'1_点位.xlsx')
locations = locations.dropna()
locations = locations[(locations['LNG']>=119) & (locations['LNG']<=130)]
locations = locations[(locations['LAT']>=29) & (locations['LAT']<=30)]
bounds = [119, 29, 130, 30]
a = []
a.append(locations['LNG'].min())
a.append(locations['LNG'].max())
a.append(locations['LAT'].min())
a.append(locations['LAT'].max())
#经纬度小数点保留三位小数
data2 = locations[['LNG','LAT']].round(3).copy()
#集计每个小范围内数据量
data2['count'] = 1
data2 = data2.groupby(['LNG','LAT'])['count'].count().reset_index()
#排序数据,让数据量小的放上面先画,数据大的放下面最后画
data2.sort_values(by = 'count')
data2.head(5)
import matplotlib as mpl
import matplotlib.pyplot as plt
import plot_map
import seaborn as sns
import imp
imp.reload(plot_map)
fig     = plt.figure(1,(8,8),dpi = 100)    
ax      = plt.subplot(111)
plt.sca(ax)
fig.tight_layout(rect = (0.05,0.1,1,0.9))
#背景
plot_map.plot_map(plt,bounds,zoom = 12,style = 4)
#colorbar
pallete_name = "autumn_r"
colors = sns.color_palette(pallete_name, 3)
colors.reverse()
cmap = mpl.colors.LinearSegmentedColormap.from_list(pallete_name, colors)
norm = mpl.colors.Normalize(vmin=0, vmax=vmax)
#plot scatters
plt.scatter(locations['LNG'],locations['LAT'],c = "blue" ,s= 1)
plt.axis('off')
plt.xlim(bounds[0],bounds[2])
plt.ylim(bounds[1],bounds[3])
plt.show()


Bem, esta imagem é muito boa.
Nota: Todas as imagens acima projetam apenas pontos no mapa, sem processamento de conjunto. O próximo artigo irá escrever sobre como reunir pontos para desenhar um mapa de calor.

Acho que você gosta

Origin blog.csdn.net/qq_39805362/article/details/108659652
Recomendado
Clasificación