Demographic Insights and Urban Features
In this section, we introduce code snippets that bring population data, building footprints, and elevation contours into the narrative.
Analyzing Population Counts
The following code snippet loads population data within the geographical boundary of Jakarta and provides insights into the demographic landscape:
The column 'DN' contains population counts.
POPULATION_GEOJSON_FILE = 'https://www.dropbox.com/scl/fi/cymqfopbx2df201f00sp8/
Population_Count_in_Jakarta_Boundary.gpkg?rlkey=ht2ks6o5qkqsm8wvgw9ljxvbe&dl=1'
# Read the GeoJSON file from the URL
population_gdf = gpd.read_file(POPULATION_GEOJSON_FILE)
print(f"Total columns: {population_gdf.shape[1]}")\ # Inspect the columns population_gdf.head(2)
Total columns: 28
print(f"Descriptive Statistics for Population counts:\n") print(population_gdf['DN'].describe()) print(f"\nMissing Values : {population_gdf['DN'].isna().sum()}")
### output Descriptive Statistics for Population counts: count 41933.00000 mean 150.25226 std 35.63868 min 62.00000 25% 128.00000 50% 146.00000 75% 166.00000 max 239.00000 Name: DN, dtype: float64 Missing Values : 0
#### Plot
# Create a plot and specify the column for coloring
population_gdf.plot(column='DN', cmap='viridis', legend=True)
# Add title and labels
plt.title("Population counts")
plt.xlabel("Longitude")
plt.ylabel("Latitude")
# Show the plot
plt.show()
This code generates a map visualizing population counts within the specified geographical boundary, offering a spatial perspective on demographic distribution.
We can restrict the plot's x and y limits to focus on Jakarta City only
def plot_Jakarta_metric(sample_gdf,col_name, title, show_legend):
# Define the x and y limits
x_min, x_max = 106.65, 107.0
y_min, y_max = -6.4, -6.05
# Create a plot and specify the column for coloring
ax = sample_gdf.plot(column=col_name, legend=show_legend)
# Set x and y limits
ax.set_xlim(x_min, x_max)
ax.set_ylim(y_min, y_max)
# Add title and labels
plt.title(title)
plt.xlabel("Longitude")
plt.ylabel("Latitude")
# Show the plot
plt.show()
plot_Jakarta_metric(population_gdf,col_name='DN',title='Population counts',show_legend=True)
Exploring Building Footprints
Next, we bring building footprints into the spotlight, examining their spatial distribution and density:
import gdown # Replace 'your_file_id_here' with the actual file ID file_id = '1wuOhvtKege_gqql9-Xmnwd59wq2NAyWh' # Construct the download link file_url = 'https://drive.google.com/uc?id=' + file_id # Specify the destination path where you want to save the file output_path = '/content/building-polygon.gpkg' # Download the file gdown.download(file_url, output_path, quiet=False) # Now, you can read the file using your preferred method bldg_gdf = gpd.read_file(output_path) print(bldg_gdf.columns) print(bldg_gdf.shape) bldg_gdf['item'] = 1
building_gdf = bldg_gdf.copy() building_gdf_projected = building_gdf.to_crs({'init': 'epsg:3857'}) building_gdf["area"] = building_gdf_projected['geometry'].area/ 10**6 building_gdf.head(2)
plot_Jakarta_metric(building_gdf,col_name='item',title='Building Counts',show_legend=False)
This code snippet loads building footprints, adds a dummy column, and calculates building areas. It sets the stage for understanding the spatial distribution and density of urban structures.
Elevation Contours
Lastly, elevation contours provide insights into the terrain of the city. The following function extracts elevation data for Jakarta:
import geopandas as gpd import pandas as pd def extract_elevation(city_folder_name): # Read the GPKG file into a GeoDataFrame dropbox_link = "https://www.dropbox.com/scl/fi/h9g2rjc49hbwc3ishf0o5/contour_lines.gpkg?rlkey=pdi83x7l6e3rrfvx8vjoghx98&dl=1" elevation_gdf = gpd.read_file(dropbox_link) print(elevation_gdf.head(2)) # Specify the QML attribute(s) you want as a DataFrame qml_attribute = 'level' df = elevation_gdf[[qml_attribute]] # Perform operations on the DataFrame (e.g., df.head() to see the first few rows) #elevation_gdf(df.head()) return elevation_gdf elevation_gdf = extract_elevation('Jakarta_all_data') print(elevation_gdf.shape) elevation_gdf.level.unique(),elevation_gdf.cat.unique()
plot_Jakarta_metric(elevation_gdf,col_name='level',title='Elevation',show_legend=True)
This function extracts elevation data and provides a glimpse into the topography of Jakarta.