def test_load(self, tmpdir): t = load(join(FOLDER, 'xyz.kmz')) assert len(t.iloc[0]['geometry_object'].coords[0]) == 3 t = load(join(FOLDER, 'xyz.kmz'), with_z=False) assert len(t.iloc[0]['geometry_object'].coords[0]) == 2 t = GeoTable.load(join(FOLDER, 'shp', 'a.shp')) assert t['date'].dtype.name == 'datetime64[ns]' t = GeoTable.load(join(FOLDER, 'csv', 'lat-lon.csv')) assert t.iloc[0]['geometry_object'].x == -83.7430378 t = GeoTable.load(join(FOLDER, 'csv', 'latitude-longitude.csv')) assert t.iloc[0]['geometry_object'].x == -91.5305465 t = GeoTable.load(join(FOLDER, 'csv', 'latitude-longitude-wkt.csv')) assert t.iloc[0]['geometry_object'].x == -71.10973349999999 t = GeoTable.load(join(FOLDER, 'csv', 'longitude-latitude-wkt.csv')) assert t.iloc[0]['geometry_object'].x == -71.10973349999999 t = GeoTable.load(join(FOLDER, 'csv', 'wkt.csv'), parse_dates=['date']) assert t['date'].dtype.name == 'datetime64[ns]' assert t.iloc[0]['geometry_object'].type == 'Point' t = GeoTable.load(join(FOLDER, 'csv.zip'), parse_dates=['date']) assert t['date'].dtype.name == 'datetime64[ns]' x_path_object = tmpdir.join('x.txt') x_path_object.write('x') x_path = str(x_path_object) with raises(GeoTableError): GeoTable.load(x_path)
def test_from_records(self): geometry = Point(0, 0) t = GeoTable.from_records([(0, 0)], columns=['lon', 'lat']) assert t.iloc[0]['geometry_object'] == geometry t = GeoTable.from_records([(geometry.wkt, )], columns=['wkt']) assert t.iloc[0]['geometry_object'] == geometry t = GeoTable.from_records(pd.DataFrame()) assert 'geometry_object' in t.columns
def test_save_shp(self, geotable, tmpdir): target_path = str(tmpdir.join('x.shp')) with raises(GeoTableError): geotable.save_shp(target_path) target_path = str(tmpdir.join('x.zip')) geotable.save_shp(target_path) t = GeoTable.load(target_path) assert t['float16'].dtype.name == 'float64' assert t['float32'].dtype.name == 'float64' assert t['float64'].dtype.name == 'float64' assert 'float_nan' not in t assert t['int8'].dtype.name == 'int64' assert t['int16'].dtype.name == 'int64' assert t['int32'].dtype.name == 'int64' assert t['int64'].dtype.name == 'int64' assert t['bool'].dtype.name == 'int64' assert t['dt'].dtype.name == 'datetime64[ns]' assert t['dt_tz'].dtype.name == 'datetime64[ns]' assert t['timedelta'].dtype.name == 'object' assert t['category'].dtype.name == 'object' assert t['object_dt'].dtype.name == 'object' assert t['object_st'].dtype.name == 'object' t = GeoTable([ ('POINT (0 0)',), ('LINESTRING (0 0, 1 1)',), ], columns=['wkt']) with raises(GeoTableError): t.save_shp(target_path) GeoTable().save_shp(target_path) t = GeoTable.load(target_path) assert len(t) == 0
def test_draw(self, geotable): svg = geotable.draw().svg() assert 'circle' in svg t = GeoTable.load(join(FOLDER, 'csv', 'wkt.csv')) svg = t.draw().svg() assert 'circle' in svg assert 'polyline' in svg assert 'path' in svg
def test_save_csv(self, geotable, tmpdir): target_path = str(tmpdir.join('x.csv')) geotable.save_csv(target_path) t = GeoTable.load(target_path) proj4_path = replace_file_extension(target_path, '.proj4') assert t['bool'].dtype.name == 'bool' assert not exists(proj4_path) geotable.save_csv(target_path, target_proj4=SPHERICAL_MERCATOR_PROJ4) assert open(proj4_path).read() == SPHERICAL_MERCATOR_PROJ4 target_path = str(tmpdir.join('x.zip')) geotable.save_csv(target_path) t = GeoTable.load(target_path) assert t['int64'].dtype.name == 'int64' GeoTable().save_csv(target_path) t = GeoTable.load(target_path) assert len(t) == 0
def test_drop_duplicate_geometries(self): t = GeoTable.from_records([ (0, 0), (0, 0), (0, 1), (1, 2), ], columns=['lon', 'lat']) assert len(t) == 4 assert len(t.drop_duplicate_geometries()) == 3 assert len(t) == 4 assert len(t.drop_duplicate_geometries(inplace=True)) == 3 assert len(t) == 3
def test_from_csv(self, tmpdir): p = tmpdir.join('x.csv') p.write('') with raises(EmptyGeoTableError): GeoTable.from_csv(str(p)) p.write('x\n0') with raises(GeoTableError): GeoTable.from_csv(str(p)) p.write('wkt\nx') with raises(GeoTableError): GeoTable.from_csv(str(p)) t = GeoTable.from_csv(join(FOLDER, 'csv', 'proj4-from-row.csv'), target_proj4=LONGITUDE_LATITUDE_PROJ4) assert type(t.iloc[0]['geometry_object']) == LineString assert type(t.iloc[1]['geometry_object']) == Polygon t = GeoTable.from_csv(join(FOLDER, 'csv', 'proj4-from-file.csv')) assert t.iloc[0]['geometry_proj4'] == normalize_proj4( open(join(FOLDER, 'csv', 'proj4-from-file.proj4')).read())
def test_save_kml(self, geotable, tmpdir): target_path = str(tmpdir.join('x.kml')) geotable.save_kmz(target_path) t = GeoTable.load(target_path) assert len(t) == 1
def test_from_gdal(self): with raises(GeoTableError): GeoTable.from_gdal(join(FOLDER, 'conftest.py')) t = GeoTable.from_gdal(join(FOLDER, 'shp', 'b.shp'), target_proj4=UTM_PROJ4) assert t.iloc[0]['geometry_object'].x == -638500.4251527891
def test_load_utm_proj4(self): assert load_utm_proj4(join(FOLDER, 'xyz.kmz')) == UTM_PROJ4 assert GeoTable.load_utm_proj4(join(FOLDER, 'shp.zip')) == UTM_PROJ4
def test_load(self, tmpdir): t = load(join(FOLDER, 'xyz.kmz')) assert len(t.iloc[0]['geometry_object'].coords[0]) == 3 assert len(t) == 3 t = load(join(FOLDER, 'xyz.kmz'), drop_z=True, bounding_box=( -83.743038, 42.280826, -83.743037, 42.280825)) assert len(t.iloc[0]['geometry_object'].coords[0]) == 2 assert len(t) == 1 t = GeoTable.load(join(FOLDER, 'shp', 'a.shp')) assert t['date'].dtype.name == 'datetime64[ns]' t = GeoTable.load(join(FOLDER, 'csv', 'lat-lon.csv')) assert t.iloc[0]['geometry_object'].x == -83.7430378 t = GeoTable.load(join(FOLDER, 'csv', 'latitude-longitude.csv')) assert t.iloc[0]['geometry_object'].x == -91.5305465 t = GeoTable.load(join(FOLDER, 'csv', 'latitude-longitude-wkt.csv')) assert t.iloc[0]['geometry_object'].x == -71.10973349999999 t = GeoTable.load(join(FOLDER, 'csv', 'longitude-latitude-wkt.csv')) assert t.iloc[0]['geometry_object'].x == -71.10973349999999 t = GeoTable.load(join(FOLDER, 'csv', 'wkt.csv'), parse_dates=['date']) assert t['date'].dtype.name == 'datetime64[ns]' assert t.iloc[0]['geometry_object'].type == 'Point' t = GeoTable.load(join(FOLDER, 'csv.zip'), parse_dates=['date']) assert t['date'].dtype.name == 'datetime64[ns]' x_folder = uncompress(join(FOLDER, 'csv.zip'), tmpdir.join('csv')) t = GeoTable.load(x_folder) assert len(t) > 1 x_path_object = tmpdir.join('x.txt') x_path_object.write('x') x_path = str(x_path_object) with raises(GeoTableError): GeoTable.load(x_path) t = GeoTable.load(join(FOLDER, 'csv-bad.tar.gz')) assert len(t) == 1 t = GeoTable.load(join(FOLDER, 'shp-bad.tar.gz')) assert len(t) == 2 t = GeoTable.load( 'https://data.cityofnewyork.us/api/geospatial/tqmj-j8zm' '?method=export&format=Original') assert len(t) == 5
GEOTABLE = GeoTable.from_records(pd.DataFrame([{ 'float16': 0.1, 'float32': 0.1, 'float64': 0.1, 'float_nan': np.nan, 'int8': 1, 'int16': 1, 'int32': 1, 'int64': 1, 'bool': True, 'dt': datetime(2000, 1, 1, 1, 0), 'dt_tz': datetime(2000, 1, 1, 1, 0).astimezone(TIMEZONE), 'timedelta': datetime(2000, 1, 1, 1, 0) - datetime(2000, 1, 1, 0, 0), 'category': 'vegetable', 'object_dt': date(2000, 1, 1), 'object_lt': [0, np.finfo('float').eps], 'object_st': 'whee', 'geometry_object': Point(0, 0), 'geometry_layer': 'layer_name', 'geometry_proj4': LONGITUDE_LATITUDE_PROJ4, }]).astype({ 'float16': 'float16', 'float32': 'float32', 'float64': 'float64', 'float_nan': 'float64', 'int8': 'int8', 'int16': 'int16', 'int32': 'int32', 'int64': 'int64', 'bool': 'bool', 'category': 'category', }))