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)
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)