def save_package_extent(package_id, geometry=None, srid=None): '''Adds, updates or deletes the package extent geometry. package_id: Package unique identifier geometry: a Python object implementing the Python Geo Interface (i.e a loaded GeoJSON object) srid: The spatial reference in which the geometry is provided. If None, it defaults to the DB srid. Will throw ValueError if the geometry object does not provide a geo interface. The responsibility for calling model.Session.commit() is left to the caller. ''' db_srid = int(config.get('ckan.spatial.srid', '4326')) existing_package_extent = Session.query(PackageExtent).filter( PackageExtent.package_id == package_id).first() if geometry: shape = asShape(geometry) if not srid: srid = db_srid package_extent = PackageExtent(package_id=package_id, the_geom=WKTElement(shape.wkt, srid)) # Check if extent exists if existing_package_extent: # If extent exists but we received no geometry, we'll delete the existing one if not geometry: existing_package_extent.delete() log.debug('Deleted extent for package %s' % package_id) else: # Check if extent changed if not compare_geometry_fields(package_extent.the_geom, existing_package_extent.the_geom): # Update extent existing_package_extent.the_geom = package_extent.the_geom existing_package_extent.save() log.debug('Updated extent for package %s' % package_id) else: log.debug('Extent for package %s unchanged' % package_id) elif geometry: # Insert extent Session.add(package_extent) log.debug('Created new extent for package %s' % package_id)
def save_package_extent(package_id, geometry = None, srid = None): '''Adds, updates or deletes the package extent geometry. package_id: Package unique identifier geometry: a Python object implementing the Python Geo Interface (i.e a loaded GeoJSON object) srid: The spatial reference in which the geometry is provided. If None, it defaults to the DB srid. Will throw ValueError if the geometry object does not provide a geo interface. The responsibility for calling model.Session.commit() is left to the caller. ''' db_srid = int(config.get('ckan.spatial.srid', '4326')) existing_package_extent = Session.query(PackageExtent).filter(PackageExtent.package_id==package_id).first() if geometry: shape = asShape(geometry) if not srid: srid = db_srid package_extent = PackageExtent(package_id=package_id, the_geom=WKTElement(shape.wkt, srid)) # Check if extent exists if existing_package_extent: # If extent exists but we received no geometry, we'll delete the existing one if not geometry: existing_package_extent.delete() log.debug('Deleted extent for package %s' % package_id) else: # Check if extent changed if not compare_geometry_fields(package_extent.the_geom, existing_package_extent.the_geom): # Update extent existing_package_extent.the_geom = package_extent.the_geom existing_package_extent.save() log.debug('Updated extent for package %s' % package_id) else: log.debug('Extent for package %s unchanged' % package_id) elif geometry: # Insert extent Session.add(package_extent) log.debug('Created new extent for package %s' % package_id)
def test_different_points(self): extent1 = self._get_extent_object(self.geojson_examples['point']) extent2 = self._get_extent_object(self.geojson_examples['point_2']) assert not compare_geometry_fields(extent1.the_geom, extent2.the_geom)
def test_different_points(self): extent1 = self._get_extent_object(self.geojson_examples["point"]) extent2 = self._get_extent_object(self.geojson_examples["point_2"]) assert not compare_geometry_fields(extent1.the_geom, extent2.the_geom)
def test_same_points(self): extent1 = self._get_extent_object(self.geojson_examples['point']) extent2 = self._get_extent_object(self.geojson_examples['point']) assert compare_geometry_fields(extent1.the_geom, extent2.the_geom)
def test_same_points(self): extent1 = self._get_extent_object(self.geojson_examples["point"]) extent2 = self._get_extent_object(self.geojson_examples["point"]) assert compare_geometry_fields(extent1.the_geom, extent2.the_geom)