def add_reverse_toponym_search(self, pos): point = self.screen_to_geo(pos) toponym = reverse_geocode(ll(point[0], point[1])) if self.search_result == None: self.search_result = SearchResult( point, toponym["metaDataProperty"]["GeocoderMetaData"]["text"] if toponym else None, toponym["metaDataProperty"]["GeocoderMetaData"]["Address"].get( "postal_code") if toponym else None) self.first_lon_lat = point # (lat, lng) elif self.second_search == None: self.second_search = SearchResult( point, toponym["metaDataProperty"]["GeocoderMetaData"]["text"] if toponym else None, toponym["metaDataProperty"]["GeocoderMetaData"]["Address"].get( "postal_code") if toponym else None) self.second_lon_lat = point self.distance_between_two = lonlat_distance( self.first_lon_lat, self.second_lon_lat) print('Расстояние между двумя точками:', round(self.distance_between_two), 'метров') else: self.search_result = self.second_search = None
def org_for_coords(coords, COORDS): search_api_server = "https://search-maps.yandex.ru/v1/" api_key = "dda3ddba-c9ea-4ead-9010-f43fbc15c6e3" address_ll = str(coords[0]) + "," + str(coords[1]) search_params = { "apikey": api_key, "lang": "ru_RU", "spn": "0.001,0.001", "rspn": "1", "ll": coords, "type": "biz" } response = requests.get(search_api_server, params=search_params) json_response = response.json() #print("------") for i in range(len(json_response["features"])): organization = json_response["features"][i] org_name = organization["properties"]["CompanyMetaData"]["name"] org_address = organization["properties"]["CompanyMetaData"]["address"] point = organization["geometry"]["coordinates"] #print(lonlat_distance(point, COORDS), org_address, point[0]-COORDS[0], point[1]-COORDS[1]) if lonlat_distance(point, COORDS) <= 50: point = str(point[0]) + "," + str(point[1]) return org_name + "," + org_address return ""
def mousePressEvent(self, event): x, y = event.x() - 9, event.y() - 15 coords = self.get_degrees(x, y) # Get coords by click if coords is None: return address = MapWindow.get_address(coords) if address is None: return params = {"apikey": SEARCH_KEY, "text": address} if event.button() == Qt.LeftButton: params["type"] = 'geo' rez = self.found_toponym_info(self.get_json(params)) if rez is None: return self.toponym = rez[1] elif event.button() == Qt.RightButton: params["type"] = 'biz' rez = self.found_toponym_info(self.get_json(params)) if rez is None: return biz_coords, toponym = rez if lonlat_distance(coords, biz_coords) <= 50: self.toponym = toponym self.update_image() # Show point
def main(): pygame.init() screen = pygame.display.set_mode((600, 450)) mp = MapParams() map_file = load_map(mp) while True: event = pygame.event.wait() if event.type == pygame.QUIT: break elif event.type == pygame.KEYUP: mp.update(event) map_file = load_map(mp) elif event.type == pygame.MOUSEBUTTONDOWN: if event.button == 1: pos = pygame.mouse.get_pos() lst.append(pos) screen.blit(pygame.image.load(map_file), (0, 0)) if len(lst) > 1: pygame.draw.lines(screen, (255,0,0), False, lst, 2) count = 1 font = pygame.font.Font(None, 30) for i in lst: pygame.draw.circle(screen, (255,0,0), i, 3, 0) text = font.render(str(count), 1, (255,0,0)) screen.blit(text, (int(i[0]) - 15, int(i[1]) - 15)) count += 1 dist = 0 if len(lst) > 1: for j in range(len(lst) - 1): a = mp.screen_to_geo(lst[j]) b = mp.screen_to_geo(lst[j + 1]) dist += lonlat_distance(a, b) calories = 0 if dist > 0: calories = int(dist * 67.5 / 1000) dist = int(dist) if len(lst) < 2: text = render_text('Укажите точки с помощью левой кнопки мыши.') else: text = render_text('Вы прошли ' + str(dist) + ' м. и потратили ' + str(calories) + ' ккал.') screen.blit(text, (0, 430)) if mp.search_result: if mp.use_postal_code and mp.search_result.postal_code: text = render_text(mp.search_result.postal_code + ', ' + mp.search_result.address) else: text = render_text(mp.search_result.address) pygame.display.flip() pygame.quit()
def get_nearest_organization(toponym): search_api_server = 'https://search-maps.yandex.ru/v1/' api_key = 'dda3ddba-c9ea-4ead-9010-f43fbc15c6e3' address_ll = ','.join(str(x) for x in geocoder.get_ll(toponym)) address_spn = ','.join(str(x) for x in geocoder.get_spn(toponym)) search_params = { 'apikey': api_key, 'lang': 'ru_RU', 'll': address_ll, 'spn': address_spn, 'type': 'biz', 'rspn': 1, } try: response = requests.get(search_api_server, params=search_params) if not response: print('Ошибка выполнения запроса:') print(search_params) print('Http статус:', response.status_code, '(', response.reason, ')') sys.exit(1) except: print('Запрос не удалось выполнить. Проверьте наличие сети Интернет.') sys.exit(1) # Преобразуем ответ в json-объект json_response = response.json() organizations = json_response['features'] answer = (1e100, None, None) my_ll = geocoder.get_ll(toponym) for organization in organizations: pos = organization['geometry']['coordinates'] if distance.lonlat_distance(my_ll, pos) <= 50 and \ distance.lonlat_distance(my_ll, pos) <= answer[0]: answer = distance.lonlat_distance(my_ll, pos), \ organization['properties']['CompanyMetaData']['name'], pos return answer[1], answer[2]
def main(): addr = ' '.join(sys.argv[1:]) p1_pos = get_pos(addr) toponim_info = find_close(TOPONIM_TYPE, p1_pos) map = get_map(p1_pos, toponim_info["pos"]) # Map show toponim_info['distance'] = lonlat_distance(p1_pos, toponim_info['pos']) Image.open(BytesIO(map.content)).show() for k, i in toponim_info.items(): print(f"{k}: \t {i}")
def add_reverse_org_search(self, pos): self.search_result = None point = self.screen_to_geo(pos) org = find_business(ll(point[0], point[1])) if not org: return org_point = org["geometry"]["coordinates"] org_lon = float(org_point[0]) org_lat = float(org_point[1]) if lonlat_distance((org_lon, org_lat), point) <= 50: self.search_result = SearchResult( point, org["properties"]["CompanyMetaData"]["name"])
def cinema(bot, update, user_data): loc = update.message.location coord = [str(loc['longitude']), str(loc['latitude'])] cinemas = search(','.join(coord)) user_data['cinemas'] = cinemas for i in cinemas: if 'cinemastar' in i[2] or 'karo' in i[2] or 'mirage' in i[ 2] or 'kinomax' in i[2] or 'cinemapark' in i[2]: dist = round(lonlat_distance(coord, i[1])) update.message.reply_text(i[0] + ': ' + str(dist) + ' метров') else: cinemas = [] if cinemas: update.message.reply_text("Пришлите номер понравившегося кинотеатра") return 2 else: return ConversationHandler.END
def get_data_of_organization(organization): text = [] start_point = list(map(float, address_ll.split(','))) org_point = organization['geometry']['coordinates'] name = organization['properties']['name'] address = organization['properties']['description'] time_of_work = organization['properties']['CompanyMetaData']['Hours'][ 'text'] distance = int(lonlat_distance(start_point, org_point)) text.append(f'Название: {name}') text.append(f'Адрес: {address}') text.append(f'Время работы: {time_of_work}') text.append(f'Растояние: {distance}') return '\n'.join(text)
def find_org(pos): x, y = pix_to_rad(pos) top = get_toponym(str(x) + ',' + str(y)) if top: cur_map.show_address(top) org = get_organization(cur_map.address) org_x, org_y = get_org_pos(org) distance = lonlat_distance((x, y), (org_x, org_y)) if distance <= 500: cur_map.pt = [org_x, org_y] top = get_toponym(str(org_x) + ',' + str(org_y)) if top: cur_map.show_address(top) if post.p: result.make_text(org['properties']['name'] + ' ' + cur_map.address, 'black', 'white') else: result.make_text( org['properties']['name'] + ' ' + cur_map.address + ' ' + cur_map.postal_code, 'black', 'white')
def main(): toponym_to_find = " ".join(sys.argv[1:]) lat, lon = get_coordinates(toponym_to_find) address_ll = "{0},{1}".format(lat, lon) span = "0.005,0.005" # Получаем координаты ближайшей аптеки. organization = find_business(address_ll, span, "аптека") point = organization["geometry"]["coordinates"] org_lat = float(point[0]) org_lon = float(point[1]) point_param = "pt={0},{1},pm2dgl".format(org_lat, org_lon) show_map("ll={0}&spn={1}".format(address_ll, span), "map", add_params=point_param) # Добавляем на карту точку с исходным адресом. points_param = point_param + "~{0},pm2rdl".format(address_ll) show_map("ll={0}&spn={1}".format(address_ll, span), "map", add_params=points_param) # Автопозиционирование show_map(map_type="map", add_params=points_param) # Сниппет # Название организации. name = organization["properties"]["CompanyMetaData"]["name"] # Адрес организации. address = organization["properties"]["CompanyMetaData"]["address"] # Время работы time = organization["properties"]["CompanyMetaData"]["Hours"]["text"] # Расстояние distance = round(lonlat_distance((lon, lat), (org_lon, org_lat))) snippet = u"Название:\t{name}\nАдрес:\t{address}\nВремя работы:\t{time}\nРасстояние:\t{distance}м.".format( **locals()) print(snippet)
def main(): toponym_to_find = " ".join(sys.argv[1:]) lat, lon = get_coordinates(toponym_to_find) address_ll = "{0},{1}".format(lat, lon) span = "0.005,0.005" organization = find_business(address_ll, span, "аптека") point = organization["geometry"]["coordinates"] org_lat = float(point[0]) org_lon = float(point[1]) point_param = "pt={0},{1},pm2dgl".format(org_lat, org_lon) show_map("ll={0}&spn={1}".format(address_ll, span), "map", add_params=point_param) points_param = point_param + "~{0},pm2rdl".format(address_ll) show_map("ll={0}&spn={1}".format(address_ll, span), "map", add_params=points_param) show_map(map_type="map", add_params=points_param) name = organization["properties"]["CompanyMetaData"]["name"] address = organization["properties"]["CompanyMetaData"]["address"] time = organization["properties"]["CompanyMetaData"]["Hours"]["text"] distance = round(lonlat_distance((lon, lat), (org_lon, org_lat))) snippet = u"Название:\t{name}\nАдрес:\t{address}\nВремя работы:\t{time}\nРасстояние:\t{distance}м.".format( **locals()) print(snippet)
def main(): address = " ".join(sys.argv[1:]) toponym = search(address) toponym_coodrinates = ','.join(toponym['Point']['pos'].split()) response = pharmacies(toponym_coodrinates) json_response = response.json() organization = json_response['features'][0] org_name = organization["properties"]["CompanyMetaData"]["name"] org_address = organization["properties"]["CompanyMetaData"]["address"] point = organization["geometry"]["coordinates"] org_point = f'{point[0]},{point[1]}' time = organization["properties"]["CompanyMetaData"]["Hours"]["text"] dist = int(lonlat_distance(list(map(float, toponym_coodrinates.split(','))), [float(point[0]), float(point[1])])) snippet = f'адрес: {org_address}', f'название аптеки: {org_name}', f'время работы: {time}', f'расстояние: {dist}м' map_params = { 'l': 'map', 'pt': f'{toponym_coodrinates},pm2am~{org_point},pm2bm' } map_api_server = "http://static-maps.yandex.ru/1.x/" pharmacy = requests.get(map_api_server, params=map_params) map_file = "map.png" with open(map_file, "wb") as file: file.write(pharmacy.content) pygame.init() screen = pygame.display.set_mode((600, 450)) screen.blit(pygame.image.load(map_file), (0, 0)) font = pygame.font.Font(None, 20) for i in range(len(snippet)): text = font.render(snippet[i], True, (0, 0, 255)) text_x = 10 text_y = 10 + text.get_height() * i screen.blit(text, (text_x, text_y)) pygame.display.flip() while pygame.event.wait().type != pygame.QUIT: pass pygame.quit() os.remove(map_file)
def add_reverse_org_search(self, pos): point = self.screen_to_geo(pos) org_lat = float(point[0]) org_lon = float(point[1]) toponym = find_business(ll(point[0], point[1])) name = SearchResult(point, toponym["properties"]["CompanyMetaData"]["name"]) address = SearchResult( point, toponym["properties"]["CompanyMetaData"]["address"]) time = SearchResult( point, toponym["properties"]["CompanyMetaData"]["Hours"]["text"]) distance = round( lonlat_distance((self.lon, self.lat), (org_lon, org_lat))) if distance <= 50: snippet = u"Название:\t{name}\nАдрес:\t{address}\nВремя работы:\t{time}\nРасстояние:\t{distance}м.".format( **locals()) print(snippet) else: print('Nothing was found.')
def way(ad1, ad2): a, b = get_coordinates(ad1), get_coordinates(ad2) return lonlat_distance(a, b) / 1000
# Преобразуем ответ в json-объект json_response = response.json() organization1 = json_response["features"] minimum = 100000000 for i in range(len(organization1)): # Получаем первую найденную организацию. organization = json_response["features"][i] # Название организации. org_name = organization["properties"]["CompanyMetaData"]["name"] # Адрес организации. org_address = organization["properties"]["CompanyMetaData"]["address"] point = organization["geometry"]["coordinates"] S = int(lonlat_distance([float(toponym_longitude), float(toponym_lattitude)], [float(point[0]), float(point[1])])) if minimum > S: minimum = S apothecary_address = org_address apothecary_name = org_name apothecary_time_open = \ organization["properties"]["CompanyMetaData"]["Hours"]['Availabilities'][0]['Intervals'][0]['from'] apothecary_time_close = \ organization["properties"]["CompanyMetaData"]["Hours"]['Availabilities'][0]['Intervals'][0]['to'] apothecary_org_point = "{0},{1}".format(point[0], point[1]) S_apothecary = str(S) # Собираем параметры для запроса к StaticMapsAPI: map_params = { # Воспользуйтесь автоматическим позиционированием карты "l": "map",
organization = json_response["features"][0] org_name = organization["properties"]["CompanyMetaData"]["name"] org_address = organization["properties"]["CompanyMetaData"]["address"] point = organization["geometry"]["coordinates"] org_point = "{0},{1}".format(point[0], point[1]) map_params = { "ll": address_ll, # "spn": ",".join([delta, delta]), "l": "sat,skl", "pt": f"{org_point},pm2wtm2~{address_ll},pm2grm1" } dist = lonlat_distance((float(point[0]), float(point[1])), (float(toponym_longitude), float(toponym_lattitude))) print(org_name) print(org_address) print(organization['properties']['CompanyMetaData']['Hours']['text']) print(f'Расстояние до аптеки - {int(dist)}м') map_api_server = "http://static-maps.yandex.ru/1.x/" response = requests.get(map_api_server, params=map_params) map_file = "map.png" try: with open(map_file, "wb") as file: file.write(response.content) except IOError as ex: print("Ошибка записи временного файла:", ex)
import distance points = ['36.309855,54.571470', '36.285527,54.554340'] dist = int( distance.lonlat_distance(map(float, points[0].split(',')), map(float, points[1].split(',')))) print('Координаты дома: ' + points[0]) print('Координаты школы: ' + points[1]) print(f'Расстояние от дома до школы: {dist} метров')
import os import sys import pygame import requests import distance points = [ '30.304766,59.939517', '30.273474,59.929367', '30.261972,59.917065', '30.071928,59.916731', '29.904905,59.889461' ] dist = 0 for i in range(len(points) - 1): dist += distance.lonlat_distance(map(float, points[i].split(',')), map(float, points[i + 1].split(','))) d = dist / 2 i = 0 while d > 0: d = d - distance.lonlat_distance(map(float, points[i].split(',')), map(float, points[i + 1].split(','))) i += 1 print(d, i, points[i].split(',')) len = distance.lonlat_distance(map(float, points[i].split(',')), map(float, points[i - 1].split(','))) d = abs(d) Ax = float(points[i].split(',')[0]) Ay = float(points[i].split(',')[1]) Bx = float(points[i - 1].split(',')[0])
organization = response_pharmacy["features"][0] org_name = organization["properties"]["CompanyMetaData"]["name"] org_address = organization["properties"]["CompanyMetaData"][ "address"] org_hours = organization["properties"]["CompanyMetaData"] point = organization["geometry"]["coordinates"] org_point = "{0},{1}".format(point[0], point[1]) print('Name: ' + org_name) print('Address: ' + org_address) if 'Hours' in org_hours: print('Working hours: ' + org_hours['Hours']['text']) else: print('Working hours: ?') print( 'Distance: ' + '%.1f' % (lonlat_distance([point[0], point[1]], map(float, toponym_coodrinates.split(' ')))) + 'метров') print('---------------') map_params = { "l": "map", "pt": ",".join([toponym_longitude, toponym_lattitude]) + '~' + org_point } map_api_server = "http://static-maps.yandex.ru/1.x/" response = requests.get(map_api_server, params=map_params) Image.open(BytesIO(response.content)).show()
) ostank_bashnya_coord = '37.611706,55.819845' response = requests.get( f"http://geocode-maps.yandex.ru/1.x/?apikey=40d1649f-0493-4b70-98ba-98533de7710b&geocode={point}&format=json" ) if response: json_response = response.json() toponym = json_response["response"]["GeoObjectCollection"][ "featureMember"][0]["GeoObject"] toponym_coodrinates = toponym["Point"]["pos"] toponym_coodrinates = ','.join(toponym_coodrinates.split()) else: print("Ошибка выполнения запроса:") print("Http статус:", response.status_code, "(", response.reason, ")") # Расстояние в км от Останкинской башни до точки l = int( distance.lonlat_distance(map(float, ostank_bashnya_coord.split(',')), map(float, toponym_coodrinates.split(',')))) / 1000 print(f'Расстояние от вас до Останкинской башни l = {l} километров') print( f'Формула для расчёта высоты приемной антенны: h2 = ((l/3.6 - sqrt(525)) ** 2' ) h1 = 525 h2 = int((l / 3.6 - math.sqrt(h1))**2) print(f'Для получения сигнала Вам нужно поднять антенну на {h2} метров')
if not response: pass json_response = response.json() organization = json_response["features"][0] return organization if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument("address", type=str, nargs="*") args = parser.parse_args() address = " ".join(args.address) address_ll = get_ll_spn(address) organization = get_organisation(address_ll[0]) org_name = organization["properties"]["CompanyMetaData"]["name"] org_address = organization["properties"]["CompanyMetaData"]["address"] org_coords = organization["geometry"]["coordinates"] org_time = organization["properties"]["CompanyMetaData"]["Hours"]["text"] lon_lat = address_ll[0].split(',') lon, lat = lon_lat org_distance = round(lonlat_distance((lon, lat), org_coords)) delta = "0.005" show_map(address_ll[0], spn=",".join([delta, delta]), add_params=True, start_pos=org_coords) snippet = f"Название: {org_name}\nАдрес: {org_address}\nВремя Работы: {org_time}\nРасстояние: {org_distance}" print(snippet)
import requests, distance url = 'https://geocode-maps.yandex.ru/1.x/?apikey=46baa895-6d77-4b6b-8fe6-a88c43a5f388&format=json&geocode=' print('Расстояние от двух точек.') first_adress = input('Адрес первой точки: ') second_adress = input('Адрес второй точки: ') s_resp = requests.get(url + first_adress) s_point = s_resp.json()['response']['GeoObjectCollection']['featureMember'][0][ 'GeoObject']['Point']['pos'].split(' ') s_point[0], s_point[1] = float(s_point[0]), float(s_point[1]) h_resp = requests.get(url + second_adress) h_point = h_resp.json()['response']['GeoObjectCollection']['featureMember'][0][ 'GeoObject']['Point']['pos'].split(' ') h_point[0], h_point[1] = float(h_point[0]), float(h_point[1]) print(s_point, h_point) print(round(distance.lonlat_distance(s_point, h_point)), 'Метров')
text = organization["properties"]["CompanyMetaData"]["Hours"]['text'] # Получаем координаты ответа. point = organization["geometry"]["coordinates"] org_point = "{0},{1}".format(point[0], point[1]) delta = "0.005" res.append((org_point, text)) # Собираем параметры для запроса к StaticMapsAPI: for i in res: if i[1][0:9] == 'ежедневно': color = 'pm2dgl' else: color = 'pm2lbl' param_point += f'{i[0]},{color}~' distance = lonlat_distance(list(map(float, toponym_coodrinates.split(' '))), list(map(float, point))) with open('info_org.txt', 'w', encoding='utf-8', newline='') as file: res = ( f'Название аптеки: {org_name}\nАдрес аптеки: {org_address}' + f'\nВремя работы: {org_hours}\nРасстояние до аптеки: {round(distance, 2)} метр(ов)(а)' ) write = file.write(res) map_params = { # позиционируем карту центром на наш исходный адрес "ll": ','.join(get_coords(org_address).split(' ')), "spn": ",".join([delta, delta]), "l": "map", # добавим точку, чтобы указать найденную аптеку "pt": param_point[0:-1]
def func_distance(event, vk, lens, in_menu, first_place, renew): if event.message.text == 'Расстояния': lens = False in_menu = False first_place = False if first_place: toponym_coodrinates1, toponym_coodrinates2 = False, False second_place = event.message.text geocoder_request = f"http://geocode-maps.yandex.ru/1.x/?apikey=40d1649f-0493-4b70-98ba-98533de7710b&geocode={first_place}&format=json" response = requests.get(geocoder_request) if response: json_response = response.json() toponym = json_response["response"]["GeoObjectCollection"][ "featureMember"][0]["GeoObject"] toponym_coodrinates1 = toponym["Point"]["pos"] geocoder_request = f"http://geocode-maps.yandex.ru/1.x/?apikey=40d1649f-0493-4b70-98ba-98533de7710b&geocode={second_place}&format=json" response = requests.get(geocoder_request) if response: json_response = response.json() toponym = json_response["response"]["GeoObjectCollection"][ "featureMember"][0]["GeoObject"] toponym_coodrinates2 = toponym["Point"]["pos"] if toponym_coodrinates1 and toponym_coodrinates2: data = str( round( lonlat_distance(toponym_coodrinates1.split(), toponym_coodrinates2.split())) / 1000).split(".") vk.messages.send( user_id=event.obj.message['from_id'], message= f'Расстояние между {first_place} и {second_place} - {data[0]} км {data[1]} м. Ещё раз?', keyboard=open('kb5.json', 'r', encoding='UTF-8').read(), random_id=random.randint(0, 2**64)) renew = True first_place = False elif toponym_coodrinates1: vk.messages.send(user_id=event.obj.message['from_id'], message='Что-то не так со вторым городом!', keyboard=open('kb3.json', 'r', encoding='UTF-8').read(), random_id=random.randint(0, 2**64)) first_place = False renew = True elif toponym_coodrinates1: vk.messages.send(user_id=event.obj.message['from_id'], message='Что-то не так с первым городом!', keyboard=open('kb3.json', 'r', encoding='UTF-8').read(), random_id=random.randint(0, 2**64)) first_place = False renew = True else: vk.messages.send(user_id=event.obj.message['from_id'], message='Что-то не так с городами!', keyboard=open('kb3.json', 'r', encoding='UTF-8').read(), random_id=random.randint(0, 2**64)) first_place = False renew = True else: if event.message.text and (not lens or renew): vk.messages.send( user_id=event.obj.message['from_id'], message= 'Определение расстояния между двумя местами. Введите первое:', keyboard=open('kb3.json', 'r', encoding='UTF-8').read(), random_id=random.randint(0, 2**64)) lens = True renew = False elif lens: first_place = event.message.text vk.messages.send(user_id=event.obj.message['from_id'], message='Введите второе место:', keyboard=open('kb3.json', 'r', encoding='UTF-8').read(), random_id=random.randint(0, 2**64)) return event, vk, lens, in_menu, first_place, renew
print("Запрос не удалось выполнить. Проверьте подключение к сети Интернет.") sys.exit(1) def f(x): return (R + x) ** 2 - (((R + 525) ** 2 + (R + x) ** 2 - 2 * cos(180 * L / (pi * R)) * (R + x) * (R + 525)) ** 0.5 - d) ** 2 \ - (R + 525) ** 2 + d ** 2 # Когда сокращала, лучше не выглядело R = 6371000 coord1 = (37.611704, 55.819721) coord2 = coordinates(sys.argv[1:]) d = 3600 * 525 ** 0.5 l_max = (d ** 2 - 525 ** 2) ** 0.5 L = lonlat_distance(coord1, coord2) print(L, l_max) if L <= l_max: print(0) else: res = 0 while True: print(f(res), f(res + 0.02)) if res > 1000: print("Вряд ли антенна больше 1 км существует") break elif f(res) * f(res + 0.02) < 0: print(res, 123) print("Высота антенны:", res + 0.01) break