Exemplo n.º 1
0
    def get_user_data(username: str) -> List[Tuple[Address, OsmPoint]]:
        data_with_coordinate = []
        with create_session() as session:
            user_record = session.query(User).filter(User.username == username).first()
            user_addresses = (
                session.query(UsersData)
                .filter(UsersData.user_id == user_record.id)
                .all()
            )
            for item in user_addresses:
                data = (
                    session.query(AddressToPoints)
                    .filter(AddressToPoints.id == item.id)
                    .first()
                )
                coordinates = (
                    session.query(AddressToCoordinates)
                    .filter(AddressToCoordinates.address_id == item.id)
                    .first()
                )
                data_with_coordinate.append(
                    (
                        Address(data.street, data.number, data.city, ''),
                        OsmPoint(coordinates.latitude, coordinates.longitude),
                    )
                )

        return data_with_coordinate
Exemplo n.º 2
0
def find_centroid(coordinates: numpy.array, vertices_number: int) -> OsmPoint:
    """Функция для поиска центра масс по набору координат"""
    xs = coordinates[:, 0]
    ys = coordinates[:, 1]
    area = 0
    for index in range(vertices_number - 1):
        area += 0.5 * (xs[index] * ys[index + 1] - xs[index + 1] * ys[index])

    if area == 0.0:
        return OsmPoint(0.0, 0.0)

    area_factor = 1 / (6.0 * area)
    sum_x = 0
    sum_y = 0
    for index in range(vertices_number - 1):
        k = xs[index] * ys[index + 1] - xs[index + 1] * ys[index]
        sum_x += area_factor * (xs[index] + xs[index + 1]) * k
        sum_y += area_factor * (ys[index] + ys[index + 1]) * k

    return OsmPoint(sum_x, sum_y)
Exemplo n.º 3
0
    def get_coordinates(city: str, street: str, number: str) -> Union[OsmPoint, None]:
        """Получаем координаты по адресу"""
        with create_session() as session:
            item = (
                session.query(AddressToPoints)
                .filter(AddressToPoints.city == city)
                .filter(AddressToPoints.street == street)
                .filter(AddressToPoints.number == number)
                .first()
            )

            if item is None:
                return None

            address_id = getattr(item, 'id')

            coordinates = (
                session.query(AddressToCoordinates)
                .filter(AddressToCoordinates.address_id == address_id)
                .first()
            )
            latitude = getattr(coordinates, 'latitude')
            longitude = getattr(coordinates, 'longitude')
            return OsmPoint(latitude, longitude)
Exemplo n.º 4
0
def point():
    return OsmPoint(0.0, 1.0, 123)
Exemplo n.º 5
0
def point():
    return OsmPoint(1.0, 2.0)
Exemplo n.º 6
0
    assert response.status_code == 200
    assert data['Successful registration'] == {'username': '******'}


def test_add_user_invalid_data(client):
    response = client.post(
        '/geocoder/api/v1.0/registration',
        data=json.dumps({'username': '******'}),
        content_type='application/json',
    )
    data = json.loads(response.get_data())
    assert response.status_code == 400
    assert data['ERROR'] == 'Invalid data, please give username and password'


@pytest.mark.parametrize('point', (None, OsmPoint(1.0, 2.0)))
@patch.object(DbWorker, 'get_coordinates')
def test_get_address_coordinate(mock, client, point):
    mock.return_value = point
    response = client.get(
        '/geocoder/api/v1.0/get_coord/?city=city&street=street&number=number'
    )
    data = json.loads(response.get_data())
    assert response.status_code == 200
    if point is None:
        assert data['Attention'] == 'This address does not exist in data base'
    else:
        assert data['Coordinates']['Latitude'] == point.latitude
        assert data['Coordinates']['Longitude'] == point.longitude

Exemplo n.º 7
0
 def extract_coordinates_osm(data: str) -> OsmPoint:
     """Для каждой точки извлекаем широту и долготу"""
     s = re.findall(r'[0-9]{2}.[0-9]+', data)
     coordinates = [int(s[0]), float(s[6]), float(s[7])]
     return OsmPoint(coordinates[1], coordinates[2], int(coordinates[0]))