Opened 8 years ago
Last modified 8 years ago
#27672 closed Bug
Trouble saving specificly shaped GeometryCollection to spatialite backend — at Initial Version
Reported by: | Tim Sheerman-Chase | Owned by: | nobody |
---|---|---|---|
Component: | GIS | Version: | 1.10 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
I have trouble saving the following shape to a spatialite backend:
test="POLYGON ((0.004585821432403 53.39205655445362, 0.004370524051853 53.39197386424815, 0.003511999412435 53.39224718406162, 0.003334269156126 53.39230564512001, 0.003010761561655 53.39244359770373, 0.002313077441331 53.39273886079805, 0.002153264778766 53.3928494141358, 0.002098473352319 53.39289040220098, 0.001975450131408 53.39301575633081, 0.001571912175901 53.39342627983574, 0.00144845213223 53.39354238985806, 0.001054429533822 53.39382638644516, 0.000660690765872 53.39411654416967, 0.000258658810006 53.3944499832029, -0.000208743564432 53.39485788447784, -0.000230623648264 53.39490287808773, -0.000236528103555 53.39494760407232, -0.000210152629556 53.39499816331232, -0.000134789640903 53.39507021540287, 0.0000 53.39512930610134, 0.00001 53.39519086239132, 0.000320701021055 53.39528731045475, 0.000440541032034 53.39534108611749, 0.000495476965256 53.39537522708896, 0.000526128004445 53.39540340096636, 0.000552505095391 53.39545396900132, 0.00056354800768 53.39551912431292, 0.000561917344505 53.39565462410584, 0.001403023462806 53.39573616267051, 0.001776075560191 53.39578728279303, 0.002238095515083 53.39585922310508, 0.002415730663242 53.39589449667334, 0.00262892046244 53.39594829555955, 0.002759136797677 53.39599552084307, 0.003148451411336 53.39571166071373, 0.003852256735541 53.39519780287833, 0.004239121351319 53.39491876291179, 0.0048580524367 53.39447166424996, 0.00570113015205 53.39385822744637, 0.006098176439091 53.39356945364467, 0.006789195134597 53.39306853168554, 0.006903507578287 53.39298848546464, 0.006452162455299 53.39282038704182, 0.006147262062949 53.39269606225199, 0.005531717833986 53.39243518140811, 0.005205915002175 53.39230503820097, 0.004585821432403 53.39205655445362))" shape = wkt.loads(test) pos = GEOSGeometry(str(rp), srid=4326) rec2 = Record(currentName = placeName, currentPosition = pos, datasetSeries = self.ds, externalId = externalId) rec2.save() if not shape.is_valid: shape = shape.buffer(0.0) shape2 = GeometryCollection([shape]) shape3 = GEOSGeometry(buffer(shape2.wkb), srid=4326) try: newAnnot = RecordShapeEdit(record = rec2, data = shape3, timestamp = self.importTime, user = self.importUser) newAnnot.save() #Problem saving object is here except Exception as err: print err print shape3.valid
This fails with: NOT NULL constraint failed: records_recordshapeedit.data
If I change the point 0.00001 53.39519086239132 to 0.0001 53.39519086239132 (one less zero in the first number), it works ok. I am surprised such as small change makes any difference. The shape is valid according to shapely and the GEOSGeometry object.
My code in context (see importScheduledMonuments.py and records/models.py particularly): https://github.com/TimSC/auxgis2/commit/6b5eb82ba34bfe68751cbd33bf00038fb305c12f
Full backtrace:
Traceback (most recent call last): File "importScheduledMonuments.py", line 281, in <module> ep.ParseFile(inFi) File "importScheduledMonuments.py", line 269, in ParseFile parser.ParseFile(ha) File "importScheduledMonuments.py", line 240, in EndEl self.db.HandlePlacemark(pn, shape, self.extendedData) File "importScheduledMonuments.py", line 115, in HandlePlacemark newAnnot.save() File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 796, in save force_update=force_update, update_fields=update_fields) File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 824, in save_base updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 908, in _save_table result = self._do_insert(cls._base_manager, using, fields, update_pk, raw) File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 947, in _do_insert using=using, raw=raw) File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py", line 85, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 1045, in _insert return query.get_compiler(using=using).execute_sql(return_id) File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 1054, in execute_sql cursor.execute(sql, params) File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py", line 79, in execute return super(CursorDebugWrapper, self).execute(sql, params) File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py", line 64, in execute return self.cursor.execute(sql, params) File "/usr/local/lib/python2.7/dist-packages/django/db/utils.py", line 94, in __exit__ six.reraise(dj_exc_type, dj_exc_value, traceback) File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py", line 64, in execute return self.cursor.execute(sql, params) File "/usr/local/lib/python2.7/dist-packages/django/db/backends/sqlite3/base.py", line 337, in execute return Database.Cursor.execute(self, query, params) django.db.utils.IntegrityError: NOT NULL constraint failed: records_recordshapeedit.data