|
@@ -1,5 +1,6 @@
|
|
|
import requests
|
|
import requests
|
|
|
import json
|
|
import json
|
|
|
|
|
+import pygeohash as pgh
|
|
|
from google.cloud import firestore
|
|
from google.cloud import firestore
|
|
|
|
|
|
|
|
import os
|
|
import os
|
|
@@ -15,24 +16,29 @@ with open('map features.txt', 'r') as f:
|
|
|
for line in f:
|
|
for line in f:
|
|
|
if line[0] == "#":
|
|
if line[0] == "#":
|
|
|
continue
|
|
continue
|
|
|
|
|
+ category, category_name = line.split(":")
|
|
|
|
|
+ category_name = category_name.replace("\"", "").strip()
|
|
|
overpass_query = f"""
|
|
overpass_query = f"""
|
|
|
[out:json];
|
|
[out:json];
|
|
|
area["ISO3166-1"="PL"][admin_level=2];
|
|
area["ISO3166-1"="PL"][admin_level=2];
|
|
|
-node[{line[:-1]}](area);
|
|
|
|
|
|
|
+node[{category}](area);
|
|
|
out center;
|
|
out center;
|
|
|
"""
|
|
"""
|
|
|
response = requests.get(overpass_url, params={"data": overpass_query})
|
|
response = requests.get(overpass_url, params={"data": overpass_query})
|
|
|
try:
|
|
try:
|
|
|
elements = response.json()["elements"]
|
|
elements = response.json()["elements"]
|
|
|
except json.JSONDecodeError:
|
|
except json.JSONDecodeError:
|
|
|
- print(f"Could not decode data for {line[:-1]}")
|
|
|
|
|
|
|
+ print(f"Could not decode data for {category}")
|
|
|
continue
|
|
continue
|
|
|
- object_type = line.split("=")[1].strip()
|
|
|
|
|
|
|
+ object_type = category.split("=")[1].strip()
|
|
|
data = {}
|
|
data = {}
|
|
|
for el in elements:
|
|
for el in elements:
|
|
|
try:
|
|
try:
|
|
|
- data["name"] = el["tags"].get("name", object_type)
|
|
|
|
|
- data["location"] = firestore.GeoPoint(el["lat"], el["lon"])
|
|
|
|
|
|
|
+ data["name"] = el["tags"].get("name", category_name)
|
|
|
|
|
+ data["location"] = {
|
|
|
|
|
+ "geohash": pgh.encode(el["lat"], el["lon"], precision=9),
|
|
|
|
|
+ "geopoint": firestore.GeoPoint(el["lat"], el["lon"])
|
|
|
|
|
+ }
|
|
|
data["category"] = object_type
|
|
data["category"] = object_type
|
|
|
batch.set(db.collection("Places").document(str(el["id"])), data)
|
|
batch.set(db.collection("Places").document(str(el["id"])), data)
|
|
|
count += 1
|
|
count += 1
|