nextgisweb
nextgisweb copied to clipboard
Падает если в слое есть неверные координаты
ERROR:waitress:Exception when serving /resource/71/wfs
Traceback (most recent call last):
File "/home/rykov/git/ngw2/env/local/lib/python2.7/site-packages/waitress/channel.py", line 337, in service
task.service()
File "/home/rykov/git/ngw2/env/local/lib/python2.7/site-packages/waitress/task.py", line 173, in service
self.execute()
File "/home/rykov/git/ngw2/env/local/lib/python2.7/site-packages/waitress/task.py", line 392, in execute
app_iter = self.channel.server.application(env, start_response)
File "/home/rykov/git/ngw2/env/local/lib/python2.7/site-packages/pyramid/router.py", line 242, in __call__
response = self.invoke_subrequest(request, use_tweens=True)
File "/home/rykov/git/ngw2/env/local/lib/python2.7/site-packages/pyramid/router.py", line 217, in invoke_subrequest
response = handle_request(request)
File "/home/rykov/git/ngw2/env/local/lib/python2.7/site-packages/pyramid/tweens.py", line 21, in excview_tween
response = handler(request)
File "/home/rykov/git/ngw2/env/local/lib/python2.7/site-packages/pyramid_tm/__init__.py", line 82, in tm_tween
reraise(*exc_info)
File "/home/rykov/git/ngw2/env/local/lib/python2.7/site-packages/pyramid_tm/__init__.py", line 63, in tm_tween
response = handler(request)
File "/home/rykov/git/ngw2/env/local/lib/python2.7/site-packages/pyramid/router.py", line 163, in handle_request
response = view_callable(context, request)
File "/home/rykov/git/ngw2/env/local/lib/python2.7/site-packages/pyramid/config/views.py", line 385, in viewresult_to_response
result = view(context, request)
File "/home/rykov/git/ngw2/nextgisweb/nextgisweb/wfsserver/view.py", line 51, in handler
path_info='/'+sourcenames, params=params)
File "/home/rykov/git/ngw2/nextgisweb/nextgisweb/wfsserver/third_party/FeatureServer/Server.py", line 92, in dispatchRequest
result = method(action)
File "/home/rykov/git/ngw2/nextgisweb/nextgisweb/wfsserver/nextgis_to_fs.py", line 43, in select
for row in result:
File "/home/rykov/git/ngw2/nextgisweb/nextgisweb/postgis/model.py", line 431, in __iter__
for row in conn.execute(query):
File "/home/rykov/git/ngw2/env/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 662, in execute
params)
File "/home/rykov/git/ngw2/env/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 761, in _execute_clauseelement
compiled_sql, distilled_params
File "/home/rykov/git/ngw2/env/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 874, in _execute_context
context)
File "/home/rykov/git/ngw2/env/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1024, in _handle_dbapi_exception
exc_info
File "/home/rykov/git/ngw2/env/local/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 196, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb)
File "/home/rykov/git/ngw2/env/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 867, in _execute_context
context)
File "/home/rykov/git/ngw2/env/local/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 324, in do_execute
cursor.execute(statement, parameters)
InternalError: (InternalError) transform: couldn't project point (3540.3 5415.78 0): latitude or longitude exceeded limits (-14)
'SELECT ogc_fid AS id, st_astext(st_transform(wkb_geometry, %(st_transform_1)s)) AS geom, uniq_uid AS f1, obj_type AS f2 \nFROM "thematic"."sensors_video" \nWHERE geometrytype(wkb_geometry) IN (%(geometrytype_1)s, %(geometrytype_2)s) ORDER BY ogc_fid' {'geometrytype_2': u'MULTIPOINT', 'geometrytype_1': u'POINT', 'st_transform_1': 3857}
Как воспроизвести проблему:
- Создать в Postgis таблицу, часть геометрий которой содержит неверные координаты. На пример, вставить в таблицу системы координат EPSG:4326 точку, координаты которой превышают 360 градусов:
INSERT INTO ... (geom) VALUES (St_GeomFromTEXT('POINT(3540.3 5415.78 0)', 4326)); - Создать в NGW слой PostGIS, ссылающийся на эту таблицу.
- Обратиться к геометрии таблицы через NGW, например, через ссылку "Даные GeoJSON". В результате возникнет ошибка перепроецирования
InternalError: (InternalError) transform: couldn't project point (3540.3 5415.78 0): latitude or longitude exceeded limits (-14)
'SELECT gid AS id, st_astext(st_transform(geom, %(st_transform_1)s)) AS geom, building AS f1, a_strt AS f2, a_sbrb AS f3, a_hsnmbr AS f4, b_levels AS f5, name AS f6 \nFROM "public"."building-point" \nWHERE geometrytype(geom) IN (%(geometrytype_1)s, %(geometrytype_2)s) ORDER BY gid' {'geometrytype_2': u'MULTIPOINT', 'geometrytype_1': u'POINT', 'st_transform_1': 3857}
Таким образом, ошибку подтверждаю. Но она никак не связана с WFS, поэтому снимаю метку WFS.