BUG: Check that set_geometry will set valid geometry column

This commit is contained in:
Carson Farmer
2013-11-18 22:31:20 -06:00
committed by Kelsey Jordahl
parent 24bfe85976
commit bb4b7f68db
2 changed files with 16 additions and 3 deletions
+6 -3
View File
@@ -11,7 +11,7 @@ import fiona
import numpy as np
from pandas import DataFrame, Series
from shapely.geometry import mapping
from shapely.geometry.base import BaseGeometry
from geopandas import GeoSeries
from geopandas.plotting import plot_dataframe
import geopandas.io
@@ -114,7 +114,7 @@ class GeoDataFrame(DataFrame):
elif isinstance(col, (list, np.ndarray)):
level = col
elif hasattr(col, 'ndim') and col.ndim != 1:
raise ValueError("Must pass array with one dimension only")
raise ValueError("Must pass array with one dimension only.")
else:
try:
level = frame[col].values
@@ -132,10 +132,13 @@ class GeoDataFrame(DataFrame):
del frame[to_remove]
if isinstance(level, GeoSeries) and level.crs != crs:
# avoids caching issues/crs sharing issues
# Avoids caching issues/crs sharing issues
level = level.copy()
level.crs = crs
# Check that we are using a listlike of geometries
if not all(isinstance(item, BaseGeometry) for item in level):
raise TypeError("Input geometry column must contain valid geometry objects.")
frame[geo_column_name] = level
frame._geometry_column_name = geo_column_name
frame.crs = crs
+10
View File
@@ -112,7 +112,17 @@ class TestDataFrame(unittest.TestCase):
df = self.df.copy()
df.geometry = 'apple'
<<<<<<< HEAD
with self.assertRaises(KeyError):
=======
# non-geometry error
def _should_raise_value_error_with_non_geo():
df = self.df.copy()
df.geometry = range(df.shape[0])
self.assertRaises(TypeError, _should_raise_value_error_with_non_geo)
def _should_raise_key_error():
>>>>>>> BUG: Check that set_geometry will set valid geometry column
df = self.df.copy()
del df['geometry']
df['geometry']