rendrom / rosreestr2coord

Вычисление координат участка по кадастровому номеру с сайта https://pkk.rosreestr.ru
MIT License
167 stars 79 forks source link

Fix "Invalid 'layerDefs' is specified" error #45

Closed sergeybarkov closed 3 years ago

sergeybarkov commented 3 years ago

Добавлен Layer: Кадастровые кварталы (ID: 20). До этого генерировались ID от 0 до 19, что на некоторых ЗУ выдавало ошибку "Invalid 'layerDefs' is specified"

sergeybarkov commented 3 years ago

Добрый день! Видимо все несколько сложнее. Для некоторых ЗУ требуется указать в layerdefs ID 20, некоторые - наоборот - при добавлении ID 20 - начинают выдавать ошибку. Пока не понял, по какой логике формируется параметр. Например: 50:26:0180310:4 - выдает результат только с указанным ID 20 :(

rendrom commented 3 years ago

44 баг с ошибкой

ссылка на тайл, генерируемая на https://pkk.rosreestr.ru

layers=show:6,7,8,9
layerDefs={
  "6":"ID = '50:26:180310:4'",
  "7":"ID = '50:26:180310:4'",
  "8":"ID = '50:26:180310:4'",
  "9":"ID = '50:26:180310:4'"
}
rendrom commented 3 years ago

залил версию с layerDefs 6,7,8,9. Загрузка работает для всех участков что я пробовал. Но так подбирать каждый раз как-то не очень стабильно. Надо бы понять логику формирования этих параметров, если она есть.

stolyar92 commented 3 years ago

из 17 участков загрузить удалось 6

debug.log

DEBUG:rosreestr2coord.logger:https://pkk.rosreestr.ru/api/features/1/50:35:50211:748
DEBUG:rosreestr2coord.logger:https://pkk.rosreestr.ru/arcgis/rest/services/PKK6/CadastreSelected/MapServer/export?dpi=96&transparent=false&format=png&layers=show%3A6%2C7%2C8%2C9&bbox=4354724.960469155%2C7334814.547918555%2C4353724.960469155%2C7333814.547918555&bboxSR=102100&imageSR=102100&size=1000%2C1000&layerDefs=%7B%276%27%3A+%22ID+%3D+%2750%3A35%3A50211%3A748%27%22%2C+%277%27%3A+%22ID+%3D+%2750%3A35%3A50211%3A748%27%22%2C+%278%27%3A+%22ID+%3D+%2750%3A35%3A50211%3A748%27%22%2C+%279%27%3A+%22ID+%3D+%2750%3A35%3A50211%3A748%27%22%7D&f=json
DEBUG:rosreestr2coord.logger:https://pkk.rosreestr.ru/arcgis/rest/services/PKK6/CadastreSelected/MapServer/export?dpi=96&transparent=false&format=png&layers=show%3A6%2C7%2C8%2C9&bbox=4355724.960469155%2C7337814.547918555%2C4354724.960469155%2C7336814.547918555&bboxSR=102100&imageSR=102100&size=1000%2C1000&layerDefs=%7B%276%27%3A+%22ID+%3D+%2750%3A35%3A50211%3A748%27%22%2C+%277%27%3A+%22ID+%3D+%2750%3A35%3A50211%3A748%27%22%2C+%278%27%3A+%22ID+%3D+%2750%3A35%3A50211%3A748%27%22%2C+%279%27%3A+%22ID+%3D+%2750%3A35%3A50211%3A748%27%22%7D&f=json
DEBUG:rosreestr2coord.logger:https://pkk.rosreestr.ru/arcgis/rest/services/PKK6/CadastreSelected/MapServer/export?dpi=96&transparent=false&format=png&layers=show%3A6%2C7%2C8%2C9&bbox=4356724.960469155%2C7336814.547918555%2C4355724.960469155%2C7335814.547918555&bboxSR=102100&imageSR=102100&size=1000%2C1000&layerDefs=%7B%276%27%3A+%22ID+%3D+%2750%3A35%3A50211%3A748%27%22%2C+%277%27%3A+%22ID+%3D+%2750%3A35%3A50211%3A748%27%22%2C+%278%27%3A+%22ID+%3D+%2750%3A35%3A50211%3A748%27%22%2C+%279%27%3A+%22ID+%3D+%2750%3A35%3A50211%3A748%27%22%7D&f=json
DEBUG:rosreestr2coord.logger:https://pkk.rosreestr.ru/arcgis/rest/services/PKK6/CadastreSelected/MapServer/export?dpi=96&transparent=false&format=png&layers=show%3A6%2C7%2C8%2C9&bbox=4358724.960469155%2C7335814.547918555%2C4357724.960469155%2C7334814.547918555&bboxSR=102100&imageSR=102100&size=1000%2C1000&layerDefs=%7B%276%27%3A+%22ID+%3D+%2750%3A35%3A50211%3A748%27%22%2C+%277%27%3A+%22ID+%3D+%2750%3A35%3A50211%3A748%27%22%2C+%278%27%3A+%22ID+%3D+%2750%3A35%3A50211%3A748%27%22%2C+%279%27%3A+%22ID+%3D+%2750%3A35%3A50211%3A748%27%22%7D&f=json
WARNING:rosreestr2coord.logger:Invalid 'layerDefs' is specified
WARNING:rosreestr2coord.logger:the JSON object must be str, bytes or bytearray, not bool
sergeybarkov commented 3 years ago

Как временный вариант можно попробовать использовать несколько рабочих наборов layerDefs. Сначала пробуем скачать тайл с одним набором (0-19) - если не прошло - пробуем другой набор layerDefs (6-9) т т.д. Костыль, конечно, лютый. Но мне кажется % ошибок так сократится.

rendrom commented 3 years ago

Покажите, пожалуйста, список участков. Мне не удалось случайным образом найти проблемные с публичной карты. Возможно получится установить какую-нибудь закономерность.

stolyar92 commented 3 years ago

Покажите, пожалуйста, список участков. Мне не удалось случайным образом найти проблемные с публичной карты. Возможно получится установить какую-нибудь закономерность.

50:35:0050211:748 50:35:0000000:20790 50:35:0000000:20752 50:35:0000000:628 50:35:0000000:629 50:35:0000000:630 50:35:0000000:631 50:35:0000000:632 50:35:0000000:633 50:35:0000000:634 50:35:0000000:635 50:35:0040103:665 50:35:0040103:1950 50:35:0040103:1947 50:35:0000000:3 50:35:0040103:663 50:35:0040103:2272

stolyar92 commented 3 years ago

Покажите, пожалуйста, список участков. Мне не удалось случайным образом найти проблемные с публичной карты. Возможно получится установить какую-нибудь закономерность.

50:35:0050211:748 50:35:0000000:20790 50:35:0000000:20752 50:35:0000000:628 50:35:0000000:629 50:35:0000000:630 50:35:0000000:631 50:35:0000000:632 50:35:0000000:633 50:35:0000000:634 50:35:0000000:635 50:35:0040103:665 50:35:0040103:1950 50:35:0040103:1947 50:35:0000000:3 50:35:0040103:663 50:35:0040103:2272

При данном наборе меньше всего ошибок на layerDefs выпадает при: layers = list(map(str, range(6, 10)))

stolyar92 commented 3 years ago

еще я не очень понимаю это поведение: 57% 32/56 Completed, 32 tiles received

скрипт загружает тайлы и в какой-то момент он считает что ему 32 тайлов достаточно и переходит к следующему участку. Естественно он не вычисляет геометрию, ибо тайлов не хватает. Подобное поведение замечено почти за всеми участками, где кол-во тайлов превышает 5. В среднем скрипт грузит 2/3 тайлов и переходит к следующему участку.

PbIXTOP commented 3 years ago

Пытался обработать ОКСы столкнулся проблемой с этой же проблемой Для ОКСов на стороне росреестра формируется под строчку layers = list(map(str, range(0, 6))) А Для рядом стоящих участков подходит layers = list(map(str, range(6, 10)))

MrChebur commented 3 years ago

Версия кода из репозитория layers = list(map(str, range(6, 10))) выдавала ошибку Invalid 'layerDefs' is specified на кадастровый участок 86:04:0000003:346 Попробовал фикс предлагаемый @sergeybarkov - не помогло. Исправил на layers = list(map(str, range(6, 19))) - граница загрузилась.

rendrom commented 3 years ago

Нужен вариант или способ который бы позволил выполнять загрузку по всем участкам. То есть по информации об участке формировать список слоёв с которых извлекать данные.