Откройте карту улиц с помощью OSMNX: как найти сеть метро Ганновера? - PullRequest
1 голос
/ 28 мая 2020
import osmnx as ox
ox.__version__ # '0.13.0'

Я хотел бы показать метро в Ганновере , известное в данных OSM немецкого метро, ​​на карте, используя замечательный модуль OSMNX. Но в отличие от примера New York не возвращаются результаты для:

G = ox.graph_from_place('Hannover, Germany',
                        retain_all=False, truncate_by_edge=True, simplify=True,
                        network_type='none', custom_filter='["railway"~"subway"]')

# EmptyOverpassResponse: There are no data elements in the response JSON

, я получаю результаты по другим аналогичным запросам, используя в качестве региона «Ганновер, Германия». Я также не получаю результатов по метро в Париже или Лондоне. И я не получаю результатов по похожим запросам, таким как custom_filter = '["rail" ~ "tram"]' или '["rail" ~ "s-bahn"]' или '["network" ~ "metro"]'.

Кроме того, если я использую аргумент ключевого слова инфраструктуры для выбора «железная дорога», возвращается обширный gdf:

G = ox.graph_from_place('Hannover, Germany', retain_all=False, truncate_by_edge=True, simplify=True,
                        network_type='none', infrastructure='way["railway"]')
gdfox = ox.graph_to_gdfs(G, nodes=False, edges=True, node_geometry=True, fill_edge_geometry=True)
gdfox.shape # (4422, 14)

Но я не могу идентифицировать метро, ​​используя возвращенные столбцы?:

['u', 'v', 'key', 'osmid', 'service', 'oneway', 'length',
   'geometry', 'name', 'maxspeed', 'ref', 'bridge', 'tunnel',
   'access']

Что мне также кажется странным, так это то, что если я (пытаюсь) получить все железные дороги, используя custom_filter, возвращается только 2 LINESTRINGS:

G = ox.graph_from_place('Hannover, Germany', retain_all=False, truncate_by_edge=True,
                        simplify=True, network_type=None, custom_filter='["railway"~""]')
gdfox = ox.graph_to_gdfs(G, nodes=False, edges=True, node_geometry=True, fill_edge_geometry=True)
gdfox.shape # (2, 10) # returns only 2 LINESTRINGS: Altenbekener Damm

1 Ответ

1 голос
/ 30 мая 2020

Я в процессе удаления параметра infrastructure в пользу более согласованного параметра custom_filter. Будет сделано через пару дней: https://github.com/gboeing/osmnx/pull/477 (РЕДАКТИРОВАТЬ: сделано и выпущено в v0.14.0; фрагмент кода ниже отредактирован соответствующим образом.)

Между тем, я не знаком с Ганновер, но похоже, что его система пассажирских поездов помечена как «трамвай» и «железная дорога», а не «метро». Что-то вроде этого, кажется, фиксирует это:

import osmnx as ox
ox.config(use_cache=False,
          log_console=True,
          useful_tags_way=ox.settings.useful_tags_way + ['railway'])

G = ox.graph_from_place('Hannover, Germany',
                        retain_all=False, truncate_by_edge=True, simplify=True,
                        custom_filter='["railway"~"tram|rail"]')
len(G) #1776
...