dd-l2-tokyo-overture-schools

Status: done
Score: 61
Duration: 5:58
Cost: 0.99¢
Model: google/gemma-4-26b-a4b-it

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