-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfunctions.py
65 lines (56 loc) · 2.31 KB
/
functions.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import requests
def geocode(address):
geocoder_request = f"http://geocode-maps.yandex.ru/1.x/"
geocoder_params = {
"apikey": "40d1649f-0493-4b70-98ba-98533de7710b",
"geocode": address,
"format": "json"}
response = requests.get(geocoder_request, params=geocoder_params)
if response:
json_response = response.json()
else:
raise RuntimeError(
f"""Ошибка выполнения запроса:
{geocoder_request}
Http статус: {response.status_code} ({response.reason})""")
features = json_response["response"]["GeoObjectCollection"]["featureMember"]
return features[0]["GeoObject"] if features else None
def get_coordinates(address):
toponym = geocode(address)
if not toponym:
return None, None
toponym_coodrinates = toponym["Point"]["pos"]
toponym_longitude, toponym_lattitude = toponym_coodrinates.split(" ")
return float(toponym_longitude), float(toponym_lattitude)
def get_ll_spn(address):
toponym = geocode(address)
if not toponym:
return None, None
toponym_coordinates = toponym["Point"]["pos"]
toponym_longitude, toponym_lattitude = toponym_coordinates.split(" ")
ll = ",".join([toponym_longitude, toponym_lattitude])
envelope = toponym['boundedBy']['Envelope']
l, b = envelope["lowerCorner"].split(" ")
r, t = envelope["upperCorner"].split(" ")
dx = abs(float(l) - float(r)) / 2
dy = abs(float(t) - float(b)) / 2
span = f"{dx},{dy}"
return ll, span
def get_nearest_object(point, kind):
ll = "{0},{1}".format(point[0], point[1])
geocoder_request = f"http://geocode-maps.yandex.ru/1.x/"
geocoder_params = {
"apikey": '40d1649f-0493-4b70-98ba-98533de7710b',
"geocode": ll,
"format": "json"}
if kind:
geocoder_params['kind'] = kind
response = requests.get(geocoder_request, params=geocoder_params)
if not response:
raise RuntimeError(
f"""Ошибка выполнения запроса:
{geocoder_request}
Http статус: {response.status_code,} ({response.reason})""")
json_response = response.json()
features = json_response["response"]["GeoObjectCollection"]["featureMember"]
return features[0]["GeoObject"]["name"] if features else None