# From “Geometric operations”#

Last updated: 2023-05-27 16:39:06


## Exercise 09-b#

import geopandas as gpd
towns = towns[['Muni_Heb', 'geometry']]
towns['area'] = towns.area
towns1 = towns.sort_values('area')
towns1['Muni_Heb'].iloc[0]

'ללא שיפוט - אזור נחל ארבל'

towns1['Muni_Heb'].iloc[towns1.shape[0]-1]

'רמת נגב'


## Exercise 09-c#

import geopandas as gpd
towns = towns[['Muni_Heb', 'Shape_Area', 'geometry']]
towns['area'] = towns.area
towns.plot.scatter('area', 'Shape_Area');


## Exercise 09-g#

import geopandas as gpd

# Read data & subset columns
towns = towns[['Machoz', 'geometry']]
towns

Machoz geometry
0 צפון POLYGON Z ((225369.655 770523.6...
1 דרום POLYGON Z ((206899.135 552967.8...
2 מרכז POLYGON Z ((194329.250 655299.1...
3 מרכז POLYGON Z ((196236.573 657835.0...
4 צפון POLYGON Z ((255150.135 764764.6...
... ... ...
405 דרום POLYGON Z ((164806.146 577898.8...
406 מרכז POLYGON Z ((189803.359 684152.9...
407 צפון POLYGON Z ((212294.953 763168.8...
408 ירושלים POLYGON Z ((209066.649 635655.2...
409 דרום POLYGON Z ((162082.027 592043.1...

410 rows × 2 columns

# Dissolve
districts = towns.dissolve(by='Machoz').reset_index()
districts

Machoz geometry
0 דרום POLYGON Z ((214342.276 467536.8...
1 חיפה MULTIPOLYGON Z (((205862.732 70...
2 ירושלים POLYGON Z ((192314.625 638338.4...
3 מרכז POLYGON Z ((171159.359 631505.0...
4 צפון MULTIPOLYGON Z (((204805.266 71...
5 תל אביב POLYGON Z ((177311.878 655799.7...
# Add 'count' variable
districts['count'] = 1
districts

Machoz geometry count
0 דרום POLYGON Z ((214342.276 467536.8... 1
1 חיפה MULTIPOLYGON Z (((205862.732 70... 1
2 ירושלים POLYGON Z ((192314.625 638338.4... 1
3 מרכז POLYGON Z ((171159.359 631505.0... 1
4 צפון MULTIPOLYGON Z (((204805.266 71... 1
5 תל אביב POLYGON Z ((177311.878 655799.7... 1
# Spatial join with self
districts = gpd.sjoin(
districts[['Machoz', 'geometry']],
districts[['count', 'geometry']],
how='left',
predicate='intersects'
)
districts = districts.drop('index_right', axis=1)
districts

Machoz geometry count
0 דרום POLYGON Z ((214342.276 467536.8... 1
0 דרום POLYGON Z ((214342.276 467536.8... 1
0 דרום POLYGON Z ((214342.276 467536.8... 1
1 חיפה MULTIPOLYGON Z (((205862.732 70... 1
1 חיפה MULTIPOLYGON Z (((205862.732 70... 1
... ... ... ...
3 מרכז POLYGON Z ((171159.359 631505.0... 1
4 צפון MULTIPOLYGON Z (((204805.266 71... 1
4 צפון MULTIPOLYGON Z (((204805.266 71... 1
5 תל אביב POLYGON Z ((177311.878 655799.7... 1
5 תל אביב POLYGON Z ((177311.878 655799.7... 1

18 rows × 3 columns

# Aggregate
districts = districts.dissolve(by='Machoz', aggfunc='sum')
districts

geometry count
Machoz
דרום POLYGON Z ((214339.262 467527.3... 3
חיפה MULTIPOLYGON Z (((205861.104 70... 3
ירושלים POLYGON Z ((192338.062 638359.2... 3
מרכז POLYGON Z ((171124.422 631538.1... 5
צפון MULTIPOLYGON Z (((204779.953 71... 2
תל אביב POLYGON Z ((177310.813 655789.8... 2
# Subtract 1 (self)
districts['count'] = districts['count'] - 1
districts

geometry count
Machoz
דרום POLYGON Z ((214339.262 467527.3... 2
חיפה MULTIPOLYGON Z (((205861.104 70... 2
ירושלים POLYGON Z ((192338.062 638359.2... 2
מרכז POLYGON Z ((171124.422 631538.1... 4
צפון MULTIPOLYGON Z (((204779.953 71... 1
תל אביב POLYGON Z ((177310.813 655789.8... 1
# Plot
districts.plot(column='count', cmap='Spectral', edgecolor='grey', legend=True);


## Exercise 09-h#

import pandas as pd
import geopandas as gpd

# Read & subset columns
stations = stations[['STAT_NAMEH', 'geometry']]
stat = stat[['SHEM_YISHUV', 'Pop_Total', 'geometry']]

# Calculate area
stat['area'] = stat.area

# Replace "No Data" population with 0
stat['Pop_Total'] = stat['Pop_Total'].fillna(0)

# Buffer stations
stations['geometry'] = stations.buffer(1000)

# Intersect
stations = gpd.overlay(stations, stat, how="intersection")

# Calculate population per polygon
stations['area1'] = stations.area
stations['prop'] = stations['area1'] / stations['area']
stations['pop1'] = stations['Pop_Total'] * stations['prop']

# Dissolve
stations = stations[['STAT_NAMEH', 'pop1', 'geometry']].dissolve(by='STAT_NAMEH', aggfunc='sum').reset_index()

# Sort
stations = stations.sort_values(by='pop1', ascending=False)
stations

STAT_NAMEH geometry pop1
11 בת ים יוספטל POLYGON ((177152.750 657153.746... 55761.058635
24 ירושלים יצחק נבון POLYGON ((218650.757 632087.423... 46441.448009
62 ת"א סבידור מרכז POLYGON ((180306.847 665089.717... 39493.940946
16 חולון וולפסון POLYGON ((176806.558 659551.427... 35295.776253
48 קרית מוצקין POLYGON ((206654.795 747716.120... 35148.940155
... ... ... ...
32 מגדל העמק כפר ברוך POLYGON ((218894.991 727874.541... 29.732200
49 קרית מלאכי יואב POLYGON ((184266.430 628244.915... 0.000000
17 חוצות המפרץ POLYGON ((205604.630 745103.145... 0.000000
42 פאתי מודיעין POLYGON ((197394.885 644447.483... 0.000000
23 יקנעם כפר יהושוע POLYGON ((212300.180 731084.998... 0.000000

63 rows × 3 columns

## Exercise 09-i#

# Read & subset columns
towns = towns[['Muni_Heb', 'geometry']]
rail = rail[['ISACTIVE', 'geometry']]

# Subset railways
sel = rail['ISACTIVE'] == 'פעיל'
rail = rail[sel]

# Dissolve towns
towns = towns.dissolve(by='Muni_Heb').reset_index()

# Union railway lines
rail1 = rail.unary_union

# Subset towns
sel = towns.intersects(rail1)
towns = towns[sel]

# Plot
base = towns.plot(color='lightgrey', edgecolor='grey')
rail.plot(ax=base, color='black');