EJERCICIO 1
In [5]:
!pip install geopandas
Requirement already satisfied: geopandas in /usr/local/lib/python3.11/dist-packages (1.0.1) Requirement already satisfied: numpy>=1.22 in /usr/local/lib/python3.11/dist-packages (from geopandas) (2.0.2) Requirement already satisfied: pyogrio>=0.7.2 in /usr/local/lib/python3.11/dist-packages (from geopandas) (0.11.0) Requirement already satisfied: packaging in /usr/local/lib/python3.11/dist-packages (from geopandas) (24.2) Requirement already satisfied: pandas>=1.4.0 in /usr/local/lib/python3.11/dist-packages (from geopandas) (2.2.2) Requirement already satisfied: pyproj>=3.3.0 in /usr/local/lib/python3.11/dist-packages (from geopandas) (3.7.1) Requirement already satisfied: shapely>=2.0.0 in /usr/local/lib/python3.11/dist-packages (from geopandas) (2.1.1) Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.11/dist-packages (from pandas>=1.4.0->geopandas) (2.9.0.post0) Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.11/dist-packages (from pandas>=1.4.0->geopandas) (2025.2) Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.11/dist-packages (from pandas>=1.4.0->geopandas) (2025.2) Requirement already satisfied: certifi in /usr/local/lib/python3.11/dist-packages (from pyogrio>=0.7.2->geopandas) (2025.6.15) Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.11/dist-packages (from python-dateutil>=2.8.2->pandas>=1.4.0->geopandas) (1.17.0)
In [6]:
!pip install fiona
Collecting fiona Downloading fiona-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (56 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.6/56.6 kB 2.1 MB/s eta 0:00:00 Requirement already satisfied: attrs>=19.2.0 in /usr/local/lib/python3.11/dist-packages (from fiona) (25.3.0) Requirement already satisfied: certifi in /usr/local/lib/python3.11/dist-packages (from fiona) (2025.6.15) Requirement already satisfied: click~=8.0 in /usr/local/lib/python3.11/dist-packages (from fiona) (8.2.1) Collecting click-plugins>=1.0 (from fiona) Downloading click_plugins-1.1.1.2-py2.py3-none-any.whl.metadata (6.5 kB) Collecting cligj>=0.5 (from fiona) Downloading cligj-0.7.2-py3-none-any.whl.metadata (5.0 kB) Downloading fiona-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.3 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 17.3/17.3 MB 81.1 MB/s eta 0:00:00 Downloading click_plugins-1.1.1.2-py2.py3-none-any.whl (11 kB) Downloading cligj-0.7.2-py3-none-any.whl (7.1 kB) Installing collected packages: cligj, click-plugins, fiona Successfully installed click-plugins-1.1.1.2 cligj-0.7.2 fiona-1.10.1
In [7]:
import geopandas as gpd
from fiona import listlayers
countries=gpd.read_file("https://github.com/AdriMA3/introgeodf/raw/refs/heads/main/maps/World_Countries/World_Countries.shp")
#ferrovias=gpd.read_file("https://github.com/AdriMA3/introgeodf/raw/refs/heads/main/maps/Red_Ferroviaria/Red_ferroviaria.shp")
In [8]:
chile=countries[countries.COUNTRY=="Chile"]
chile_5361=chile.to_crs(5361)
In [9]:
airports=gpd.read_file("https://github.com/AdriMA3/introgeodf/raw/refs/heads/main/data/chile-airports.csv")
In [10]:
airports=gpd.GeoDataFrame(data=airports.copy(),
geometry=gpd.points_from_xy(airports.longitude_deg,
airports.latitude_deg),
crs=chile.crs.to_epsg())
airports_5361=airports.to_crs(5361)
In [11]:
import pandas as pd
portsFileLink="https://github.com/CienciaDeDatosEspacial/GeoDataFrame_Analytics/raw/main/data/UpdatedPub150.csv"
infoseaports=pd.read_csv(portsFileLink)
#columns available (so many)
infoseaports.columns.to_list()
Out[11]:
['World Port Index Number', 'Region Name', 'Main Port Name', 'Alternate Port Name', 'UN/LOCODE', 'Country Code', 'World Water Body', 'IHO S-130 Sea Area', 'Sailing Direction or Publication', 'Publication Link', 'Standard Nautical Chart', 'IHO S-57 Electronic Navigational Chart', 'IHO S-101 Electronic Navigational Chart', 'Digital Nautical Chart', 'Tidal Range (m)', 'Entrance Width (m)', 'Channel Depth (m)', 'Anchorage Depth (m)', 'Cargo Pier Depth (m)', 'Oil Terminal Depth (m)', 'Liquified Natural Gas Terminal Depth (m)', 'Maximum Vessel Length (m)', 'Maximum Vessel Beam (m)', 'Maximum Vessel Draft (m)', 'Offshore Maximum Vessel Length (m)', 'Offshore Maximum Vessel Beam (m)', 'Offshore Maximum Vessel Draft (m)', 'Harbor Size', 'Harbor Type', 'Harbor Use', 'Shelter Afforded', 'Entrance Restriction - Tide', 'Entrance Restriction - Heavy Swell', 'Entrance Restriction - Ice', 'Entrance Restriction - Other', 'Overhead Limits', 'Underkeel Clearance Management System', 'Good Holding Ground', 'Turning Area', 'Port Security', 'Estimated Time of Arrival Message', 'Quarantine - Pratique', 'Quarantine - Sanitation', 'Quarantine - Other', 'Traffic Separation Scheme', 'Vessel Traffic Service', 'First Port of Entry', 'US Representative', 'Pilotage - Compulsory', 'Pilotage - Available', 'Pilotage - Local Assistance', 'Pilotage - Advisable', 'Tugs - Salvage', 'Tugs - Assistance', 'Communications - Telephone', 'Communications - Telefax', 'Communications - Radio', 'Communications - Radiotelephone', 'Communications - Airport', 'Communications - Rail', 'Search and Rescue', 'NAVAREA', 'Facilities - Wharves', 'Facilities - Anchorage', 'Facilities - Dangerous Cargo Anchorage', 'Facilities - Med Mooring', 'Facilities - Beach Mooring', 'Facilities - Ice Mooring', 'Facilities - Ro-Ro', 'Facilities - Solid Bulk', 'Facilities - Liquid Bulk', 'Facilities - Container', 'Facilities - Breakbulk', 'Facilities - Oil Terminal', 'Facilities - LNG Terminal', 'Facilities - Other', 'Medical Facilities', 'Garbage Disposal', 'Chemical Holding Tank Disposal', 'Degaussing', 'Dirty Ballast Disposal', 'Cranes - Fixed', 'Cranes - Mobile', 'Cranes - Floating', 'Cranes - Container', 'Lifts - 100+ Tons', 'Lifts - 50-100 Tons', 'Lifts - 25-49 Tons', 'Lifts - 0-24 Tons', 'Services - Longshoremen', 'Services - Electricity', 'Services - Steam', 'Services - Navigation Equipment', 'Services - Electrical Repair', 'Services - Ice Breaking', 'Services - Diving', 'Supplies - Provisions', 'Supplies - Potable Water', 'Supplies - Fuel Oil', 'Supplies - Diesel Oil', 'Supplies - Aviation Fuel', 'Supplies - Deck', 'Supplies - Engine', 'Repairs', 'Dry Dock', 'Railway', 'Latitude', 'Longitude']
In [14]:
#rename
infoseaports.rename(columns={'Main Port Name':'portName'},inplace=True)
#keep few columns
infoseaports=infoseaports.loc[:,['portName', 'Country Code','Latitude', 'Longitude']]
# we have now
infoseaports.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 3739 entries, 0 to 3738 Data columns (total 4 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 portName 3739 non-null object 1 Country Code 3739 non-null object 2 Latitude 3739 non-null float64 3 Longitude 3739 non-null float64 dtypes: float64(2), object(2) memory usage: 117.0+ KB
In [15]:
#spatial points (unprojected)
seaports=gpd.GeoDataFrame(data=infoseaports.copy(),
geometry=gpd.points_from_xy(infoseaports.Longitude,
infoseaports.Latitude),
crs=4326)# notice it is unprojected
# keep Brazil
seaports_chi=seaports[seaports['Country Code']=='Chile'].copy()
# reset indexes
seaports_chi.reset_index(drop=True, inplace=True)
# reprojecting
seaports_chi_5361=seaports_chi.to_crs(5361) # projected crs
In [16]:
# subsetting
mediumAirports=airports[airports['type']=='medium_airport'] #can't use "airports.type"
mediumAirports.reset_index(drop=True, inplace=True)
mediumAirports.head()
Out[16]:
id | ident | type | name | latitude_deg | longitude_deg | elevation_ft | continent | country_name | iso_country | ... | gps_code | icao_code | iata_code | local_code | home_link | wikipedia_link | keywords | score | last_updated | geometry | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 6009 | SCCI | medium_airport | President Carlos Ibañez del Campo Internationa... | -53.002602 | -70.854599 | 139 | SA | Chile | CL | ... | SCCI | SCCI | PUQ | https://en.wikipedia.org/wiki/Carlos_Ibanez_De... | 750 | 2021-12-22T15:07:05+00:00 | POINT (-70.8546 -53.0026) | |||
1 | 6043 | SCTE | medium_airport | El Tepual Airport | -41.438899993896484 | -73.09400177001953 | 294 | SA | Chile | CL | ... | SCTE | SCTE | PMC | https://en.wikipedia.org/wiki/El_Tepual_Airport | 750 | 2008-07-12T07:26:32+00:00 | POINT (-73.094 -41.4389) | |||
2 | 6026 | SCIP | medium_airport | Mataveri Airport | -27.1648006439 | -109.42199707 | 227 | SA | Chile | CL | ... | SCIP | SCIP | IPC | https://en.wikipedia.org/wiki/Mataveri_Interna... | Rapa Nui, Easter Island | 750 | 2011-10-28T10:05:26+00:00 | POINT (-109.422 -27.1648) | ||
3 | 6007 | SCCF | medium_airport | El Loa Airport | -22.498199 | -68.903603 | 7543 | SA | Chile | CL | ... | SCCF | SCCF | CJC | https://en.wikipedia.org/wiki/El_Loa_Airport | 750 | 2024-04-29T19:45:32+00:00 | POINT (-68.9036 -22.4982) | |||
4 | 6018 | SCFA | medium_airport | Andrés Sabella Gálvez International Airport | -23.444501 | -70.445099 | 455 | SA | Chile | CL | ... | SCFA | SCFA | ANF | https://en.wikipedia.org/wiki/Andr%C3%A9s_Sabe... | Cerro Moreno Airport | 750 | 2019-02-15T15:15:06+00:00 | POINT (-70.4451 -23.4445) |
5 rows × 25 columns
In [17]:
# Reproyectar ambos GeoDataFrames a CRS proyectado para Chile
seaports_chi_5361 = seaports_chi.to_crs(epsg=5361)
mediumAirports_5361 = mediumAirports.to_crs(epsg=5361)
In [18]:
# Crear matriz de distancias (km) con índices organizados
distanceMatrixKM = seaports_chi_5361.set_index('portName').geometry.apply(
lambda g: mediumAirports_5361.set_index('name').geometry.distance(g) / 1000
)
# Ordenar por índices para que se vea ordenado
distanceMatrixKM = distanceMatrixKM.sort_index(axis=0).sort_index(axis=1)
# Mostrar parte de la matriz
distanceMatrixKM.head()
Out[18]:
name | Andrés Sabella Gálvez International Airport | Balmaceda Airport | Barriles Airport | Captain Fuentes Martinez Airport | Carriel Sur Airport | Cañal Bajo Carlos Hott Siebert Airport | Chacalluta Airport | Chañaral Airport | Chile Chico Airport | Cochrane Airport | ... | Mataveri Airport | Nuevo Chaitén Airport | Panguilemo Airport | Pichoy Airport | President Carlos Ibañez del Campo International Airport | Ricardo García Posada Airport | Teniente Vidal Airport | Vallenar Airport | Victoria Airport | Viña del Mar Airport |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
portName | |||||||||||||||||||||
Antofagasta | 22.940637 | 2472.864745 | 170.961872 | 3285.596330 | 1477.370401 | 1897.808345 | 586.939017 | 297.737139 | 2546.887085 | 2625.362563 | ... | 4213.139786 | 2134.261522 | 1305.090964 | 1792.593794 | 3258.036259 | 301.950756 | 2439.421551 | 549.012137 | 1628.965043 | 1035.910135 |
Bahia Agua Fresca | 3323.291208 | 832.129552 | 3467.953403 | 45.485040 | 1853.910946 | 1429.114399 | 3887.468225 | 3003.357477 | 758.093206 | 692.682429 | ... | 4601.174929 | 1187.154111 | 2001.452201 | 1535.633295 | 43.019862 | 3006.846332 | 870.228448 | 2752.489579 | 1686.170806 | 2270.533143 |
Bahia De Valdivia | 1833.539735 | 691.687551 | 1981.761205 | 1512.472356 | 336.845978 | 91.604626 | 2395.295895 | 1514.434726 | 764.655835 | 829.431954 | ... | 3888.592172 | 333.329655 | 512.292563 | 21.816091 | 1479.466825 | 1531.082734 | 650.913648 | 1264.368041 | 189.571032 | 777.107154 |
Bahia De Valparaiso | 1068.946150 | 1430.651373 | 1216.684847 | 2248.722965 | 435.704955 | 851.304473 | 1632.011796 | 749.240496 | 1504.811883 | 1580.688617 | ... | 3955.007034 | 1087.922271 | 260.147625 | 746.470033 | 2219.386102 | 766.305626 | 1395.631570 | 498.816608 | 582.382233 | 15.902885 |
Bahia Harris | 3374.743679 | 886.830961 | 3519.008142 | 66.910109 | 1909.247021 | 1485.162268 | 3938.813770 | 3054.994445 | 812.998363 | 750.297332 | ... | 4656.461753 | 1243.387734 | 2054.599389 | 1591.509722 | 98.045533 | 3057.503553 | 925.876234 | 2804.315216 | 1740.697091 | 2323.383383 |
5 rows × 32 columns
In [19]:
distanceMatrixKM_sea_air = (
seaports_chi_5361.set_index('portName').geometry.apply(
lambda g: mediumAirports_5361.set_index('name').geometry.distance(g) / 1000
)
).sort_index(axis=0).sort_index(axis=1)
In [20]:
port_point=seaports_chi_5361[seaports_chi_5361['portName']== "Bahia Harris"]
closest_point1=mediumAirports[mediumAirports['name']=='President Carlos Ibañez del Campo International Airport']
closest_point2=mediumAirports[mediumAirports['name']=='Captain Fuentes Martinez Airport']
In [21]:
# Reproyectar puntos individuales
port_point_proj = port_point.to_crs(epsg=5361)
closest_point1_proj = closest_point1.to_crs(epsg=5361)
closest_point2_proj = closest_point2.to_crs(epsg=5361)
In [22]:
base=chile_5361.plot(facecolor='white',
edgecolor='black',
linewidth=0.1,
figsize=(6,6))
port_point.plot(facecolor='green',linewidth=0,marker="^",
ax=base,markersize=30,zorder=5)
closest_point1_proj.plot(facecolor='blue',linewidth=0,
ax=base,markersize=20,zorder=5)
closest_point2_proj.plot(facecolor='red',linewidth=0,
ax=base,markersize=20,zorder=5)
Out[22]:
<Axes: >
Ejercicio 2
In [23]:
import geopandas as gpd
from fiona import listlayers
hidrografia=gpd.read_file("https://github.com/AdriMA3/Tarea2G/raw/refs/heads/main/maps/Red_Hidrografica/Red_Hidrografica.shp")
In [24]:
#asignaremos un crs conocido para luego poroyectar
# Asegurar que ambos estén en el mismo CRS antes del clip
hidrografia_aligned = hidrografia.to_crs(chile.crs)
# Realizar el clip
hidrografiaChile_clipped = gpd.clip(hidrografia_aligned, chile)
# Luego proyectar al CRS deseado (por ejemplo EPSG:5361)
hidrografia_chile_5361 = hidrografiaChile_clipped.to_crs(5361)
In [25]:
hidrografia_chile_5361.head()
Out[25]:
objectid | fid_drenes | cod_comuna | shape_leng | st_length_ | Nombre | Dren_Tipo | Region | Provincia | Comuna | geometry | |
---|---|---|---|---|---|---|---|---|---|---|---|
4243 | 4286 | 31936 | 1240 | 9673.323324 | 15831.851676 | Río Volcan | Río | Región de Magallanes y Antártica Chilena | Ultima Esperanza | Natales | LINESTRING (189727.27 4184887.299, 189760.717 ... |
4242 | 4285 | 31936 | 1240 | 0.002220 | 0.003612 | Río Volcan | Río | Región de Magallanes y Antártica Chilena | Ultima Esperanza | Natales | LINESTRING (189727.268 4184887.298, 189727.27 ... |
3106 | 3149 | 68837 | 1130 | 2246.652440 | 3381.047573 | None | Quebrada | Región de Aysén del Gral.Ibañez del Campo | Capitán Prat | Tortel | LINESTRING (152514.392 4626409.814, 152571.086... |
3093 | 3136 | 68799 | 1130 | 1505.446980 | 2266.294719 | None | Quebrada | Región de Aysén del Gral.Ibañez del Campo | Capitán Prat | Tortel | LINESTRING (152514.392 4626409.814, 152497.027... |
2941 | 2968 | 68685 | 1130 | 1163.005615 | 1750.726277 | None | Quebrada | Región de Aysén del Gral.Ibañez del Campo | Capitán Prat | Tortel | LINESTRING (151852.068 4627342.785, 151871.722... |
In [26]:
# Seleccionar el río
single_line = hidrografia_chile_5361[hidrografia_chile_5361['Nombre'] == 'Río Volcan']
# Calcular distancias en km del río a todos los aeropuertos medianos
distanceMatrixKM_hidro = (
single_line.set_index('Nombre').geometry.apply(
lambda g: mediumAirports_5361.set_index('name').geometry.distance(g) / 1000
)
).sort_index(axis=0)
# Mostrar resultado
distanceMatrixKM_hidro
Out[26]:
name | President Carlos Ibañez del Campo International Airport | El Tepual Airport | Mataveri Airport | El Loa Airport | Andrés Sabella Gálvez International Airport | Diego Aracena Airport | Balmaceda Airport | La Florida Airport | Desierto de Atacama Airport | Chacalluta Airport | ... | Viña del Mar Airport | Chañaral Airport | Chile Chico Airport | Captain Fuentes Martinez Airport | Panguilemo Airport | Las Breas Airport | Vallenar Airport | Nuevo Chaitén Airport | Barriles Airport | Victoria Airport |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Nombre | |||||||||||||||||||||
Río Volcan | 191.041139 | 1219.950585 | 4395.029503 | 3342.303390 | 3225.716669 | 3548.854965 | 733.603823 | 2505.494207 | 2801.685469 | 3789.602662 | ... | 2168.110341 | 2905.439258 | 660.640989 | 234.511907 | 1898.503935 | 2991.855506 | 2654.163181 | 1071.381411 | 3372.193828 | 1576.836478 |
Río Volcan | 194.981921 | 1219.950585 | 4395.029501 | 3342.508387 | 3225.748145 | 3548.895438 | 733.965003 | 2505.494207 | 2801.706883 | 3789.612040 | ... | 2168.110341 | 2905.474895 | 661.075725 | 238.390204 | 1898.503935 | 2991.913871 | 2654.200975 | 1071.381411 | 3372.260089 | 1576.836478 |
Río Volcan | 187.499808 | 1220.299335 | 4400.639220 | 3341.896185 | 3225.489617 | 3548.618136 | 733.051097 | 2505.326628 | 2801.469589 | 3789.397850 | ... | 2167.966803 | 2905.208412 | 660.014422 | 231.064002 | 1898.341339 | 2991.600911 | 2653.930596 | 1071.558047 | 3371.930458 | 1576.895195 |
Río Volcan | 189.071192 | 1220.315269 | 4398.739622 | 3342.267597 | 3225.731013 | 3548.866636 | 733.524022 | 2505.533934 | 2801.702844 | 3789.623259 | ... | 2168.164823 | 2905.452494 | 660.539305 | 232.567191 | 1898.545913 | 2991.862155 | 2654.175882 | 1071.635387 | 3372.198096 | 1577.017498 |
Río Volcan | 186.520260 | 1219.215611 | 4402.013832 | 3340.629100 | 3224.285359 | 3547.410304 | 731.738642 | 2504.139479 | 2800.269478 | 3788.201329 | ... | 2166.784457 | 2904.002936 | 658.678104 | 230.179542 | 1897.155933 | 2990.386993 | 2652.724626 | 1070.439713 | 3370.713303 | 1575.751446 |
Río Volcan | 2118.034101 | 875.867850 | 4106.602797 | 1269.480266 | 1161.306169 | 1482.597729 | 1336.993190 | 458.142005 | 741.652933 | 1724.874910 | ... | 175.271130 | 842.739640 | 1410.609785 | 2144.911981 | 217.239722 | 926.445525 | 594.336724 | 1012.099330 | 1304.709991 | 522.531145 |
Río Volcan | 2121.016784 | 878.689617 | 4106.530687 | 1267.852392 | 1159.696159 | 1480.981734 | 1339.954974 | 456.623438 | 740.062534 | 1723.260476 | ... | 174.438190 | 841.138715 | 1413.574103 | 2147.897360 | 219.380281 | 924.836044 | 592.754061 | 1014.981912 | 1303.092555 | 525.233684 |
Río Volcan | 2122.639069 | 880.289196 | 4106.348454 | 1265.930458 | 1157.719653 | 1479.014031 | 1341.583070 | 454.629497 | 738.070597 | 1721.290154 | ... | 172.964928 | 839.153280 | 1415.202019 | 2149.517019 | 220.706763 | 922.858899 | 590.759036 | 1016.598540 | 1301.127534 | 526.792787 |
Río Volcan | 2124.592399 | 882.055885 | 4105.862021 | 1262.581684 | 1154.428830 | 1475.706406 | 1343.500913 | 451.564994 | 734.831294 | 1717.986988 | ... | 171.331036 | 835.886805 | 1417.123488 | 2151.477334 | 221.929637 | 919.569545 | 587.539383 | 1018.424833 | 1297.815713 | 528.453140 |
Río Volcan | 2130.863314 | 886.224551 | 4099.450065 | 1258.030002 | 1149.425218 | 1470.791680 | 1349.258843 | 445.974069 | 729.624611 | 1713.046353 | ... | 163.593613 | 830.777633 | 1422.928672 | 2157.867800 | 222.413853 | 914.559725 | 582.272514 | 1023.153084 | 1292.926756 | 531.758771 |
Río Volcan | 2131.126431 | 885.037364 | 4092.561981 | 1259.569197 | 1149.574345 | 1471.218019 | 1349.142707 | 443.829880 | 729.092553 | 1713.381638 | ... | 157.380456 | 830.588299 | 1422.846057 | 2158.224728 | 219.081952 | 914.704871 | 581.535840 | 1022.324585 | 1293.442564 | 530.069665 |
Río Volcan | 2131.843189 | 885.195533 | 4091.607886 | 1259.650908 | 1149.550295 | 1471.214590 | 1349.740602 | 443.630600 | 729.018076 | 1713.370661 | ... | 156.587352 | 830.539595 | 1423.455288 | 2158.966412 | 218.551208 | 914.681599 | 581.447185 | 1022.638192 | 1293.446548 | 530.001765 |
Río Volcan | 2131.918691 | 884.931729 | 4090.437630 | 1259.708935 | 1149.496891 | 1471.184749 | 1349.733552 | 443.305036 | 728.891047 | 1713.332050 | ... | 155.622737 | 830.455900 | 1423.457678 | 2159.056726 | 217.896657 | 914.629284 | 581.296717 | 1022.455378 | 1293.425324 | 529.636400 |
Río Volcan | 2131.957949 | 884.724261 | 4088.836305 | 1259.681572 | 1149.200773 | 1470.938136 | 1349.735271 | 442.683486 | 728.490679 | 1713.066483 | ... | 154.193904 | 830.103514 | 1423.459632 | 2159.115860 | 217.157822 | 914.336169 | 580.871093 | 1022.318193 | 1293.197343 | 529.313884 |
Río Volcan | 2132.142538 | 884.143816 | 4085.317592 | 1259.484542 | 1148.541720 | 1470.362019 | 1349.672733 | 441.343167 | 727.630608 | 1712.456954 | ... | 151.072746 | 829.347584 | 1423.418502 | 2159.363431 | 215.561947 | 913.684432 | 579.958427 | 1021.913358 | 1292.654078 | 528.519620 |
Río Volcan | 2127.919034 | 885.381201 | 4103.650233 | 1258.042684 | 1149.456415 | 1470.817985 | 1346.851269 | 446.044534 | 729.667754 | 1713.074108 | ... | 166.019605 | 830.814869 | 1420.472405 | 2154.795771 | 224.780218 | 914.591213 | 582.319407 | 1021.773706 | 1292.951633 | 531.713742 |
Río Volcan | 2130.616935 | 885.046959 | 4095.851860 | 1260.644823 | 1151.086541 | 1472.647049 | 1348.767355 | 445.963328 | 730.802699 | 1714.840063 | ... | 160.799748 | 832.199442 | 1422.459007 | 2157.677296 | 220.041976 | 916.215525 | 583.298822 | 1022.203515 | 1294.842612 | 530.263619 |
Río Volcan | 2130.464575 | 885.020108 | 4096.167448 | 1260.313958 | 1150.877433 | 1472.413605 | 1348.645315 | 445.991848 | 730.655619 | 1714.614840 | ... | 161.057390 | 832.020039 | 1422.334078 | 2157.522361 | 220.192320 | 916.006427 | 583.173286 | 1022.144217 | 1294.601107 | 530.283090 |
Río Volcan | 2130.632953 | 885.564930 | 4097.780930 | 1260.159035 | 1150.935552 | 1472.431551 | 1348.913782 | 446.359115 | 730.811256 | 1714.646068 | ... | 162.362336 | 832.127046 | 1422.593734 | 2157.665842 | 221.218129 | 916.065004 | 583.356913 | 1022.597500 | 1294.606001 | 530.954527 |
Río Volcan | 2130.517518 | 884.807542 | 4094.320787 | 1260.119712 | 1150.368524 | 1471.965955 | 1348.628971 | 444.954481 | 729.990497 | 1714.146137 | ... | 159.179336 | 831.434334 | 1422.323847 | 2157.591374 | 219.623546 | 915.497886 | 582.462551 | 1021.997385 | 1294.174173 | 529.978802 |
20 rows × 32 columns
In [32]:
!pip install folium matplotlib mapclassify
Requirement already satisfied: folium in /usr/local/lib/python3.11/dist-packages (0.19.7) Requirement already satisfied: matplotlib in /usr/local/lib/python3.11/dist-packages (3.10.0) Collecting mapclassify Downloading mapclassify-2.9.0-py3-none-any.whl.metadata (3.1 kB) Requirement already satisfied: branca>=0.6.0 in /usr/local/lib/python3.11/dist-packages (from folium) (0.8.1) Requirement already satisfied: jinja2>=2.9 in /usr/local/lib/python3.11/dist-packages (from folium) (3.1.6) Requirement already satisfied: numpy in /usr/local/lib/python3.11/dist-packages (from folium) (2.0.2) Requirement already satisfied: requests in /usr/local/lib/python3.11/dist-packages (from folium) (2.32.3) Requirement already satisfied: xyzservices in /usr/local/lib/python3.11/dist-packages (from folium) (2025.4.0) Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (1.3.2) Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (0.12.1) Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (4.58.4) Requirement already satisfied: kiwisolver>=1.3.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (1.4.8) Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (24.2) Requirement already satisfied: pillow>=8 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (11.2.1) Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (3.2.3) Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (2.9.0.post0) Requirement already satisfied: networkx>=3.2 in /usr/local/lib/python3.11/dist-packages (from mapclassify) (3.5) Requirement already satisfied: pandas>=2.1 in /usr/local/lib/python3.11/dist-packages (from mapclassify) (2.2.2) Requirement already satisfied: scikit-learn>=1.4 in /usr/local/lib/python3.11/dist-packages (from mapclassify) (1.6.1) Requirement already satisfied: scipy>=1.12 in /usr/local/lib/python3.11/dist-packages (from mapclassify) (1.15.3) Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from jinja2>=2.9->folium) (3.0.2) Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.11/dist-packages (from pandas>=2.1->mapclassify) (2025.2) Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.11/dist-packages (from pandas>=2.1->mapclassify) (2025.2) Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.11/dist-packages (from python-dateutil>=2.7->matplotlib) (1.17.0) Requirement already satisfied: joblib>=1.2.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn>=1.4->mapclassify) (1.5.1) Requirement already satisfied: threadpoolctl>=3.1.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn>=1.4->mapclassify) (3.6.0) Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests->folium) (3.4.2) Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests->folium) (3.10) Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.11/dist-packages (from requests->folium) (2.4.0) Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/dist-packages (from requests->folium) (2025.6.15) Downloading mapclassify-2.9.0-py3-none-any.whl (286 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 286.7/286.7 kB 4.1 MB/s eta 0:00:00 Installing collected packages: mapclassify Successfully installed mapclassify-2.9.0
In [28]:
closest_airports=mediumAirports_5361[mediumAirports_5361['name']=='President Carlos Ibañez del Campo International Airport']
farthest_airports=mediumAirports_5361[mediumAirports_5361['name']=='Andrés Sabella Gálvez International Airport']
In [29]:
farthest_airport = mediumAirports[mediumAirports['name'] =='Andrés Sabella Gálvez International Airport']
farthest_airport_5361 = farthest_airport.to_crs(epsg=5361)
In [33]:
# Mapa interactivo del río
m = single_line.explore(color='black', tooltip='Nombre') # ¡Usa 'Nombre' con mayúscula!
# Agregar puertos con sus nombres también
closest_airports.explore(m=m, color='red', marker_kwds=dict(radius=5), tooltip='name')
farthest_airport_5361.explore(m=m, color='green', marker_kwds=dict(radius=5), tooltip='name')
Out[33]:
Make this Notebook Trusted to load map: File -> Trust Notebook
ejercicio 3
In [34]:
hidrografia_chile_5361.head()
Out[34]:
objectid | fid_drenes | cod_comuna | shape_leng | st_length_ | Nombre | Dren_Tipo | Region | Provincia | Comuna | geometry | |
---|---|---|---|---|---|---|---|---|---|---|---|
4243 | 4286 | 31936 | 1240 | 9673.323324 | 15831.851676 | Río Volcan | Río | Región de Magallanes y Antártica Chilena | Ultima Esperanza | Natales | LINESTRING (189727.27 4184887.299, 189760.717 ... |
4242 | 4285 | 31936 | 1240 | 0.002220 | 0.003612 | Río Volcan | Río | Región de Magallanes y Antártica Chilena | Ultima Esperanza | Natales | LINESTRING (189727.268 4184887.298, 189727.27 ... |
3106 | 3149 | 68837 | 1130 | 2246.652440 | 3381.047573 | None | Quebrada | Región de Aysén del Gral.Ibañez del Campo | Capitán Prat | Tortel | LINESTRING (152514.392 4626409.814, 152571.086... |
3093 | 3136 | 68799 | 1130 | 1505.446980 | 2266.294719 | None | Quebrada | Región de Aysén del Gral.Ibañez del Campo | Capitán Prat | Tortel | LINESTRING (152514.392 4626409.814, 152497.027... |
2941 | 2968 | 68685 | 1130 | 1163.005615 | 1750.726277 | None | Quebrada | Región de Aysén del Gral.Ibañez del Campo | Capitán Prat | Tortel | LINESTRING (151852.068 4627342.785, 151871.722... |
In [35]:
hidro_lines_by_region=hidrografia_chile_5361.dissolve(by='Region')
hidro_lines_by_region.reset_index(drop=False, inplace=True)
hidro_lines_by_region.drop(columns=['objectid','fid_drenes','cod_comuna','shape_leng','st_length_','Dren_Tipo'],inplace=True)
hidro_lines_Magallanes_Antartida=hidro_lines_by_region[hidro_lines_by_region['Region']=='Región de Magallanes y Antártica Chilena']
In [36]:
hidro_lines_Magallanes_Antartida.convex_hull
Out[36]:
0 | |
---|---|
12 | POLYGON ((581364.81 3876015.596, 563792.703 38... |
In [37]:
hidro_lines_Magallanes_Antartida.convex_hull.plot()
Out[37]:
<Axes: >
In [38]:
lines_Magallanes_hulls=hidro_lines_Magallanes_Antartida.convex_hull.to_frame()
lines_Magallanes_hulls['Region']=['Región de Magallanes y Antártica Chilena']
lines_Magallanes_hulls.rename(columns={0:'geometry'},inplace=True)
lines_Magallanes_hulls=lines_Magallanes_hulls.set_geometry('geometry')
lines_Magallanes_hulls
Out[38]:
geometry | Region | |
---|---|---|
12 | POLYGON ((581364.81 3876015.596, 563792.703 38... | Región de Magallanes y Antártica Chilena |
In [39]:
distanceMatrixKM_linesHull=lines_Magallanes_hulls.set_index('Region').geometry.apply\
(lambda g: mediumAirports_5361.set_index('name').geometry.distance(g)/1000)\
.sort_index(axis=1)
distanceMatrixKM_linesHull
Out[39]:
name | Andrés Sabella Gálvez International Airport | Balmaceda Airport | Barriles Airport | Captain Fuentes Martinez Airport | Carriel Sur Airport | Cañal Bajo Carlos Hott Siebert Airport | Chacalluta Airport | Chañaral Airport | Chile Chico Airport | Cochrane Airport | ... | Mataveri Airport | Nuevo Chaitén Airport | Panguilemo Airport | Pichoy Airport | President Carlos Ibañez del Campo International Airport | Ricardo García Posada Airport | Teniente Vidal Airport | Vallenar Airport | Victoria Airport | Viña del Mar Airport |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Region | |||||||||||||||||||||
Región de Magallanes y Antártica Chilena | 2842.207391 | 384.11785 | 2989.718127 | 0.0 | 1347.876385 | 922.774781 | 3405.07226 | 2522.319723 | 322.502245 | 222.616636 | ... | 4108.12686 | 686.003741 | 1515.179809 | 1028.924551 | 0.0 | 2534.653706 | 401.102147 | 2271.366361 | 1190.889578 | 1783.954673 |
1 rows × 32 columns
In [40]:
closest_airports_1=mediumAirports_5361[mediumAirports_5361['name']=='Captain Fuentes Martinez Airport']
closest_airports_2=mediumAirports_5361[mediumAirports_5361['name']=='President Carlos Ibañez del Campo International Airport']
farthest_airports_1=mediumAirports_5361[mediumAirports_5361['name']=='Chañaral Airport']
In [41]:
farthest_airports_1 = farthest_airports_1.to_crs(5361)
In [42]:
base=lines_Magallanes_hulls.explore()
mins=distanceMatrixKM_linesHull.idxmin(axis=1)
closest_airports_1.explore(m=base, color='red', marker_kwds=dict(radius=10))
closest_airports_2.explore(m=base, color='blue', marker_kwds=dict(radius=10))
farthest_airports_1.explore(m=base, color='green', marker_kwds=dict(radius=10))
Out[42]:
Make this Notebook Trusted to load map: File -> Trust Notebook
Ejercicio4
In [48]:
import geopandas as gpd
# URL del servicio de ArcGIS REST con capa de líneas eléctricas
url = "https://ide-energia.minenergia.cl/server/rest/services/IDE_Energia/Visor_IDE_Energ%C3%ADa/MapServer/10/query"
# Descargar todas las líneas eléctricas como GeoDataFrame
electric_lines = gpd.read_file(
f"{url}?where=1=1&outFields=*&f=geojson"
)
# Verificar carga exitosa
print(electric_lines.shape)
electric_lines.head()
(1052, 22)
Out[48]:
OBJECTID | ID_LIN_TRANS | SUBTIPO | NOMBRE | CIRCUITO | TIPO | F_OPERACIO | LONG_KM | TRAMO | PROPIEDAD | ... | SIST_ELECT | ESTADO | REGION | PROVINCIA | COMUNA | FUENTE_BAS | FECH_CREA | FECH_ACT | SHAPE.STLength() | geometry | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1041 | 134.0 | 100 | ANCOA - ALTO JAHUEL 500KV L1 | C1 | NACIONAL | 1.126570e+12 | 240.253297 | ANCOA - ALTO JAHUEL C1 | TRANSELEC S.A. | ... | SEN | EN OPERACION | METROPOLITANA DE SANTIAGO-LIBERTADOR GENERAL B... | MAIPO-CURICO-COLCHAGUA-CACHAPOAL-LINARES-TALCA | MOSTAZAL-BUIN-GRANEROS-CODEGUA-PAINE-RANCAGUA-... | CEN | 1556236800000 | 1714435200000 | 2.245320 | LINESTRING (-71.38073 -35.6829, -71.38105 -35.... |
1 | 1042 | 814.0 | 100 | ANCOA - ALTO JAHUEL 500KV L2 | C1 | NACIONAL | 1.420070e+12 | 257.757360 | ANCOA - ALTO JAHUEL C2 | TRANSELEC S.A. | ... | SEN | EN OPERACION | METROPOLITANA DE SANTIAGO-LIBERTADOR GENERAL B... | MAIPO-CURICO-COLCHAGUA-CACHAPOAL-LINARES-TALCA | MOSTAZAL-BUIN-GRANEROS-PAINE-SAN BERNARDO-DONI... | CEN | 1556236800000 | 1714435200000 | 2.431573 | LINESTRING (-71.38073 -35.68302, -71.38105 -35... |
2 | 1043 | 864.0 | 100 | ANCOA - ALTO JAHUEL 500KV L3 | S/I | NACIONAL | 1.420070e+12 | 256.467637 | ANCOA - ALTO JAHUEL | ALTO JAHUEL TRANSMISORA DE ENERGÍA S.A. | ... | SEN | EN OPERACION | METROPOLITANA DE SANTIAGO-LIBERTADOR GENERAL B... | MAIPO-CURICO-COLCHAGUA-CACHAPOAL-LINARES-TALCA | MOSTAZAL-BUIN-CODEGUA-PAINE-SAN FERNANDO-RIO C... | CEN | 1513728000000 | 1714435200000 | 2.432870 | LINESTRING (-71.37801 -35.68121, -71.37784 -35... |
3 | 1044 | 889.0 | 100 | ANCOA - ALTO JAHUEL 500KV L4 | S/I | NACIONAL | 1.420070e+12 | 256.297624 | ANCOA - ALTO JAHUEL | ALTO JAHUEL TRANSMISORA DE ENERGÍA S.A. | ... | SEN | EN OPERACION | METROPOLITANA DE SANTIAGO-LIBERTADOR GENERAL B... | MAIPO-CURICO-COLCHAGUA-CACHAPOAL-LINARES-TALCA | MOSTAZAL-BUIN-CODEGUA-PAINE-SAN FERNANDO-RIO C... | CEN | 1513728000000 | 1714435200000 | 2.431254 | LINESTRING (-71.37784 -35.68053, -71.37711 -35... |
4 | 1045 | 904.0 | 100 | NUEVA CARDONES - NUEVA MAITENCILLO 500KV | C1 - C2 | NACIONAL | 1.515888e+12 | 139.902808 | NUEVA CARDONES - NUEVA MAITENCILLO | INTERCHILE S.A. | ... | SEN | EN OPERACION | ATACAMA | HUASCO-COPIAPO | FREIRINA-COPIAPO-VALLENAR | CEN | 1556236800000 | 1714435200000 | 1.303026 | LINESTRING (-70.4269 -27.51888, -70.42733 -27.... |
5 rows × 22 columns
In [49]:
# Cambiar proyección a 5361 (metros en Chile)
electric_lines_5361 = electric_lines.to_crs(epsg=5361)
In [52]:
# Seleccionar por nombre
linea_seleccionada = electric_lines_5361[electric_lines_5361['TRAMO'].str.contains('ANCOA - ALTO JAHUEL C2', na=False)]
In [56]:
# Calcular matriz de distancia (km)
distanceMatrix_km = (
linea_seleccionada.set_index('TRAMO').geometry.apply(
lambda g:airports_5361.set_index('name').geometry.distance(g) / 1000
)
)
distanceMatrix_km
Out[56]:
name | Comodoro Arturo Merino Benítez International Airport | President Carlos Ibañez del Campo International Airport | El Tepual Airport | Mataveri Airport | El Loa Airport | Andrés Sabella Gálvez International Airport | Diego Aracena Airport | Balmaceda Airport | La Florida Airport | Desierto de Atacama Airport | ... | Clínica Indisa Helipad | Ejército Bicentenario Helipad | Titanium Heliport | Moneda Bicentenario Heliport | Apoquindo 2929 Helipad | Edificio Torre Nueva Santa María Helipad | Dinahue Heliport | Basso Field | Santa Carolina Heliport | Villarica Park Lake Heliport |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
TRAMO | |||||||||||||||||||||
ANCOA - ALTO JAHUEL C2 | 32.821931 | 1924.906462 | 656.410475 | 3982.230895 | 1252.114702 | 1135.140472 | 1457.849156 | 1136.833811 | 420.276566 | 712.108264 | ... | 30.87334 | 25.911729 | 32.106916 | 27.582695 | 31.781138 | 30.551055 | 194.579976 | 547.316968 | 84.220548 | 406.580385 |
1 rows × 520 columns
In [60]:
buffer_metros = 30000 # = 30 km
buffer_linea = linea_seleccionada.buffer(distance=buffer_metros)
In [61]:
# Aeropuertos dentro del buffer
aeropuertos_en_buffer = airports_5361.clip(buffer_linea)
aeropuertos_en_buffer
Out[61]:
id | ident | type | name | latitude_deg | longitude_deg | elevation_ft | continent | country_name | iso_country | ... | gps_code | icao_code | iata_code | local_code | home_link | wikipedia_link | keywords | score | last_updated | geometry | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
265 | 39187 | SCKK | small_airport | La Cascada Airport | -35.384998 | -71.106667 | 1804 | SA | Chile | CL | ... | SCKK | https://en.wikipedia.org/wiki/La_Cascada_Airport | 50 | 2024-05-18T22:07:57+00:00 | POINT (308653.58 6082223.214) | |||||
269 | 39320 | SCXA | small_airport | Alupenhue Airport | -35.239445 | -71.070831 | 1600 | SA | Chile | CL | ... | SCXA | https://en.wikipedia.org/wiki/Alupenhue_Airport | 50 | 2024-05-18T22:36:52+00:00 | POINT (311571.544 6098437.602) | |||||
266 | 39203 | SCLP | small_airport | Los Petiles Airport | -35.21555709838867 | -71.10861206054688 | 1575 | SA | Chile | CL | ... | SCLP | 50 | 2008-07-12T07:24:28+00:00 | POINT (308076.986 6101014.996) | ||||||
201 | 39289 | SCTM | small_airport | La Montaña Airport | -34.9689 | -70.9333 | 1969 | SA | Chile | CL | ... | SCTM | https://en.wikipedia.org/wiki/Curic%C3%B3_La_M... | 50 | 2024-05-18T22:29:32+00:00 | POINT (323504.867 6128698.807) | |||||
348 | 39236 | SCOE | small_airport | San Miguel Airport | -34.962223 | -71.016388 | 1509 | SA | Chile | CL | ... | SCOE | https://en.wikipedia.org/wiki/Romeral_San_Migu... | 50 | 2024-05-18T22:17:20+00:00 | POINT (315903.58 6129289.492) | |||||
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
432 | 39334 | SHBE | heliport | Banco Exterior Heliport | -33.43611145019531 | -70.6449966430664 | 2000 | SA | Chile | CL | ... | SHBE | 25 | 2008-07-12T07:27:21+00:00 | POINT (347083.402 6299154.253) | ||||||
452 | 39375 | SHLA | heliport | Las Americas Heliport | -33.43583297729492 | -70.6433334350586 | 2126 | SA | Chile | CL | ... | SHLA | 25 | 2008-07-12T07:27:59+00:00 | POINT (347237.541 6299187.577) | ||||||
449 | 39370 | SHHS | heliport | Hospital del Salvador Heliport | -33.43611145019531 | -70.62110900878906 | 1910 | SA | Chile | CL | ... | SHHS | 25 | 2008-07-12T07:27:54+00:00 | POINT (349304.2 6299189.14) | ||||||
456 | 39381 | SHMD | heliport | Ministerio de Defensa Nacional Heliport | -33.43527603149414 | -70.63805389404297 | 2123 | SA | Chile | CL | ... | SHMD | 25 | 2008-07-12T07:28:04+00:00 | POINT (347727.401 6299257.081) | ||||||
454 | 39379 | SHMA | heliport | Clínica Santa María Heliport | -33.432220458984375 | -70.62833404541016 | 2028 | SA | Chile | CL | ... | SHMA | 25 | 2008-07-12T07:28:03+00:00 | POINT (348625.742 6299610.097) |
71 rows × 25 columns
In [62]:
# 5. Visualizamos los resultados
base = buffer_linea.plot(color='red', edgecolor='black', alpha=0.5, figsize=(10, 10))
linea_seleccionada.plot(ax=base, color='blue', linewidth=2, label='Línea eléctrica')
aeropuertos_en_buffer.plot(ax=base, color='green', markersize=20, label='Aeropuertos dentro del buffer')
plt.legend()
plt.title('Aeropuertos dentro del buffer alrededor de línea eléctrica')
plt.show()
In [63]:
lineas_seleccionadas = electric_lines_5361[electric_lines_5361['TRAMO'].str.contains("NUEVA", case=False, na=False)]
In [64]:
# 2. Crear el buffer para todas las líneas seleccionadas (por ejemplo, 30 km)
buffer_metros = 30000
buffers_lineas = lineas_seleccionadas.buffer(distance=buffer_metros)
In [66]:
# 3. Crear GeoDataFrame del buffer (con el mismo CRS)
buffers_gdf = gpd.GeoDataFrame(geometry=buffers_lineas, crs=electric_lines_5361.crs)
In [67]:
# 4. Mapa base con el buffer en rojo
base = buffers_gdf.explore(color='yellow', style_kwds={'fillOpacity': 0.2}, name="Buffers")
# 5. Agregar las líneas eléctricas en azul
lineas_seleccionadas.explore(m=base, color='blue', style_kwds={'weight':2}, name="Líneas eléctricas")
# 6. (Opcional) Agregar aeropuertos en negro
airports_5361.explore(m=base, color='black', marker_kwds={'radius':4}, name="Aeropuertos")
# 7. Mostrar mapa (con control de capas)
import folium
folium.LayerControl().add_to(base)
base
Out[67]:
Make this Notebook Trusted to load map: File -> Trust Notebook
In [68]:
# 4. Filtrar aeropuertos que están dentro del buffer
airports_dentro_buffer = airports_5361.clip(buffers_gdf)
In [69]:
# 5. Mapa base con buffers (rojo)
base = buffers_gdf.explore(color='yellow', style_kwds={'fillOpacity': 0.2}, name="Buffers")
# 6. Agregar líneas eléctricas (azul)
lineas_seleccionadas.explore(m=base, color='blue', style_kwds={'weight':2}, name="Líneas eléctricas")
# 7. Agregar solo los aeropuertos dentro del buffer (negro)
airports_dentro_buffer.explore(m=base, color='black', marker_kwds={'radius':4}, name="Aeropuertos en buffer")
# 8. Control de capas
folium.LayerControl().add_to(base)
base
Out[69]:
Make this Notebook Trusted to load map: File -> Trust Notebook