dd-l2-tokyo-overture-schools
Map (reference ← swipe → agent)
0:00
Pulling together a summer briefing on school-density disparities for children aged 8–14 across the 23 special wards. Out of `tokyo_places` I need every school relevant to that age range whose point sits inside the wards rectangle in `tokyo_23wards_bbox`. A colleague will visualise the result in R, so it has to land as `tokyo_schools.geojson`.
Each feature's properties must use these exact keys: `id`, `name`, `confidence`, `address_freeform`, `address_locality`, and `address_postcode`.
0:00
System info
{
"adapter": "openrouter",
"model": "google/gemma-4-26b-a4b-it",
"base_url": "https://openrouter.ai/api/v1"
}
0:08
Bash
ls -R /work
/work: tokyo_23wards_bbox.geojson tokyo_places.parquet
0:20
Write
/work/inspect_data.py
content · 16 lines · py
import geopandas as gpd
import pandas as pd
# Load the bbox (23 wards)
wards_bbox = gpd.read_file('tokyo_23wards_bbox.geojson')
# Load the places
places = gpd.read_parquet('tokyo_places.parquet')
print("Wards bbox head:")
print(wards_bbox.head())
print("\nPlaces head:")
print(places.head())
print("\nPlaces columns:")
print(places.columns)
Wrote /work/inspect_data.py (344 chars).
0:25
Bash
python /work/inspect_data.py
Wards bbox head:
name geometry
0 Tokyo 23 Special Wards (bbox) POLYGON ((139.56 35.52, 139.91 35.52, 139.91 3...
Places head:
id ... bucket
0 0036772c-0c6a-4a84-a168-95f8f2097d0b ... 0
1 005b475a-c465-4fdc-b2b7-863f5b63cf5b ... 0
2 00e41387-1ceb-4dee-80a4-29705b5a09fd ... 0
3 01067b37-4a19-4791-90c0-6c2e99a8867a ... 0
4 01139e42-34cf-4306-a3e8-9f3b58bc769d ... 0
[5 rows x 8 columns]
Places columns:
Index(['id', 'geometry', 'bbox', 'confidence', 'categories', 'names',
'addresses', 'bucket'],
dtype='str')
0:30
Write
/work/inspect_data.py
content · 20 lines · py
import geopandas as gpd
import pandas as pd
import json
# Load the bbox (23 wards)
wards_bbox = gpd.read_file('tokyo_23wards_bbox.geojson')
# Load the places
places = gpd.read_parquet('tokyo_places.parquet')
# Check categories to identify schools for age 8-14
# Since I don't know the categories, let's look at some examples
print("Sample categories:")
print(places['categories'].head(20))
# Actually, 'categories' is likely a list or a string.
# Let's see what's inside.
print("\nFirst few values of categories (raw):")
print(places['categories'].iloc[0:5])
Wrote /work/inspect_data.py (564 chars).
0:34
Bash
python /work/inspect_data.py
Sample categories:
0 {'alternate': ['education', 'topic_concert_ven...
1 {'alternate': None, 'primary': 'cafe'}
2 None
3 {'alternate': ['european_restaurant', 'restaur...
4 {'alternate': None, 'primary': 'italian_restau...
5 {'alternate': ['japanese_restaurant', 'restaur...
6 {'alternate': ['train_station', 'transportatio...
7 {'alternate': None, 'primary': 'beauty_salon'}
8 {'alternate': ['education', 'elementary_school...
9 {'alternate': ['restaurant', 'bakery'], 'prima...
10 {'alternate': ['shopping'], 'primary': 'bakery'}
11 {'alternate': ['real_estate', 'real_estate_ser...
12 {'alternate': ['noodles_restaurant', 'restaura...
13 {'alternate': ['retail', 'clothing_store'], 'p...
14 {'alternate': ['pub'], 'primary': 'bar'}
15 {'alternate': None, 'primary': 'motorcycle_dea...
16 {'alternate': ['theatre', 'topic_concert_venue...
17 {'alternate': ['urban_farm', 'fruits_and_veget...
18 {'alternate': ['diner'], 'primary': 'restaurant'}
19 {'alternate': ['education', 'college_universit...
Name: categories, dtype: object
First few values of categories (raw):
0 {'alternate': ['education', 'topic_concert_ven...
1 {'alternate': None, 'primary': 'cafe'}
2 None
3 {'alternate': ['european_restaurant', 'restaur...
4 {'alternate': None, 'primary': 'italian_restau...
Name: categories, dtype: object
1:20
Write
/work/inspect_data.py
content · 103 lines · py
import geopandas as gpd
import pandas as pd
import json
# Load the bbox (23 wards)
wards_bbox = gpd.read_file('tokyo_23wards_bbox.geojson')
# Load the places
places = gpd.read_parquet('tokyo_places.parquet')
# Define school categories for age 8-14
# Elementary schools (approx 6-12) and Junior high schools (approx 12-15)
# In Japan, elementary school is shogakko, junior high is chugakko.
# Based on the output, we see 'elementary_school' in the categories.
# Let's see what categories are available.
def is_target_school(category_dict):
if category_dict is None or not isinstance(category_dict, dict):
return False
# Check 'primary' and 'alternate'
search_terms = []
if category_dict.get('primary'):
search_terms.append(category_dict['primary'])
if category_dict.get('alternate') and isinstance(category_dict['alternate'], list):
search_terms.extend(category_dict['alternate'])
target_terms = {'elementary_school', 'junior_high_school', 'middle_school'}
# Note: 'middle_school' and 'junior_high_school' are often used interchangeably.
# Let's check if 'school' is in any of the terms or if they match specifically.
for term in search_terms:
if term in target_terms or term == 'school':
return True
return False
# Actually, let's look for anything that includes 'school' and is related to elementary/junior high.
# Given the instruction "children aged 8-14", we are looking for Elementary and Junior High schools.
# Since categories is a column of dicts, we can apply this function.
# However, the data is in parquet, so 'categories' might be stored as a string or a dict depending on how it was written.
# Let's check the type of the first element again. It looks like a dict in the print output.
# Let's try to filter the dataframe.
def check_school(row):
cat = row['categories']
if cat is None:
return False
# The print showed dict-like structure.
# If it's a string, we need to parse it.
if isinstance(cat, str):
try:
cat = json.loads(cat)
except:
return False
primary = cat.get('primary', '')
alternates = cat.get('alternate', [])
if alternates is None: alternates = []
all_cats = [primary] + alternates
for c in all_cats:
if c in ['elementary_school', 'junior_high_school', 'middle_school']:
return True
return False
# Filter schools
places['is_school'] = places.apply(check_school, axis=1)
schools = places[places['is_school']].copy()
print(f"Found {len(schools)} schools.")
# Spatial join or filter by bounding box
# wards_bbox is a single polygon (the bbox)
# We want schools whose point is inside this polygon.
schools_in_wards = gpd.sjoin(schools, wards_bbox, predicate='within')
print(f"Schools in wards: {len(schools_in_wards)}")
# Now prepare the output with exact keys:
# id, name, confidence, address_freeform, address_locality, and address_postcode
# Let's inspect the columns of schools_in_wards to find the source columns.
print("\nColumns in schools_in_wards:")
print(schools_in_wards.columns)
print("\nSample row data:")
if not schools_in_wards.empty:
print(schools_in_wards.iloc[0].to_dict())
else:
print("No schools found in wards!")
# Let's assume:
# name -> names[0] or similar? Wait, 'names' is a column. Let's check its type.
# addresses -> 'addresses' column is likely a dict or list.
# address_freeform, address_locality, address_postcode are likely in 'addresses'.
print("\nSample 'names' and 'addresses' values:")
if not schools_in_wards.empty:
print("Names sample:", schools_in_wards['names'].iloc[0])
print("Addresses sample:", schools_in_wards['addresses'].iloc[0])
Wrote /work/inspect_data.py (3756 chars).
1:22
Bash
python /work/inspect_data.py
Found 24 schools.
Schools in wards: 19
Columns in schools_in_wards:
Index(['id', 'geometry', 'bbox', 'confidence', 'categories', 'names',
'addresses', 'bucket', 'is_school', 'index_right', 'name'],
dtype='str')
Sample row data:
{'id': '09081cd7-9655-43e6-bb5e-12abf5e300b9', 'geometry': <POINT (139.726 35.784)>, 'bbox': {'xmax': 139.72613525390625, 'xmin': 139.7261199951172, 'ymax': 35.78450012207031, 'ymin': 35.78449630737305}, 'confidence': 0.77, 'categories': {'alternate': None, 'primary': 'elementary_school'}, 'names': {'common': None, 'primary': '北区立岩淵小学校', 'rules': None}, 'addresses': array([{'country': 'JP', 'freeform': '岩淵町6-6', 'locality': '北区', 'postcode': '115-0041', 'region': '東京都'}],
dtype=object), 'bucket': 0, 'is_school': True, 'index_right': 0, 'name': 'Tokyo 23 Special Wards (bbox)'}
Sample 'names' and 'addresses' values:
Names sample: {'common': None, 'primary': '北区立岩淵小学校', 'rules': None}
Addresses sample: [{'country': 'JP', 'freeform': '岩淵町6-6', 'locality': '北区', 'postcode': '115-0041', 'region': '東京都'}]
/work/inspect_data.py:77: UserWarning: CRS mismatch between the CRS of left geometries and the CRS of right geometries. Use `to_crs()` to reproject one of the input geometries to match the CRS of the other. Left CRS: OGC:CRS84 Right CRS: EPSG:4326 schools_in_wards = gpd.sjoin(schools, wards_bbox, predicate='within')
1:53
Write
/work/solve.py
content · 81 lines · py
import geopandas as gpd
import pandas as pd
import json
# Load the bbox (23 wards)
wards_bbox = gpd.read_file('tokyo_23wards_bbox.geojson')
# Load the places
places = gpd.read_parquet('tokyo_places.parquet')
def check_school(category_dict):
if category_dict is None or not isinstance(category_dict, dict):
return False
primary = category_dict.get('primary', '')
alternates = category_dict.get('alternate', [])
if alternates is None: alternates = []
all_cats = [primary] + alternates
target_terms = {'elementary_school', 'junior_high_school', 'middle_school'}
for c in all_cats:
if c in target_terms:
return True
return False
# Filter schools
places['is_school'] = places.apply(lambda x: check_school(x['categories']), axis=1)
schools = places[places['is_school']].copy()
# Ensure CRS match for spatial join
if schools.crs != wards_bbox.crs:
schools = schools.to_crs(wards_bbox.crs)
# Spatial join
schools_in_wards = gpd.sjoin(schools, wards_bbox, predicate='within')
def extract_properties(row):
# name
names = row['names']
name_val = None
if isinstance(names, dict):
name_val = names.get('primary') or names.get('common')
# addresses
addresses = row['addresses']
addr_freeform = None
addr_locality = None
addr_postcode = None
if isinstance(addresses, (list, pd.Series)) and len(addresses) > 0:
# addresses is an array of dicts
first_addr = addresses[0]
if isinstance(first_addr, dict):
addr_freeform = first_addr.get('freeform')
addr_locality = first_addr.get('locality')
addr_postcode = first_addr.get('postcode')
return pd.Series({
'id': row['id'],
'name': name_val,
'confidence': row['confidence'],
'address_freeform': addr_freeform,
'address_locality': addr_locality,
'address_postcode': addr_postcode
})
# Create the property columns
props = schools_in_wards.apply(extract_properties, axis=1)
# Combine geometry and properties
final_df = gpd.GeoDataFrame(props, geometry=schools_in_wards.geometry, crs=schools_in_wards.crs)
# Check result
print(f"Final count: {len(final_df)}")
print(final_df.head())
# Export to geojson
final_df.to_file('tokyo_schools.geojson', driver='GeoJSON')
print("Successfully saved to tokyo_schools.geojson")
Wrote /work/solve.py (2405 chars).
1:55
Bash
python /work/solve.py
Final count: 19
id ... geometry
118 09081cd7-9655-43e6-bb5e-12abf5e300b9 ... POINT (139.72613 35.7845)
1374 6cd20f5e-bdf7-4449-ab84-e5fcf8fd5625 ... POINT (139.63104 35.67138)
1729 895bf76e-c14f-4269-b7d3-41e846a3415b ... POINT (139.58112 35.73527)
1966 9bb9d1e2-d2d1-4b8b-96b2-74f88d41be35 ... POINT (139.70148 35.78014)
3720 1fae3ec6-610c-4e22-8351-0f8121b9063d ... POINT (139.73996 35.60447)
[5 rows x 7 columns]
Successfully saved to tokyo_schools.geojson
1:58
Bash
head -n 20 tokyo_schools.geojson
{
"type": "FeatureCollection",
"name": "tokyo_schools",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features": [
{ "type": "Feature", "properties": { "id": "09081cd7-9655-43e6-bb5e-12abf5e300b9", "name": "北区立岩淵小学校", "confidence": 0.77, "address_freeform": null, "address_locality": null, "address_postcode": null }, "geometry": { "type": "Point", "coordinates": [ 139.726130068302155, 35.784496739277166 ] } },
{ "type": "Feature", "properties": { "id": "6cd20f5e-bdf7-4449-ab84-e5fcf8fd5625", "name": "高井戸第三小学校", "confidence": 0.77, "address_freeform": null, "address_locality": null, "address_postcode": null }, "geometry": { "type": "Point", "coordinates": [ 139.631035787769065, 35.671375431274015 ] } },
{ "type": "Feature", "properties": { "id": "895bf76e-c14f-4269-b7d3-41e846a3415b", "name": "練馬区立石神井台小学校", "confidence": 0.92067110538482666, "address_freeform": null, "address_locality": null, "address_postcode": null }, "geometry": { "type": "Point", "coordinates": [ 139.581124030000012, 35.7352691 ] } },
{ "type": "Feature", "properties": { "id": "9bb9d1e2-d2d1-4b8b-96b2-74f88d41be35", "name": "板橋区立志村第四小学校", "confidence": 0.77, "address_freeform": null, "address_locality": null, "address_postcode": null }, "geometry": { "type": "Point", "coordinates": [ 139.701479279969845, 35.780135324561023 ] } },
{ "type": "Feature", "properties": { "id": "1fae3ec6-610c-4e22-8351-0f8121b9063d", "name": "品川区立立会小学校", "confidence": 0.77, "address_freeform": null, "address_locality": null, "address_postcode": null }, "geometry": { "type": "Point", "coordinates": [ 139.739955127869848, 35.604465712965293 ] } },
{ "type": "Feature", "properties": { "id": "9ca37035-73c3-4b12-9290-5d813e40dd4d", "name": "足立区立本木小学校", "confidence": 0.77, "address_freeform": null, "address_locality": null, "address_postcode": null }, "geometry": { "type": "Point", "coordinates": [ 139.780612643343403, 35.76502964484807 ] } },
{ "type": "Feature", "properties": { "id": "a9438e99-f9f4-4e78-b2f4-e035c97b4333", "name": "北区立滝野川紅葉中学校", "confidence": 0.77, "address_freeform": null, "address_locality": null, "address_postcode": null }, "geometry": { "type": "Point", "coordinates": [ 139.724761505505882, 35.749635044518975 ] } },
{ "type": "Feature", "properties": { "id": "fc651f93-93da-4b30-ad3f-9b57a82529f7", "name": "千代田区立和泉小学校", "confidence": 0.77, "address_freeform": null, "address_locality": null, "address_postcode": null }, "geometry": { "type": "Point", "coordinates": [ 139.778571, 35.698948 ] } },
{ "type": "Feature", "properties": { "id": "ff35c990-8292-488e-8d78-64d993d5c987", "name": "港区立 朝日中学校", "confidence": 0.77, "address_freeform": null, "address_locality": null, "address_postcode": null }, "geometry": { "type": "Point", "coordinates": [ 139.727420330114597, 35.644059745014822 ] } },
{ "type": "Feature", "properties": { "id": "544a3a9c-d81e-49ca-a4f5-c95f0c7c1534", "name": "大田区立大森第七中学校", "confidence": 0.77, "address_freeform": null, "address_locality": null, "address_postcode": null }, "geometry": { "type": "Point", "coordinates": [ 139.689600693305664, 35.578637399687153 ] } },
{ "type": "Feature", "properties": { "id": "62d6f64a-53ee-478c-89fa-3862358981aa", "name": "西池袋中学校", "confidence": 0.77, "address_freeform": null, "address_locality": null, "address_postcode": null }, "geometry": { "type": "Point", "coordinates": [ 139.70039963722229, 35.727462049678643 ] } },
{ "type": "Feature", "properties": { "id": "cc3fee19-52c3-498a-8662-60a1b61e2032", "name": "山中小学校", "confidence": 0.88709360361099243, "address_freeform": null, "address_locality": null, "address_postcode": null }, "geometry": { "type": "Point", "coordinates": [ 139.729757756119994, 35.603011893142003 ] } },
{ "type": "Feature", "properties": { "id": "e2872453-c8bb-4710-a81e-efe1ebe80fc3", "name": "八幡中学校", "confidence": 0.77, "address_freeform": null, "address_locality": null, "address_postcode": null }, "geometry": { "type": "Point", "coordinates": [ 139.661560392851243, 35.610836571108031 ] } },
{ "type": "Feature", "properties": { "id": "0cb617e9-a889-45cd-a2ab-106d1fac5f3e", "name": "品川区立 三木小学校", "confidence": 0.77, "address_freeform": null, "address_locality": null, "address_postcode": null }, "geometry": { "type": "Point", "coordinates": [ 139.726816494116377, 35.61533087389455 ] } },
{ "type": "Feature", "properties": { "id": "5afd3dd7-cdfc-4563-a1ca-4ee4f3cad17d", "name": "葛飾区立上小松小学校", "confidence": 0.77, "address_freeform": null, "address_locality": null, "address_postcode": null }, "geometry": { "type": "Point", "coordinates": [ 139.86226242487362, 35.728064490114484 ] } },
3:16
Write
/work/solve.py
content · 99 lines · py
import geopandas as gpd
import pandas as pd
import json
import numpy as np
# Load the bbox (23 wards)
wards_bbox = gpd.read_file('tokyo_23wards_bbox.geojson')
# Load the places
places = gpd.read_parquet('tokyo_places.parquet')
def check_school(category_dict):
if category_dict is None or not isinstance(category_dict, dict):
return False
primary = category_dict.get('primary', '')
alternates = category_dict.get('alternate', [])
if alternates is None: alternates = []
all_cats = [primary] + alternates
# For children aged 8-14, we want elementary and junior high/middle schools.
target_terms = {'elementary_school', 'junior_high_school', 'middle_school'}
for c in all_cats:
if c in target_terms:
return True
return False
# Filter schools
places['is_school'] = places.apply(lambda x: check_school(x['categories']), axis=1)
schools = places[places['is_school']].copy()
# Ensure CRS match for spatial join
if schools.crs != wards_bbox.crs:
schools = schools.to_crs(wards_bbox.crs)
# Spatial join
schools_in_wards = gpd.sjoin(schools, wards_bbox, predicate='within')
def extract_properties(row):
# name
names = row['names']
name_val = None
if isinstance(names, dict):
name_val = names.get('primary') or names.get('common')
elif isinstance(names, str):
# Just in case it's a stringified dict
try:
names_dict = json.loads(names)
name_val = names_dict.get('primary') or names_dict.get('common')
except:
name_val = names
# addresses
addresses = row['addresses']
addr_freeform = None
addr_locality = None
addr_postcode = None
if isinstance(addresses, (list, np.ndarray, pd.Series)) and len(addresses) > 0:
# addresses is an array of dicts
first_addr = addresses[0]
if isinstance(first_addr, dict):
addr_freeform = first_addr.get('freeform')
addr_locality = first_addr.get('locality')
addr_postcode = first_addr.get('postcode')
elif isinstance(first_addr, str):
try:
first_addr_dict = json.loads(first_addr)
addr_freeform = first_addr_dict.get('freeform')
addr_locality = first_addr_dict.get('locality')
addr_postcode = first_addr_dict.get('postcode')
except:
pass
return pd.Series({
'id': row['id'],
'name': name_val,
'confidence': row['confidence'],
'address_freeform': addr_freeform,
'address_locality': addr_locality,
'address_postcode': addr_postcode
})
# Create the property columns
props = schools_in_wards.apply(extract_properties, axis=1)
# Combine geometry and properties
final_df = gpd.GeoDataFrame(props, geometry=schools_in_wards.geometry, crs=schools_in_wards.crs)
# Reorder columns to ensure they match exactly as requested
# Order: id, name, confidence, address_freeform, address_locality, address_postcode
final_df = final_df[['id', 'name', 'confidence', 'address_freeform', 'address_locality', 'address_postcode', 'geometry']]
# Export to geojson
final_df.to_file('tokyo_schools.geojson', driver='GeoJSON')
print(f"Successfully exported {len(final_df)} schools to tokyo_schools.geojson")
print(final_df.head())
Wrote /work/solve.py (3364 chars).
3:24
Bash
python /work/solve.py
Successfully exported 19 schools to tokyo_schools.geojson
id ... geometry
118 09081cd7-9655-43e6-bb5e-12abf5e300b9 ... POINT (139.72613 35.7845)
1374 6cd20f5e-bdf7-4449-ab84-e5fcf8fd5625 ... POINT (139.63104 35.67138)
1729 895bf76e-c14f-4269-b7d3-41e846a3415b ... POINT (139.58112 35.73527)
1966 9bb9d1e2-d2d1-4b8b-96b2-74f88d41be35 ... POINT (139.70148 35.78014)
3720 1fae3ec6-610c-4e22-8351-0f8121b9063d ... POINT (139.73996 35.60447)
[5 rows x 7 columns]
3:37
Bash
head -n 30 tokyo_schools.geojson
{
"type": "FeatureCollection",
"name": "tokyo_schools",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features": [
{ "type": "Feature", "properties": { "id": "09081cd7-9655-43e6-bb5e-12abf5e300b9", "name": "北区立岩淵小学校", "confidence": 0.77, "address_freeform": "岩淵町6-6", "address_locality": "北区", "address_postcode": "115-0041" }, "geometry": { "type": "Point", "coordinates": [ 139.726130068302155, 35.784496739277166 ] } },
{ "type": "Feature", "properties": { "id": "6cd20f5e-bdf7-4449-ab84-e5fcf8fd5625", "name": "高井戸第三小学校", "confidence": 0.77, "address_freeform": "下高井戸4-16-24", "address_locality": "杉並区", "address_postcode": "168-0073" }, "geometry": { "type": "Point", "coordinates": [ 139.631035787769065, 35.671375431274015 ] } },
{ "type": "Feature", "properties": { "id": "895bf76e-c14f-4269-b7d3-41e846a3415b", "name": "練馬区立石神井台小学校", "confidence": 0.92067110538482666, "address_freeform": "東京都練馬区石神井台8丁目6−33", "address_locality": "練馬区", "address_postcode": "177-0045" }, "geometry": { "type": "Point", "coordinates": [ 139.581124030000012, 35.7352691 ] } },
{ "type": "Feature", "properties": { "id": "9bb9d1e2-d2d1-4b8b-96b2-74f88d41be35", "name": "板橋区立志村第四小学校", "confidence": 0.77, "address_freeform": "小豆沢4-13-1", "address_locality": "板橋区", "address_postcode": "174-0051" }, "geometry": { "type": "Point", "coordinates": [ 139.701479279969845, 35.780135324561023 ] } },
{ "type": "Feature", "properties": { "id": "1fae3ec6-610c-4e22-8351-0f8121b9063d", "name": "品川区立立会小学校", "confidence": 0.77, "address_freeform": "東大井4-15-9", "address_locality": "品川区", "address_postcode": "140-0011" }, "geometry": { "type": "Point", "coordinates": [ 139.739955127869848, 35.604465712965293 ] } },
{ "type": "Feature", "properties": { "id": "9ca37035-73c3-4b12-9290-5d813e40dd4d", "name": "足立区立本木小学校", "confidence": 0.77, "address_freeform": "本木北町7-1", "address_locality": "足立区", "address_postcode": "123-0857" }, "geometry": { "type": "Point", "coordinates": [ 139.780612643343403, 35.76502964484807 ] } },
{ "type": "Feature", "properties": { "id": "a9438e99-f9f4-4e78-b2f4-e035c97b4333", "name": "北区立滝野川紅葉中学校", "confidence": 0.77, "address_freeform": "滝野川5-55-8", "address_locality": "北区", "address_postcode": "114-0023" }, "geometry": { "type": "Point", "coordinates": [ 139.724761505505882, 35.749635044518975 ] } },
{ "type": "Feature", "properties": { "id": "fc651f93-93da-4b30-ad3f-9b57a82529f7", "name": "千代田区立和泉小学校", "confidence": 0.77, "address_freeform": "神田和泉町1", "address_locality": "千代田区", "address_postcode": "101-0024" }, "geometry": { "type": "Point", "coordinates": [ 139.778571, 35.698948 ] } },
{ "type": "Feature", "properties": { "id": "ff35c990-8292-488e-8d78-64d993d5c987", "name": "港区立 朝日中学校", "confidence": 0.77, "address_freeform": "白金3-18-2", "address_locality": "港区", "address_postcode": "108-0072" }, "geometry": { "type": "Point", "coordinates": [ 139.727420330114597, 35.644059745014822 ] } },
{ "type": "Feature", "properties": { "id": "544a3a9c-d81e-49ca-a4f5-c95f0c7c1534", "name": "大田区立大森第七中学校", "confidence": 0.77, "address_freeform": "南久が原1-3-1", "address_locality": "大田区", "address_postcode": "146-0084" }, "geometry": { "type": "Point", "coordinates": [ 139.689600693305664, 35.578637399687153 ] } },
{ "type": "Feature", "properties": { "id": "62d6f64a-53ee-478c-89fa-3862358981aa", "name": "西池袋中学校", "confidence": 0.77, "address_freeform": "西池袋4-7-1", "address_locality": "豊島区", "address_postcode": "171-0021" }, "geometry": { "type": "Point", "coordinates": [ 139.70039963722229, 35.727462049678643 ] } },
{ "type": "Feature", "properties": { "id": "cc3fee19-52c3-498a-8662-60a1b61e2032", "name": "山中小学校", "confidence": 0.88709360361099243, "address_freeform": "大井3丁目7-19", "address_locality": "品川区", "address_postcode": "140-0014" }, "geometry": { "type": "Point", "coordinates": [ 139.729757756119994, 35.603011893142003 ] } },
{ "type": "Feature", "properties": { "id": "e2872453-c8bb-4710-a81e-efe1ebe80fc3", "name": "八幡中学校", "confidence": 0.77, "address_freeform": "等々力6-4-1", "address_locality": "世田谷区", "address_postcode": "158-0082" }, "geometry": { "type": "Point", "coordinates": [ 139.661560392851243, 35.610836571108031 ] } },
{ "type": "Feature", "properties": { "id": "0cb617e9-a889-45cd-a2ab-106d1fac5f3e", "name": "品川区立 三木小学校", "confidence": 0.77, "address_freeform": "西品川3-16-28", "address_locality": "品川区", "address_postcode": "141-0033" }, "geometry": { "type": "Point", "coordinates": [ 139.726816494116377, 35.61533087389455 ] } },
{ "type": "Feature", "properties": { "id": "5afd3dd7-cdfc-4563-a1ca-4ee4f3cad17d", "name": "葛飾区立上小松小学校", "confidence": 0.77, "address_freeform": "奥戸4-1-4", "address_locality": "葛飾区", "address_postcode": "124-0022" }, "geometry": { "type": "Point", "coordinates": [ 139.86226242487362, 35.728064490114484 ] } },
{ "type": "Feature", "properties": { "id": "5de064dd-4ff7-4af5-9ffb-b0062736927a", "name": "Kanatomi Elementary School", "confidence": 0.65542727708816528, "address_freeform": "2 Chome-6-15 Kasuga", "address_locality": "文京区", "address_postcode": "112-0003" }, "geometry": { "type": "Point", "coordinates": [ 139.74168337, 35.71076227 ] } },
{ "type": "Feature", "properties": { "id": "bff6f368-d09a-4567-a689-2db87ca3e1fc", "name": "北区立柳田小学校", "confidence": 0.77, "address_freeform": "豊島2-11-20", "address_locality": "北区", "address_postcode": "114-0003" }, "geometry": { "type": "Point", "coordinates": [ 139.743938859180474, 35.757644400660084 ] } },
{ "type": "Feature", "properties": { "id": "c25e608d-597a-472e-a5b8-35339d22082e", "name": "東小岩小学校", "confidence": 0.96393924951553345, "address_freeform": "東小岩4丁目12-1", "address_locality": "江戸川区", "address_postcode": "133-0052" }, "geometry": { "type": "Point", "coordinates": [ 139.889228, 35.729269 ] } },
{ "type": "Feature", "properties": { "id": "e47a0c25-c002-480d-bc99-b99e2b15c26f", "name": "葛飾区立細田小学校", "confidence": 0.77, "address_freeform": "細田3-20-1", "address_locality": "葛飾区", "address_postcode": "124-0021" }, "geometry": { "type": "Point", "coordinates": [ 139.868468565564882, 35.741514396053596 ] } }
]
}
5:57