Я рисую карту Гонконга и хочу нанести на карту все станции метро. После указания ограничительной рамки, центральной точки в функции базовой карты и преобразования шейп-файла в систему координат 4326 с использованием arcmap, я хочу объединить базовую карту и шейп-файл вместе. Но они не очень хорошо совпадают.
Ограничительная рамка, которую я установил:
llcrnrlon=113.80779, llcrnrlat= 22.16694, urcrnrlon=114.416158, urcrnrlat=22.5783
И центральная точка:
lat_0=22.394400, lon_0=114.156489
Но я получаю следующий сюжет:
Зеленые точки обозначают станции метро в Гонконге, а размер точки обозначает количество твитов, размещенных рядом с каждой станцией. Чем больше точка, тем больше твитов размещено рядом с этой станцией.
Из графика мы могли ясно видеть, что береговые линии вообще не соответствуют шейп-файлу. Это из-за качества функции базовой карты? Ниже показаны все коды, которые я использую:
import matplotlib.pyplot as plt
import matplotlib.cm
from mpl_toolkits.basemap import Basemap
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
from matplotlib.colors import Normalize
dataframe = pd.read_csv(os.path.join(path, 'map_for_positive_negative.csv'))
dataframe['pos'] = dataframe.apply(lambda row: (row['lat'], row['lon']), axis=1)
# Plot the subway station on the map
def plot_station(pos):
count = dataframe.loc[dataframe.pos == pos]['Tweet Activity']
# x is longitude, y is latitude
x, y = m(pos[1], pos[0])
size = np.log2(count)
m.plot(x, y, 'o', markersize=size, color='#0FE500', alpha=0.8)
fig, ax = plt.subplots(figsize=(20, 20))
m = Basemap(resolution='f', # c, l, i, h, f or None
projection='mill',
lat_0=22.394400, lon_0=114.156489,
llcrnrlon=113.80779, llcrnrlat= 22.16694, urcrnrlon=114.416158, urcrnrlat=22.5783)
m.drawmapboundary(fill_color='#46bcec')
m.fillcontinents(color='#f2f2f2',lake_color='#46bcec')
m.drawcoastlines()
# The coordinate system of the shapefile should be 4326. Use arcmap to change it
shape_file_path = r'...\hk_tpu'
m.readshapefile(shapefile=shape_file_path, name='hk_tpu')
dataframe.pos.apply(plot_station)
plt.show(m)
Файл, в котором записывается местоположение станции метро, находится здесь:
Расположение станции метро в Гонконге
Шейп-файлы, которые я использую, находятся здесь:
Шейп-файл Гонконга
Большое спасибо!