Indicators calculation

[1]:
import geopandas as gpd
import sys
sys.path.append('..')
from transport_frames.indicators import *

Initialization

[2]:
local_crs = 32637

The graph can be obtained by transport_frames.graph.get_graph_from_polygon()

[3]:
import pickle

with open("graph.pkl", "rb") as f:
    graph = pickle.load(f)

Area indicators

Requires the settlement_points - points of interest to calculate distances from.

distrcits_polygons - the polygons for data aggregation on different levels. Can be used for regional, district and settlement levels.

[4]:
districts_polygons = gpd.read_file('/Users/polina/Desktop/github/transport_frames/data/Тульская_область/district.geojson')
settlement_points = gpd.read_file('/Users/polina/Desktop/github/transport_frames/data/Тульская_область/Тульская_область_region_points.geojson')

Distance to administrative center of the region

[5]:
capital =ox.geocode_to_gdf('N34389350',by_osmid=True)

get_distance_to_region_admin_center(capital,settlement_points,districts_polygons,graph).head()
[5]:
name geometry distance_to_admin_center
0 Арсеньевский район POLYGON ((36.27046 53.67571, 36.27343 53.67505... 115.7150
1 Белевский район POLYGON ((35.89856 53.85018, 35.90015 53.84679... 130.1660
2 Богородицкий район POLYGON ((37.86240 53.73471, 37.86404 53.72565... 81.6420
3 Веневский район POLYGON ((37.86087 54.34286, 37.86265 54.34249... 65.2820
4 Воловский район POLYGON ((37.73668 53.45977, 37.74516 53.45518... 109.1135

Distance to federal roads

[6]:
get_distance_to_federal_roads(settlement_points,districts_polygons,graph).head()
[6]:
name geometry distance_to_federal_roads
0 Арсеньевский район POLYGON ((36.27046 53.67571, 36.27343 53.67505... 36.0405
1 Белевский район POLYGON ((35.89856 53.85018, 35.90015 53.84679... 6.7490
2 Богородицкий район POLYGON ((37.86240 53.73471, 37.86404 53.72565... 9.0930
3 Веневский район POLYGON ((37.86087 54.34286, 37.86265 54.34249... 4.8230
4 Воловский район POLYGON ((37.73668 53.45977, 37.74516 53.45518... 15.5010

Length of the roads

[7]:
get_road_length(graph, districts_polygons).head()
[7]:
name geometry road_length
0 Арсеньевский район POLYGON ((36.27046 53.67571, 36.27343 53.67505... 785.520134
1 Белевский район POLYGON ((35.89856 53.85018, 35.90015 53.84679... 1213.853873
2 Богородицкий район POLYGON ((37.86240 53.73471, 37.86404 53.72565... 1074.637098
3 Веневский район POLYGON ((37.86087 54.34286, 37.86265 54.34249... 1740.825543
4 Воловский район POLYGON ((37.73668 53.45977, 37.74516 53.45518... 1042.672048

Density of the roads (km/km^2)

[8]:
get_road_density(graph,districts_polygons).head()
[8]:
name geometry density
0 Арсеньевский район POLYGON ((36.27046 53.67571, 36.27343 53.67505... 0.734961
1 Белевский район POLYGON ((35.89856 53.85018, 35.90015 53.84679... 1.022120
2 Богородицкий район POLYGON ((37.86240 53.73471, 37.86404 53.72565... 1.120421
3 Веневский район POLYGON ((37.86087 54.34286, 37.86265 54.34249... 1.070224
4 Воловский район POLYGON ((37.73668 53.45977, 37.74516 53.45518... 0.971176

Length of roads for each reg status

[9]:
get_reg_length(graph,districts_polygons).head()
[9]:
name geometry length_reg_1 length_reg_2 length_reg_3
0 Арсеньевский район POLYGON ((36.27046 53.67571, 36.27343 53.67505... 0.000000 284.744026 500.776108
1 Белевский район POLYGON ((35.89856 53.85018, 35.90015 53.84679... 107.710276 170.099209 936.044388
2 Богородицкий район POLYGON ((37.86240 53.73471, 37.86404 53.72565... 78.487690 303.526233 692.623175
3 Веневский район POLYGON ((37.86087 54.34286, 37.86265 54.34249... 231.395153 262.418172 1247.012218
4 Воловский район POLYGON ((37.73668 53.45977, 37.74516 53.45518... 56.924065 206.902682 778.845301

Drive connectivity

[10]:
get_connectivity(settlement_points=settlement_points,
                       area_polygons=districts_polygons,
                       local_crs=local_crs,
                       graph=graph).head()
[10]:
name geometry connectivity
0 Арсеньевский район POLYGON ((36.27046 53.67571, 36.27343 53.67505... 127.1600
1 Белевский район POLYGON ((35.89856 53.85018, 35.90015 53.84679... 152.1800
2 Богородицкий район POLYGON ((37.86240 53.73471, 37.86404 53.72565... 99.6300
3 Веневский район POLYGON ((37.86087 54.34286, 37.86265 54.34249... 105.5100
4 Воловский район POLYGON ((37.73668 53.45977, 37.74516 53.45518... 104.6825

Public transport connectivity

public transport graph can be obtained using iduedu.get_all_public_transport_graph

[11]:
with open("pt_graph.pkl", "rb") as f:
    pt_graph = pickle.load(f)

get_connectivity(settlement_points=settlement_points,
                       area_polygons=districts_polygons,
                       local_crs=local_crs,
                       graph=pt_graph).head()
[11]:
name geometry connectivity
0 Арсеньевский район POLYGON ((36.27046 53.67571, 36.27343 53.67505... 1366.7475
1 Белевский район POLYGON ((35.89856 53.85018, 35.90015 53.84679... 1616.1100
2 Богородицкий район POLYGON ((37.86240 53.73471, 37.86404 53.72565... 876.5050
3 Веневский район POLYGON ((37.86087 54.34286, 37.86265 54.34249... 1082.1400
4 Воловский район POLYGON ((37.73668 53.45977, 37.74516 53.45518... 1092.9375

Number of the services inside each area polygon.

[8]:
fuel_stations = gpd.read_file(f'/Users/polina/Desktop/github/transport_frames/data/Тульская_область/Копия fuel.geojson')

get_service_count(districts_polygons,service=fuel_stations).head()
[8]:
name geometry service_number
0 Арсеньевский район POLYGON ((36.27046 53.67571, 36.27343 53.67505... 1
1 Белевский район POLYGON ((35.89856 53.85018, 35.90015 53.84679... 3
2 Богородицкий район POLYGON ((37.86240 53.73471, 37.86404 53.72565... 13
3 Веневский район POLYGON ((37.86087 54.34286, 37.86265 54.34249... 26
4 Воловский район POLYGON ((37.73668 53.45977, 37.74516 53.45518... 6

Accessibility (min) of the services inside each area polygon. If the service is found inside the area, the accessibility equals to zero.

Based on shortest path in the graph

[13]:
get_service_accessibility(settlement_points, graph, districts_polygons,
                            service=fuel_stations).head()
[13]:
name geometry service_accessibility
0 Арсеньевский район POLYGON ((36.27046 53.67571, 36.27343 53.67505... 136.750
1 Белевский район POLYGON ((35.89856 53.85018, 35.90015 53.84679... 159.375
2 Богородицкий район POLYGON ((37.86240 53.73471, 37.86404 53.72565... 76.625
3 Веневский район POLYGON ((37.86087 54.34286, 37.86265 54.34249... 69.000
4 Воловский район POLYGON ((37.73668 53.45977, 37.74516 53.45518... 89.875

Railway road length

[14]:
railway_roads = gpd.read_file(f'/Users/polina/Desktop/github/transport_frames/data/Тульская_область/railway.geojson')

get_railway_length(railway_roads,districts_polygons,local_crs).head()
[14]:
name geometry railway_length_km
0 Арсеньевский район POLYGON ((36.27046 53.67571, 36.27343 53.67505... 0.000000
1 Белевский район POLYGON ((35.89856 53.85018, 35.90015 53.84679... 20.839681
2 Богородицкий район POLYGON ((37.86240 53.73471, 37.86404 53.72565... 83.893379
3 Веневский район POLYGON ((37.86087 54.34286, 37.86265 54.34249... 128.610032
4 Воловский район POLYGON ((37.73668 53.45977, 37.74516 53.45518... 82.777041

Number of bus routes intersecting the polygons

[15]:
bus_routes = gpd.read_file('bus_routes.geojson')

get_bus_routes_num(districts_polygons,bus_edges=bus_routes).head()
[15]:
name geometry bus_routes_count
0 Арсеньевский район POLYGON ((36.27046 53.67571, 36.27343 53.67505... 0
1 Белевский район POLYGON ((35.89856 53.85018, 35.90015 53.84679... 0
2 Богородицкий район POLYGON ((37.86240 53.73471, 37.86404 53.72565... 1
3 Веневский район POLYGON ((37.86087 54.34286, 37.86265 54.34249... 0
4 Воловский район POLYGON ((37.73668 53.45977, 37.74516 53.45518... 0

Territory indicators

[16]:
terr = gpd.read_file('territory.geojson')
terr.plot()
[16]:
<Axes: >
../_images/examples_2_indicators_32_1.png

Number of the services inside territory polygon

[24]:
get_terr_service_count(terr,
                            service=fuel_stations,
                            local_crs=local_crs).head()
[24]:
name geometry service_number
0 Донской POLYGON ((38.19874 53.93203, 38.19961 53.93585... 14

Accessibility (min) of the services inside territory polygon. If the service is found inside the area, the accessibility equals to zero.

Based on shortest path in the graph

[25]:
get_terr_service_accessibility(graph=graph,
                                     territory_polygon=terr,
                                     service=fuel_stations)
[25]:
name geometry service_accessibility
0 Донской POLYGON ((38.19874 53.93203, 38.19961 53.93585... 0.0

Density of the roads inside territory polygon (km/km^2)

[19]:
get_road_density(graph, terr)
[19]:
name geometry density
0 Донской POLYGON ((38.24402 53.92843, 38.24521 53.92841... 6.920093

Distance from center of the polygon to the administrative center of the region

[20]:
get_terr_distance_to_region_admin_center(capital, terr, graph)
[20]:
name geometry distance_to_admin_center
0 Донской POLYGON ((38.19874 53.93203, 38.19961 53.93585... 62.653

Distance (linear) to nature objects (water objects/ nature reserves)

[21]:
water = gpd.read_file(f'/Users/polina/Desktop/github/transport_frames/data/Тульская_область/Копия water.geojson')

get_terr_nature_distance(terr, water, local_crs)
[21]:
name geometry number_of_objects objects_accessibility
0 Донской POLYGON ((38.24402 53.92843, 38.24521 53.92841... 31 0.0

Shortest distance to nearest district and settlement points, which are laying in intersecting districts

[22]:
get_terr_nearest_centers(terr, graph, districts_polygons,
                               settlement_points,local_crs)
[22]:
name geometry to_nearest_center_km
0 Донской POLYGON ((38.24402 53.92843, 38.24521 53.92841... 2.242

Number of bus routes intersecting the territory

[23]:
get_bus_routes_num(terr, bus_edges=bus_routes).head()
[23]:
name geometry bus_routes_count
0 Донской POLYGON ((38.24402 53.92843, 38.24521 53.92841... 1

Railway road length

[24]:
get_railway_length(railway_roads,terr,local_crs).head()
[24]:
name geometry railway_length_km
0 Донской POLYGON ((38.24402 53.92843, 38.24521 53.92841... 41.102397