예제 #1
0
    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
예제 #2
0
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 ""
예제 #3
0
파일: main.py 프로젝트: ADari-Ka/mapsAPI
    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
예제 #4
0
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()     
예제 #5
0
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]
예제 #6
0
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}")
예제 #7
0
 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"])
예제 #8
0
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)
예제 #10
0
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)
예제 #14
0
    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.')
예제 #15
0
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",
예제 #17
0
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)
예제 #18
0
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} метров')
예제 #19
0
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])
예제 #20
0
파일: main.py 프로젝트: pepilica/web-6
            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()
예제 #21
0
)

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} метров')
예제 #22
0
    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)
예제 #23
0
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)), 'Метров')
예제 #24
0
    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]
예제 #25
0
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
예제 #26
0
파일: 7.py 프로젝트: sergiusnick/YL_P3
        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