Базовая карта плохо вписывается в шейп-файл - PullRequest
0 голосов
/ 14 апреля 2019

Я рисую карту Гонконга и хочу нанести на карту все станции метро. После указания ограничительной рамки, центральной точки в функции базовой карты и преобразования шейп-файла в систему координат 4326 с использованием arcmap, я хочу объединить базовую карту и шейп-файл вместе. Но они не очень хорошо совпадают.

Ограничительная рамка, которую я установил:

llcrnrlon=113.80779, llcrnrlat= 22.16694, urcrnrlon=114.416158, urcrnrlat=22.5783

И центральная точка:

lat_0=22.394400, lon_0=114.156489

Но я получаю следующий сюжет: Map of Hong Kong

Зеленые точки обозначают станции метро в Гонконге, а размер точки обозначает количество твитов, размещенных рядом с каждой станцией. Чем больше точка, тем больше твитов размещено рядом с этой станцией.

Из графика мы могли ясно видеть, что береговые линии вообще не соответствуют шейп-файлу. Это из-за качества функции базовой карты? Ниже показаны все коды, которые я использую:

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)

Файл, в котором записывается местоположение станции метро, ​​находится здесь:

Расположение станции метро в Гонконге

Шейп-файлы, которые я использую, находятся здесь:

Шейп-файл Гонконга

Большое спасибо!

1 Ответ

0 голосов
/ 15 мая 2019

О, мальчик, я сдаюсь! Я думаю, причина в том, что базовая карта, предлагаемая функцией «Базовая карта», устарела и не может одновременно отслеживать развитие города. Гонконг - это место, где правительство всегда рассматривает возможность расширения города. Следовательно, довольно часто, если базовая карта не может очень хорошо соответствовать последнему шейп-файлу.

На самом деле моя цель - просто нарисовать несколько точек на графике. В этом случае я хочу нанести все станции метро на карту. И для каждой точки я хочу использовать размер точки для представления количества твитов в соседней области. Кроме того, я также хочу использовать плотность цвета для представления уровня настроения людей в этой области.

Наконец, я решил использовать Tableau. Я не загружал базовую карту и просто загружал данные из CSV-файла, который содержит геоинформацию каждой станции метро и твиты, размещенные рядом с каждой станцией. Примерный график показан ниже:

enter image description here

Удачного кодирования!

...