def test_length_ws(geojson_wenceslas_square):
    assert calculate_distance(geojson_wenceslas_square,
                              unit=Unit.meters) == pytest.approx(59.32,
                                                                 rel=1e-1)
    assert calculate_distance(geojson_wenceslas_square,
                              unit=Unit.kilometers) == pytest.approx(0.06,
                                                                     rel=1e-1)
    assert calculate_distance(geojson_wenceslas_square,
                              unit=Unit.miles) == pytest.approx(0.04, rel=1e-1)
    assert calculate_distance(geojson_wenceslas_square,
                              unit=Unit.feet) == pytest.approx(194.61,
                                                               rel=1e-1)
    assert calculate_distance(geojson_wenceslas_square,
                              unit=Unit.yards) == pytest.approx(64.87,
                                                                rel=1e-1)
def test_length_sb(geojson_santiago_bernabeu):
    assert calculate_distance(geojson_santiago_bernabeu,
                              unit=Unit.meters) == pytest.approx(104.71,
                                                                 rel=1e-1)
    assert calculate_distance(geojson_santiago_bernabeu,
                              unit=Unit.kilometers) == pytest.approx(0.10,
                                                                     rel=1e-1)
    assert calculate_distance(geojson_santiago_bernabeu,
                              unit=Unit.miles) == pytest.approx(0.07, rel=1e-1)
    assert calculate_distance(geojson_santiago_bernabeu,
                              unit=Unit.feet) == pytest.approx(343.53,
                                                               rel=1e-1)
    assert calculate_distance(geojson_santiago_bernabeu,
                              unit=Unit.yards) == pytest.approx(114.51,
                                                                rel=1e-1)
def test_length_multiline(geojson_multilinestring):
    assert calculate_distance(geojson_multilinestring,
                              unit=Unit.meters) == pytest.approx(63002.59,
                                                                 rel=1e-1)
    assert calculate_distance(geojson_multilinestring,
                              unit=Unit.kilometers) == pytest.approx(63,
                                                                     rel=1e-1)
    assert calculate_distance(geojson_multilinestring,
                              unit=Unit.miles) == pytest.approx(39.15,
                                                                rel=1e-1)
    assert calculate_distance(geojson_multilinestring,
                              unit=Unit.feet) == pytest.approx(206701.4,
                                                               rel=1e-1)
    assert calculate_distance(geojson_multilinestring,
                              unit=Unit.yards) == pytest.approx(68900.47,
                                                                rel=1e-1)
def test_exceptions():

    exception_msg = "Invalid GeoJSON provided. Should be geojson.geometry.LineString,"
    " geojson.geometry.MultiLineString or dict"

    with pytest.raises(GeojsonLengthException, match=exception_msg):
        calculate_distance("wrong_geojson", exception_msg)

    exception_msg = "Provided GeoJSON object has no geometry field"
    with pytest.raises(GeojsonLengthException, match=exception_msg):
        calculate_distance({}, exception_msg)

    exception_msg = (
        "Provided GeoJSON object has no coordinates specified in geometry field"
    )
    with pytest.raises(GeojsonLengthException, match=exception_msg):
        calculate_distance({"geometry": {"type": "LineString"}}, exception_msg)

    exception_msg = "Provided GeoJSON object has no type specified in geometry field"
    with pytest.raises(GeojsonLengthException, match=exception_msg):
        calculate_distance({"geometry": {"coordinates": [[]]}}, exception_msg)
Example #5
0
    def _prepare_bus_df(self):
        # Keep only bus lines
        bus_lines_only = [x for x in self.bus_geojson.features if 'bus' in str(x.properties['name']).lower()]

        self.bus_df = pd.DataFrame()
        columns = ['name', 'LON', 'LAT', 'distance_total_meters']
        for feature in bus_lines_only:
            distance_meters = calculate_distance(feature, Unit.meters)

            cnt = 0
            array = []
            for line_string in feature.geometry.coordinates:
                for lon_lat in line_string:
                    array.append([
                        feature.properties['name'], lon_lat[0], lon_lat[1], distance_meters
                    ])
                    cnt = cnt + 1

            partial_df = pd.DataFrame(array, columns=columns)
            partial_df['co2'] = (distance_meters * 0.0013) / cnt
            self.bus_df = pd.concat([self.bus_df, partial_df])
def test_length_sb_w_alt(geojson_santiago_bernabeu_w_alt):
    assert calculate_distance(geojson_santiago_bernabeu_w_alt,
                              unit=Unit.meters) == pytest.approx(104.71,
                                                                 rel=1e-1)