added first draft of score calculation script
This commit is contained in:
parent
d4c4d3bba7
commit
897cbfdca8
|
@ -0,0 +1,33 @@
|
|||
import geopandas as gpd
|
||||
from scipy.spatial import cKDTree
|
||||
import numpy as np
|
||||
import pyproj
|
||||
from functools import lru_cache
|
||||
|
||||
# Constants
|
||||
EPSG_WGS84 = 4326
|
||||
EPSG_WebMercator = 3857
|
||||
|
||||
# Load the geodata.
|
||||
gdf = gpd.read_file("berlin-latest-free.shp/gis_osm_pois_free_1.shp")
|
||||
|
||||
# Get all restaurant points and represent as meters on web mercator projection.
|
||||
rest = gdf[gdf['fclass'].isin(['restaurant','cafe','fast_food','biergarten','pub'])].to_crs(epsg=EPSG_WGS84)
|
||||
|
||||
# Construct a cKDTree of all restaurant points for easy nearest-neighbor lookup.
|
||||
coords_rest = np.vstack([rest.geometry.x, rest.geometry.y]).T
|
||||
tree_rest = cKDTree(coords_rest)
|
||||
|
||||
# Construct a projection from lat/long to web mercator.
|
||||
proj_rest = pyproj.Transformer.from_crs(EPSG_WGS84, EPSG_WebMercator, always_xy=True)
|
||||
|
||||
def distance_to_nearest_restaurant(lon: float, lat: float) -> float:
|
||||
|
||||
# Project coordinates to mercator.
|
||||
x, y = proj.transform(lon, lat)
|
||||
|
||||
# Get the closest point from the tree.
|
||||
dist, idx = tree.query([x, y])
|
||||
|
||||
# Returned distance is in meters (from mercator projection).
|
||||
return float(dist)
|
|
@ -0,0 +1,64 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"id": "fadca06b",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from score import *"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"id": "060c6bca",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"75.16849866412393"
|
||||
]
|
||||
},
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"distance_to_nearest_restaurant(13.4050, 52.5200)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "210c57dc",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3 (ipykernel)",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.10.12"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 5
|
||||
}
|
Loading…
Reference in New Issue