mirror of
https://github.com/google/earthengine-api.git
synced 2025-12-08 19:26:12 +00:00
111 lines
3.3 KiB
Python
111 lines
3.3 KiB
Python
#!/usr/bin/env python3
|
|
"""Tests for the table_converter module."""
|
|
|
|
from typing import Any, Dict, Optional, Type
|
|
|
|
from absl.testing import parameterized
|
|
import geopandas
|
|
from geopandas import testing
|
|
import pandas
|
|
|
|
import unittest
|
|
from ee import table_converter
|
|
|
|
|
|
class TableConverterTest(parameterized.TestCase):
|
|
|
|
def _make_feature(
|
|
self, geometry: Dict[str, Any], properties: Dict[str, Any]
|
|
) -> Dict[str, Any]:
|
|
return {'type': 'Feature', 'geometry': geometry, 'properties': properties}
|
|
|
|
@parameterized.named_parameters(
|
|
('pd', 'PANDAS_DATAFRAME', table_converter.PandasConverter),
|
|
('gpd', 'GEOPANDAS_GEODATAFRAME', table_converter.GeoPandasConverter),
|
|
('mixed', 'pANDAs_DATAframe', None),
|
|
('invalid', 'UNKNOWN', None),
|
|
)
|
|
def test_from_file_format(
|
|
self,
|
|
data_format: str,
|
|
expected: Optional[Type[table_converter.TableConverter]],
|
|
) -> None:
|
|
"""Verifies `from_file_format` returns the correct converter class."""
|
|
if expected is None:
|
|
self.assertIsNone(table_converter.from_file_format(data_format))
|
|
else:
|
|
self.assertIsInstance(
|
|
table_converter.from_file_format(data_format), expected
|
|
)
|
|
|
|
def test_pandas_converter(self) -> None:
|
|
"""Verifies `PandasConverter` does the correct conversion."""
|
|
converter = table_converter.PandasConverter()
|
|
|
|
dataframe = converter.do_conversion(
|
|
iter([
|
|
self._make_feature(
|
|
geometry={'type': 'Point', 'coordinates': [0, 0]},
|
|
properties={'colname': 'A', 'another-one': '10'},
|
|
),
|
|
self._make_feature(
|
|
geometry={'type': 'Point', 'coordinates': [1, 1]},
|
|
properties={'colname': 'B'},
|
|
),
|
|
])
|
|
)
|
|
pandas.testing.assert_frame_equal(
|
|
dataframe,
|
|
pandas.DataFrame([
|
|
{
|
|
'geo': {'type': 'Point', 'coordinates': [0, 0]},
|
|
'colname': 'A',
|
|
'another-one': '10',
|
|
},
|
|
{
|
|
'geo': {'type': 'Point', 'coordinates': [1, 1]},
|
|
'colname': 'B',
|
|
},
|
|
]),
|
|
)
|
|
|
|
def test_geopandas_converter(self) -> None:
|
|
"""Verifies `GeoPandasConverter` does the correct conversion."""
|
|
converter = table_converter.GeoPandasConverter()
|
|
|
|
dataframe = converter.do_conversion(
|
|
iter([
|
|
self._make_feature(
|
|
geometry={'type': 'Point', 'coordinates': [0, 0]},
|
|
properties={'colname': 'A', 'another-one': '10'},
|
|
),
|
|
self._make_feature(
|
|
geometry={'type': 'Point', 'coordinates': [1, 1]},
|
|
properties={'colname': 'B'},
|
|
),
|
|
])
|
|
)
|
|
|
|
feature_coll = {
|
|
'type': 'FeatureCollection',
|
|
'features': [
|
|
self._make_feature(
|
|
geometry={'type': 'Point', 'coordinates': [0, 0]},
|
|
properties={'colname': 'A', 'another-one': '10'},
|
|
),
|
|
self._make_feature(
|
|
geometry={'type': 'Point', 'coordinates': [1, 1]},
|
|
properties={'colname': 'B'},
|
|
),
|
|
],
|
|
'bbox': (1.0, 1.0, 2.0, 2.0),
|
|
}
|
|
testing.assert_geodataframe_equal(
|
|
dataframe,
|
|
geopandas.GeoDataFrame.from_features(feature_coll),
|
|
)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|