{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Access S2S API\n", "\n", "This notebook walks through an example of sending an API call directly" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from typing import Dict\n", "\n", "import folium as flm # Comment out if you have not installed, or run pip install folium matplotlib mapclassify\n", "import geopandas as gpd\n", "import numpy as np\n", "import pandas as pd\n", "import requests\n", "from geojson_pydantic import Feature, Polygon\n", "from lonboard import Map, ScatterplotLayer\n", "from shapely import from_geojson" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "BASE_URL = \"https://space2stats.ds.io\"\n", "FIELDS_ENDPOINT = f\"{BASE_URL}/fields\"\n", "SUMMARY_ENDPOINT = f\"{BASE_URL}/summary\"" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Available Fields: ['pop_flood_pct', 'ogc_fid', 'sum_pop_f_0_2020', 'sum_pop_f_10_2020', 'sum_pop_f_15_2020', 'sum_pop_f_1_2020', 'sum_pop_f_20_2020', 'sum_pop_f_25_2020', 'sum_pop_f_30_2020', 'sum_pop_f_35_2020', 'sum_pop_f_40_2020', 'sum_pop_f_45_2020', 'sum_pop_f_50_2020', 'sum_pop_f_55_2020', 'sum_pop_f_5_2020', 'sum_pop_f_60_2020', 'sum_pop_f_65_2020', 'sum_pop_f_70_2020', 'sum_pop_f_75_2020', 'sum_pop_f_80_2020', 'sum_pop_m_0_2020', 'sum_pop_m_10_2020', 'sum_pop_m_15_2020', 'sum_pop_m_1_2020', 'sum_pop_m_20_2020', 'sum_pop_m_25_2020', 'sum_pop_m_30_2020', 'sum_pop_m_35_2020', 'sum_pop_m_40_2020', 'sum_pop_m_45_2020', 'sum_pop_m_50_2020', 'sum_pop_m_55_2020', 'sum_pop_m_5_2020', 'sum_pop_m_60_2020', 'sum_pop_m_65_2020', 'sum_pop_m_70_2020', 'sum_pop_m_75_2020', 'sum_pop_m_80_2020', 'sum_pop_m_2020', 'sum_pop_f_2020', 'sum_pop_2020', 'pop', 'pop_flood']\n" ] } ], "source": [ "response = requests.get(FIELDS_ENDPOINT)\n", "if response.status_code != 200:\n", " raise Exception(f\"Failed to get fields: {response.text}\")\n", "\n", "available_fields = response.json()\n", "print(\"Available Fields:\", available_fields)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "AOIModel = Feature[Polygon, Dict]\n", "\n", "# ~burundi\n", "minx, miny, maxx, maxy = 29.038924, -4.468958, 30.850461, -2.310523\n", "\n", "aoi = {\n", " \"type\": \"Feature\",\n", " \"geometry\": {\n", " \"type\": \"Polygon\",\n", " \"coordinates\": [\n", " [\n", " [minx, maxy],\n", " [minx, miny],\n", " [maxx, miny],\n", " [maxx, maxy],\n", " [minx, maxy],\n", " ]\n", " ],\n", " },\n", " \"properties\": {\"name\": \"Updated AOI\"},\n", "}\n", "\n", "\n", "feat = AOIModel(**aoi)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# Define the Request Payload\n", "request_payload = {\n", " \"aoi\": aoi,\n", " \"spatial_join_method\": \"touches\",\n", " \"fields\": [\"sum_pop_2020\"],\n", " \"geometry\": \"polygon\",\n", "}\n", "\n", "# Get Summary Data\n", "response = requests.post(SUMMARY_ENDPOINT, json=request_payload)\n", "if response.status_code != 200:\n", " raise Exception(f\"Failed to get summary: {response.text}\")\n", "\n", "summary_data = response.json()\n", "df = pd.DataFrame(summary_data)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | hex_id | \n", "geometry | \n", "sum_pop_2020 | \n", "
---|---|---|---|
0 | \n", "866ad8087ffffff | \n", "POLYGON ((30.10399 -2.3257, 30.11745 -2.29278,... | \n", "25345.874701 | \n", "
1 | \n", "866ad808fffffff | \n", "POLYGON ((30.16219 -2.34876, 30.17563 -2.31584... | \n", "11870.360712 | \n", "
2 | \n", "866ad8097ffffff | \n", "POLYGON ((30.05471 -2.36355, 30.06817 -2.33062... | \n", "19034.332476 | \n", "
3 | \n", "866ad809fffffff | \n", "POLYGON ((30.11291 -2.38662, 30.12636 -2.35369... | \n", "14700.551092 | \n", "
4 | \n", "866ad80c7ffffff | \n", "POLYGON ((30.26964 -2.33398, 30.28307 -2.30106... | \n", "12067.935215 | \n", "