Русский
Русский
English
Статистика
Реклама

Гис

Сертифицированные VS. несертифицированные средства защиты информации требования регулятора или реальная необходимость?

29.09.2020 12:13:11 | Автор: admin

Вопрос о необходимости использования сертифицированных средств защиты информации, включая и криптографические, не теряет своей актуальности для коммерческих организаций уже очень долгое время. Он неустанно обсуждается в рамках выполнения требований по обеспечению безопасности персональных данных, критической информационной инфраструктуры, информационной инфраструктуры финансовых организаций и даже государственных информационных систем.

Сейчас же на авансцену выходит ГОСТ Р 57580.1-2017, соответствовать которому уже с начала следующего года должны информационные системы многих компаний финансового сектора. Документ дает весомый повод в очередной раз погрузиться в чтение многостраничного текста, чтобы понять, а требуются ли сертифицированные СЗИ и СКЗИ?

Получая большое количество аналогичных вопросов, мы решили рассмотреть эту тему комплексно, как в рамках ГОСТа, так и иных применимых правовых документов. И, конечно же, поделиться полученным результатом с вами.

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

Несколько слов о сертификации СЗИ

По своей сути сертификация это одна из возможных форм подтверждения соответствия технического средства защиты определенным требованиям по безопасности. Такие требования определятся в специальных документах, разрабатываемых ФСТЭК, ФСБ России, а также в технических условиях и технических заданиях по безопасности. Таким образом, антивирус, имеющий сертификат соответствия по какому-либо документу, гарантированно соответствует всем требованиям, описанным в нем.

Для владельцев систем использование сертифицированных СЗИ, как правило, позволяет упростить процессы выполнения и требований регулятора в части построения систем защиты и проведения ее испытаний, в том числе и аттестационных. Обратной стороной является ограниченный (не в плане количества наименований, но в плане возможности их применения) рынок готовых сертифицированных решений, их стоимость, а иногда и просто желание владельца системы редко кому захочется переделывать эффективно функционирующую систему защиты только по причине отсутствия в ней сертифицированных СЗИ.

Все это приводит к необходимости понимая владельцем системы, в каких случаях регулятор требует использования сертифицированных СЗИ, когда настоятельно рекомендует это делать, а когда делегирует решение этого вопроса непосредственно на самого владельца информационной системы.

Типовые организации и применимые к ним НПА

Далее мы предлагаем рассмотреть на примере типовой организаций перечень применимых НПА и проанализировать имеющиеся в них требования о необходимости использования сертифицированных средств защиты информации.

В качестве наиболее показательного примера нами была выбрана организация финансового сектора небольшой региональный банк, являющийся участником платежной системы Банка России, предлагающий своим клиентам возможность идентификации посредством использования биометрической информации. Также предположим, что Банк не осуществляет обработку сведений, составляющих государственную тайну при наличии такого рода информации вопрос о необходимости использования сертифицированных СЗИ, как мы понимаем, не стоит. Далее по тексту будут раскрыты еще несколько особенностей выбранной нами организации, обосновывающие применение тех или иных НПА. Для простоты далее будем именовать наш пример как просто Банк.

Для того, чтобы ответить на поставленные нами в самом начале вопросы, специалисту по информационной безопасности необходимо изучить довольно объемный список нормативных актов, а именно:

  1. ГОСТ Р 57580, который приобретает статус обязательного документа для организаций, на которые распространяются требования Положений БР 672-П, 683-П.

  2. Ряд положений Банка России: Положения 382-П, 672-П, 683-П, устанавливающих обязательные для финансовых организаций требования к обеспечению защиты информации, выполнять которые в той или иной степени необходимо каждому банку.

  3. Приказ Минкомсвязи 321 и методический документ БР 4-МР, регламентирующие порядок защиты биометрических персональных данных, так как выбранный нами Банк взаимодействует с Единой биометрической системой.

  4. ФЗ О персональных данных и подзаконные акты, определяющие требования к обеспечению защиты персональных данных, так как Банк является оператором персональных данных, осуществляя обработку информации о своих работниках, клиентах и иных лицах.

  5. ФЗ О безопасности критической информационной инфраструктуры и подзаконные акты, так как нашему Банку принадлежат информационные системы, функционирующие в банковской сфере, в соответствии с чем он является субъектом КИИ

  6. И, возможно, даже СТО БР ИББС, если Банк продолжает использовать комплекс в качестве вектора ИБ-развития.

Как можно заметить, для выбранного нами примера список применимых документов выглядит вполне внушительным.

Но не стоит думать, что для иных организаций он будет значительно меньше. Так, например, для страховой организации в общем случае этот перечень уменьшится лишь на несколько положений БР, СТО БР, БР 4-МР, а для субъекта КИИ, не являющегося финансовой организацией, применимы останутся как минимум пункты 4 и 5 представленного выше списка.

Какие НПА требуют использования сертифицированных решений в составе системы защиты?

Определившись со списком применимых к выбранной нами типовой организации документов, переходим к следующему шагу, непосредственно к поиску в этих самых НПА заветного требования.

Начнем с наиболее востребованного в последнее время документа ГОСТ Р 57580.1. Как вы наверняка знаете, сами по себе ГОСТ являются рекомендательными документами, которые могут переходить в разряд обязательных, если это предусмотрено каким-либо НПА. Положения 672-П, 683-П, Приказ Минкомсвязи 321, применимые к нашему Банку, устанавливают необходимость выполнять требования ГОСТ Р 57580.1. Итак, подробно изучив документ, можно сделать следующие выводы:

  1. Требования документа распространяются на все информационные системы, используемые для предоставления финансовых услуг.

  2. Данный документ содержит требование об использовании сертифицированных СЗИ, но только в том случае, если они необходимы для закрытия актуальных угроз информационной безопасности.

  3. Что касается использования СКЗИ, для организаций реализующих 1-ый уровень защиты, необходимо использовать сертифицированные ФСБ России СКЗИ. Для остальных организаций действует правило, согласно которому все используемые СКЗИ российского производства также должны быть сертифицированными.

Итак, с СКЗИ все достаточно просто, в то время как момент использования (или неиспользования) сертифицированных СЗИ оставляет некую недосказанность как организации понять, что для закрытия актуальных угроз ей необходимо использовать именно сертифицированные решения?

По логике документа ответ на этот вопрос организация должна получить при разработке модели угроз и нарушителя безопасности информации. Если организация по итогам рассмотрения результатов моделирования угроз пришла к выводу, что гарантированно защититься от них возможно только с использованием сертифицированных решений, то обойтись СЗИ без сертификата не получится. Так, например, если принято решение о необходимости защиты от угрозы, связанной с наличием недекларированных возможностей в используемом на объектах инфраструктуры системном программном обеспечении, то правильным выбором будет использование сертифицированных по требованиям безопасности операционных систем. Как правило, для большинства организаций этот вопрос будет решаться однотипно все актуальные угрозы без особых проблем будут закрываться без использования сертифицированных решений.

Исключение, пожалуй, составят организации, которым использование сертифицированных решений необходимо в соответствии с какими-либо иными НПА или организации, которые рассматривают в качестве источников угроз нарушителей с высоким потенциалом: администраторы ИБ, разведывательные службы государств.

Примерно такого же подхода придерживается и ДИБ ЦБ РФ ниже представлена выдержка из ответов на вопросы о выполнении ГОСТ, которые мы направляли ранее.

Таким образом, можно сделать вывод, что рассматриваемый ГОСТ не требует обязательного использования сертифицированных СЗИ. Этот вывод будет распространяться и на выбранную нами в качестве примера типовую организацию.

Дальше по списку идет несколько Положений ЦБ РФ, давайте рассмотрим и их. Начнем с Положения ЦБ РФ 672-П. Требования документа распространяются на все кредитные организации, являющиеся участниками платежной системы Банка России, имеющими доступ к услугам по переводу денежных средств с использованием распоряжений в электронном виде. Предполагаем, что наш Банк относится к данному типу организаций. Поэтому приступаем к изучению документа:

  1. Положение распространяется на все информационные системы кредитных организаций, задействованные в осуществлении переводов денежных средств с использованием распоряжений в электронном виде.

  2. Документ требует использования СКЗИ и СЗИ, прошедших процедуру оценки соответствия требованиям.

Здесь стоит отметить отдельно сказать о том, что процедура оценки соответствия не равна понятию сертифицированный. 184-ФЗ О техническом регулировании устанавливает несколько разных способов оценки соответствия, среди которых есть как сертификационные испытания, так и, например, приемочные.

Далее рассмотрим основные аспекты Положения ЦБ РФ 683-П, требования которого распространяются на все кредитные организации, в том числе и на наш Банк. Итак:

  1. Распространяется на все информационные системы кредитных организаций, задействованные в процессе перевода денежных средств.

  2. Требует использования сертифицированной криптографии, если применяются СКЗИ российского производства.

  3. Для перевода денежных средств должно использоваться сертифицированное программное обеспечение или программное обеспечение, в отношении которого проведен анализ уязвимостей по оценочному уровню доверия не ниже 4 (ОУД.4).

Здесь же заострим внимание на последнем пункте в списке. Он касается непосредственно сертификации используемого программного обеспечения или же проведения анализа уязвимостей такого программного обеспечения. И если тему с сертификацией СЗИ мы затронули в данной статье, то процесс анализа уязвимостей по ОУД самостоятельная, требующая отдельного освещения тема. И, конечно же, мы планируем рассмотреть ее будущем, если вам эта тема кажется интересной.

Наконец, Положение ЦБ РФ 382-П. Его выполнение обязательно для ряда кредитных организаций, в том числе и для Банка, так как он является оператором по переводу денежных средств. Данный документ:

  1. Распространяется на все информационные системы Банка, обрабатывающие защищаемую (в терминах Положения) информацию.

  2. Не содержит требования об обязательном использовании сертифицированных СЗИ.

  3. Требует использования сертифицированной криптографии, если применяются СКЗИ российского производства.

  4. Необходимо использовать СКЗИ в соответствии с эксплуатационной документацией.

  5. Для перевода денежных средств должно использоваться сертифицированное программное обеспечение или программное обеспечение, в отношении которого проведен анализ уязвимостей по требованиям к оценочному уровню не ниже ОУД.4.

Здесь также хотелось бы обратить внимание на последний, четвертый, пункт списка. Эксплуатационная документация порой таит в себе собственные, ничуть не менее строгие к обеспечению защиты информации. Так, например, незаменимая СКАД Сигнатура, при определенной схеме ее использования, требует применения сертифицированного по требованиям безопасности межсетевого экрана.

Подводя промежуточный итог, можно сделать вывод, что для рассматриваемого нами примера использование сертифицированных СЗИ и СКЗИ не требуется рассмотренными положениями ЦБ РФ. Исключения составляют только СКЗИ российского производства.

Перейдем к НПА, регламентирующим вопросы защиты биометрических ПДн. Данные требования применимы к нашему примеру, поскольку он подключен к Единой биометрической системе и использует биометрические персональные данные для идентификации клиентов. Итак:

  1. Требования распространяются на технологические участки сбора, передачи и обработки биометрических ПДн

  2. Использование информационных технологий и технических средств, соответствующих 2-му уровню защиты информации по ГОСТ Р 57580.

  3. Рекомендуется использовать сертифицированные СЗИ и СКЗИ.

  4. В отношении распространяемого банками своим клиентам программного обеспечения действует рекомендация по наличию сертификата или же проведенного анализа уязвимостей по ОУД.4.

Таким образом, ни Приказ Минкомсвязи 321, ни методический документ ЦБ РФ 4-МР не устанавливают требования об обязательном использовании сертифицированных СЗИ и СКЗИ для нашего Банка.

Далее разберем требования законодательства в области защиты персональных данных. Документы данной области применимы к нашему примеру по причине обработки им персональных данных различных категорий субъектов: собственных работников, соискателей, клиентов и так далее. Основные аспекты этих документов заключаются в следующем:

  1. В область защиты попадают все информационные системы, обрабатывающие какие-либо персональные данные.

  2. Все НПА требуют использования СЗИ, прошедших оценку соответствия.

  3. В случае, когда принято решение об использовании именно сертифицированных решений, они должны соответствовать определенному набору требований. Например, для информационных систем персональных данных второго уровня защищенности допускается использование СЗИ не ниже 5 класса и для которых подтверждено отсутствие НДВ не ниже, чем по четвертому уровню.

  4. Обязательное использование СКЗИ для защиты персональных данных не предусмотрено. Если же принято решение об использовании СКЗИ, то они должны иметь сертификаты ФСБ России и соответствовать требованиям к классу СКЗИ.

Обязательное для нашего Банка требование по использованию сертифицированных СЗИ отсутствует, сертифицированных СКЗИ только в случае принятия соответствующего решения, то есть при наличии актуальных угроз безопасности, которые могут быть закрыты только с использованием криптографии.

Теперь проанализируем требования, касающиеся защиты критической информационной инфраструктуры. С учетом того, что Банку принадлежат информационные системы, функционирующие в банковской сфере, в частности АБС, он является субъектом КИИ. Предположим, что категорирование объектов КИИ еще не проведено, в связи с чем требования по обеспечению безопасности значимых объектов КИИ потенциально могут быть применимы к Банку. Вопрос использования сертифицированных СЗИ регламентирован Приказом ФСТЭК 239, а именно:

  1. Требования распространяются на значимые объекты критической информационной инфраструктуры и их систему защиты.

  2. Приказ не требует обязательного использования сертифицированных СЗИ. Применять их необходимо только в случае, когда это требуется иными применимыми к организации НПА.

  3. Также решение о применение сертифицированных СЗИ для защиты критической информационной инфраструктуры может быть принято организацией самостоятельно. В случае принятия такого решения, используемые СЗИ, аналогично ситуации с защитой персональных данных, должны отвечать определенным требованиям.

Таким образом, законодательство в области обеспечения безопасности критической информационной инфраструктуры не содержит требования об обязательном использовании сертифицированных СЗИ, в том числе и в отношении нашего Банка.

Говоря о КИИ трудно не упомянуть и Государственную систему обнаружения, предупреждения и ликвидации последствий компьютерных атак. В соответствии с НПА, регулирующими ее функционирование, если организация использует средства ГосСОПКА (которые по своей сути являются СЗИ), то они должны иметь гарантийную и техническую поддержку российских организаций, а также возможность модернизации российскими организациями. Помимо этого, применяемые организацией СКЗИ должны иметь сертификаты ФСБ России. То есть если организация, например, решила стать корпоративным центром ГосСОПКА, то сертифицированные СКЗИ то, без чего ей не обойтись.

Так как ранее мы упоминали СТО БР ИББС, предлагаем рассмотреть и его требования на предмет наличия использования сертифицированных СЗИ. Тем более, что наш Банк продолжает усердно следовать определенному в данном документе подходу, что находит подтверждение в его [Банка] внутренней документации. Общие положения гласят:

  1. Если для защиты АБС от несанкционированного доступа и нерегламентированных действий используется не встроенные средства, а внешние СЗИ, они должны быть сертифицированы.

  2. Использование СЗИ для обеспечения безопасности персональных данных регламентируется соответствующими НПА в области защиты персональных данных, то есть использование сертифицированных СЗИ не является обязательной мерой.

  3. Используемые СКЗИ должны иметь сертификаты или разрешение ФСБ России.

Таким образом, СТО БР ИББС устанавливает требования об использовании сертифицированных СКЗИ, а также в ряде случаев сертифицированных СЗИ для защиты банковской информационной инфраструктуры.

Заключение

Рассмотрев довольно обширный набор требований по обеспечению защиты информации, применимых к выбранному нами типовому примеру, можно сделать вывод, что использование сертифицированных СЗИ фактически не является обязательной мерой где-то вопрос решения отдается на волю самой организации, где-то такое требование отсутствует вовсе. С другой стороны вопрос использования сертифицированных СКЗИ урегулирован чуть более жестко фактически, если финансовая организация использует СКЗИ российского производителя, то оно должно иметь сертификат ФСБ России.

Полученные нами выводы по большей части актуальны и для большинства иных коммерческих организаций, а не только в отношении выбранного нами примера. Но вместе с тем нередки и случаи, когда применение сертифицированных решений необходимо по тем или иным причинам. Будь то желание обеспечить защиту от специфических угроз, наличие требования в эксплуатационной документации или внутренних документов организации или необходимость выполнения правил взаимодействия с определенной информационной системой.

Таким образом, к решению вопроса о необходимости применения сертифицированных решений стоит подходить как минимум с двух разных сторон: как со стороны требований НПА, так и со стороны специфики конкретной организации, ее систем и процессов.

И если вторая сторона требует детального анализа каждого конкретного случая, то для первой, как мы только что убедились, можно определить общий подход. На основе изложенной выше информации нами была сформирована сводная таблица, содержащая короткий ответ на вопрос о необходимости использования сертифицированных СЗИ и СКЗИ в соответствии с основными НПА, применимыми к различным организациям. Ознакомиться с данной таблицей вы можете здесь.

При необходимости памятка может быть доработана с точки зрения охвата объема изученных документов, а состав информации расширен для более удобного применения к конкретным типам информационных систем.

Надеемся, что данная информация будет вам полезна и поможет сэкономить время в будущем, когда появится необходимость решения изученного нами вопроса.

Спасибо за внимание!

Владислав Павлов

Специалист отдела аудита и консалтинга,Акрибия

Подробнее..

Recovery mode Зачем нужны сертифицированные средства защиты информации?

02.11.2020 22:09:30 | Автор: admin

Сертификат справка очень важная, но слегка бумажная.
Что она даёт, кому и зачем она нужна пытаемся разобраться под катом.

Что даёт сертификация?

Для начала давайте определимся о какой именно сертификации далее пойдет речь. Физический смысл сертификации чего бы то ни было это процесс проверки/подтверждения/оценки соответствия зафиксированным где-либо требованиям. В зависимости от сферы применения, сертификация бывает обязательной или добровольной. Соответственно, за нее отвечают различные государственные и негосударственные структуры. Например, регистрационное удостоверение (клон сертификата) после прохождения экспертизы, на столь близкие нам маски выдаёт Роспотребнадзор.

В области сертификации средств защиты информации в России два основных регулятора ФСТЭК и ФСБ. ФСБ занимается, в основном, сертификацией криптографических средств, а остальные средства защиты информации (не)нужно (обсудим дальше) сертифицировать во ФСТЭК.

Для сертификации типовых средств защиты, таких как межсетевые экраны или антивирусы, ФСТЭКом разработаны наборы специализированных требований. Остальные средства проходят сертификацию на соответствие техническим условиям или заданиям по безопасности, а набор функций безопасности определяется разработчиком продукта. Это чем-то напоминает советскую тушёнку по ГОСТ и по ТУ, но в ряде случаев ГОСТов попросту нет.

Путь к сертификату тернистый и длительный. Идти/ползти по нему или лечь в правильном направлении каждый решает сам. Не всем удаётся добраться до финиша, но счастливчикам заветный сертификат даёт пропуск на не самый большой, но конкурентный рынок сертифицированных средств защиты информации.

Придётся разобраться в продукте и в технологии его разработки

Итак, сертификация - процесс суровый. Испытательные лаборатории вынимают душу разработчиков не хуже Шан Цунга.

Придётся не только найти у себя функции безопасности, но и показать, как именно они работают и какие исходные тексты соответствуют этим функциям. Тем, кто хочет приблизить себя к защите государевой тайны ещё придётся пройти занимательные квесты с фаззингом и другими весёлыми инструментами от инженера Джона Крамера. Холодный пот и бессонные ночи вам обеспечены, но зато свой код будете помнить от main () до ..лЯ!.

Кроме анализа кода вам предстоит сдать анализы от процесса разработки, описать свой gitflow, процесс CI, исправление багов, доставку исправлений клиентам и т.д.

Разработка средств безопасности должна быть безопасной и не должна быть опасной. О как!

У этих чуднх забав польза все-же есть. Продукты, слепленные из gовнокода, скорее всего не получат сертификат. Agileв худшем его понимании, типа фигачим прямо на продакшене не подходит для сертификации, как и продукты, которые были собраны очумелыми ручками с горящим взором из кучи пластиковых бутылок.

Что общего между сертификаторами и Лангольерами

Эти милые создания неустанно пожирают время и пространство. После принятия решения о начале сертификации считайте, что вы и члены вашей команды уже стали на год старше, потому что редко, кому удаётся пройти сертификацию быстрее.

Обычно это происходит так. Сначала вы обучаете своему продукту тружеников из испытательной лаборатории, которая будет доказывать регулятору, что вы не верблюд. В том смысле, что ваш продукт не верблюд и в нём есть необходимые для получения сертификата функции безопасности, которые вы безопасно разрабатываете.

Далее вы вместе с испытательной лабораторией пишете заявку на сертификацию и технические условия (задание по безопасности), где определяете какие именно функции безопасности должны искать и находить в вашем продукте. Как только заявка акцептована, начинается самое утомительное.

Сначала вам надо доказать и детально описать соответствие заявленных функций испытательной лаборатории, а потом вместе с испытательной лабораторией предстоит выдержать сто тысяч ПОЧЕМУ от ОРГАНА по сертификации. На каждом шагу может быть Nили даже Kитераций. Короче, будет Nепросто, а иногда Капец, как долго.

НаучИтесь натягивать сову на глобус

Руководящие документы (РД) это вам не гайдлайны и обучающие видео от Google. Читать РД могут не только лишь все, а только лишь те, кто умеет переводить с казенного на русский без словаря. Большинство испытательных лабораторий успешно справляются с этой задачей. Но, увы, остаются и те, кто цитирует РД как ПисАние. Поэтому при выборе лаборатории ищите ту, у представителей которой при слове руководящий документ глаза не загораются в религиозном экстазе. Иначе есть шанс попасть в филиал Святой Инквизиции, целью которой является ярко и с огоньком обращать неверных в верных.

Причём тут сова и глобус? - спросите вы. А при том, что с учётом даты выпуска части действующих РД (начало конца XXвека), в которых определены основные термины и определения, успех сертификации иногда зависит от правильной трактовки требований и умения обосновать свою позицию.

Испытательная лаборатория должна быть вашим партнёром, а не истязателем. В общем, тщательно выбирайте партнёров. Иначе на глобус натянут вас.

Кому нужны сертифицированные продукты?

Итак, заветная индульгенция получена. Мы можем предлагать свой продукт жаждущим госорганам и бизнесу с государственным участием. Зачем им сертифицированные продукты?

Всё просто. Несертифицированные средства использовать или запрещено, или не рекомендуется. Государственные информационные системы (ГИС) нельзя ввести в действие без аттестации на соответствие требованиям безопасности. А аттестацию в свою очередь можно провести, только если требования безопасности реализуются за счет сертифицированных средств защиты.

Чем не игла в яйце?

Похожая ситуация наблюдается на объектах критической информационной инфраструктуры (КИИ), где должны использоваться только отечественные продукты и сертифицированные средства защиты информации. В общем, рынок есть. Небольшой. Конкурентный. Неповоротливый

Короче, не ходите сюда, самим мало

Стоит ещё упомянуть защиту персональных данных. Требования к ней практически точь-в-точь совпадают с защитой ГИС, но ИСПДн (информационные системы персональных данных), в отличие от ГИС, не нужно аттестовывать, а загодя покупать сертифицированные продукты никто не спешит. Ведь они даже теоретически должны стоить дороже на год, который вы пожертвовали сертификации.

Кому нужна сертифицированная система защиты и управления мобильными устройствами?

Теперь немного о личном. На просторах нашей необъятной, где так вольно дышит человек, практически закончилась электрификация и мы семимильными шагами движемся в сторону цифровизации, о которой не слышал только Word. Чтобы перестигнуть (ещё одно неизвестное для Wordслово) результаты всех, кто нас не любят, но очень хотят, во всех министерствах и ведомствах оцифровываются практически все области экономики.

Возьмите название любой рабочей профессии, приставьте к нему слово цифровой и можно оформлять заявку на конкурс инновационных проектов!

Рассмотрим, например, гипотетический проект Цифровой фрезеровщик.

Наш прожект будет состоять в том, чтобы снабдить цифрового бедолагу смартфоном, который будет собирать информацию со всего носимого им smart-барахла и передавать её на сервер ГИС.

А сервер ГИС за это будет возвращать на смартфон рекомендации о том, как заточить фрезу, когда можно сходить по нужде и др., чтобы получить 13-ю зарплату.

Итак, нам нужно сдать цифровой прожект. Для этого его нужно аттестовать. И тут у нас есть только два пути:

  1. Реализовать функции безопасности в своём ПО и сертифицировать его. На это нужен год и специально выделенные люди, которые будут жертвовать свои человеко-часы на алтаре процесса сертификации. Иногда так делают, но чаще идут по второму пути.

  2. Купить сертифицированные средства защиты, которые выполнят требования, необходимые для аттестации.

Для успешной аттестации ГИС на практике хватает следующего комплекта сертифицированных средств защиты для мобильных устройств:

  1. VPNс ГОСТ шифрованием. Подойдёт любой с сертификатом ФСБ России.

  2. MDM/ EMM/ UEMс сертификатом ФСТЭК России.

  3. Антивирус с сертификатом ФСТЭК России.

А сейчас рекламная пауза!

Единственным сертифицированным MDM/ EMM/ UEMрешением для Androidи iOSявляется наша платформа SafePhone. Конечно, цифровому фрезировщику iPadне светит. Но если начальник из профильного ведомства, угодивший на принудительную удалёнку, захочет получить доступ с iPadк рабочим файлам без их пересылки на личный почтовый ящик Google, ему придётся аттестовать ГИС удалённого доступа и тут мы ему поможем.

И ещё одно. Чтобы оптимизировать затраты своих заказчиков, мы недавно встроили в свою платформу антивирусные библиотеки Лаборатории Касперского. Теперь, чтобы удовлетворить регулятора, нужно покупать на одно решение меньше. Встречайте SafePhone MTD Edition.

Подробнее..

Из песочницы Как высчитать ключи перехода от лобой системы координат к WGS с сантиметровой точностью?

03.10.2020 18:20:42 | Автор: admin
Для кого этот пост картографы, геодезисты, генпланисты, строители и т.д.

Коллеги, привет!

Решаемая проблема получение 100% достоверных параметров для пересчета координат, например в привычные картографические градусы (WGS84). Коллеги уже поняли про что я, а любопытным поясню дело в том, что гуляющие по интернету приложения и алгоритмы с параметрами пересчета координат например из выписки ЕГРН на вашу дачу в координаты для GPS приемника, в подавляющем большинстве будут лаптем по карте. Для поиска объекта размером с дом, это не будет проблемой, а вот для инженерной затеи, уже слабовата точность. К примеру мы хотим обозначить границы на местности с сантиметровой точностью, найти трубу под землей или кабель, запустить безпилотник по картам с плоскими координатами, чертить чертеж в плоских координатах с картографической онлайн основой из интернета и многое другое, что требует субметровой точности.

Почему точные координаты становятся не точными


Плоские метровые координаты, знакомые нам из сведений о нашей недвижимости или с проектов и чертежей очень точны локально, но для привязки их к земному шару одной математики мало. Дело в том, что математическая модель плоской, метровой системы координат из документов, сначала была реализована на местности в виде геодезических пунктов, с точностью тех технологий, какие были на тот момент (в РФ большая часть систем координат развита в советское время и действуют по сей день). И уже потом от этих геодезических пунктах первого класса, создавались другие, от тех еще другие, от них всех производные секретные системы координат такие как СК63 с разворотами и искажениями координатной сетки, дабы врага запутать. При каждом таком преобразовании допускались искажения, незначительные, но нарастают они не линейно относительно количества преобразований, а намного прогрессивнее. В итоге большая часть координатных сеток сейчас похожа на чуть помятую и стянутую с одного краю простыню. Именно по этому 99% геокалькуляторов не спасут Вас от помятой простыни координатной сетки. Есть несколько геодезических сервисов для пересчета координат, платных, могу предположить, что там люди считают не по теоретическим параметрам системы координат, а обладают всеми параметрами помятой простыни. В большей части РФ надо рассчитывать параметры системы координат для небольших территорий, радиус этих территорий часто не превышает 15км. При таких небольших территориях искажения координатной сетки часто не превышает сантиметра, система координат очень точно лежит на земном шаре. Если Ваш интерес вылезает за 20-30км пространства, то необходимо несколько локальных параметров перехода рассчитывать на меньшие территории, дробить систему координат на более мелкие подзоны.

Изобретаем велосипед?


Для целей расчета истинных параметров систем координат оказывается вагон ПО. Правда это как правило составляющие сложных и дорогостоящих профессиональных программных комплексов для геодезии и картографии, которые далеко не всем профессионалам даже нужны, еще часть ПО работает на винде с непонятными и сложно употребляемыми форматами фалов. Есть еще варианты из командной строки. Вдохновившись статьей на профильном форуме решили написать своё ПО с блекджеком и вебом.

image

Расскажу кратко как это работает


Для расчета параметров нам нужны три точки (можно больше, будет точнее) в двух системах координат, в WGS и в той самой местной системе координат, параметры которой Вы хотите знать. Плоские метровые координаты берем из каталогов, кадастровых планов территорий, карточек привязок и т.д. Градусные координаты или из тех же источников, либо часто используем координаты GNSS базовых станций, либо берем спутниковый приемник, и просто замеряем эти известные в плоских координатах точки.

Веб форма высчитывает параметры системы координат и выводит на экран в двух популярных и применимых в 99% ГИС системах форматах proj строка и WKT.

Тут немного рассказов про те самые параметры и немного терминологии


Много непонятных букв
Геоцентрическая система координат, это система где есть три пространственные координатные оси проходящие через центр земли. Координаты в такой системе имеют вид x,y,z или привычные нам широта и долгота измеряемые градусами угла от нулевой точки через землю lat long h. При этом высота h отсчитывается не от центра земли как в первом случае, а от эллипсоида, сферы, геоида (упрощённой модели поверхности земли).

Прямоугольная система координат система координат построенная на поверхности земли пренебрегающая её округлостью. Такие системы координат очень удобны в использовании на небольших расстояниях, позволяют не проводить сложных математических операций для расчёта привычных нам расстояний на поверхности земли. Такие СК часто применяются в строительстве, картографии, геодезии.

Местная система координат (МСК) как правило прямоугольная система координат, обслуживающая небольшую локальныю территорию. Часто распостраняется на территорию района или города, где её искажения не критичны для точности строительства, кадастра и т.д.

Параметры системы координат состоят из нескольких отдельных параметров, опишем каждый из них. Возьмём строку параметров PROJ4 (MapInfp, ArcGIS и т. д. Так же используют эти параметры, только структура записи иная): +proj=omerc +lat_0=59.8338730825 +lonc=33 +alpha=-0.0001 +gamma=-1.771957267229058 +k=0.9996584453038837 +x_0=2365031.423134961 +y_0=426397.2888527482 +ellps=krass

Модель земного шара (+ellps=krass) в нашем случае это эллипсоид Красовского. Под этим названием эллипсоида скрывается параметры примерного описания земного шара: направление координатных осей и углы между осями, диаметр, сжатие на полюсах и т. д. Выбрать необходимый эллипсоид можно опытным путём либо зная основываясь на какой системы координат родилась интересующая вас МСК. На территории РФ, большая часть МСК выходцы из СК42 с эллипсоидом Красовского.

Проекция земного шара на плоскость (+proj=omerc) метод с помощью которого прямоугольные координаты проецируются за круглую землю. Самый распространённый алгоритм это апельсиновые дольки, если порезать апельсин по долькам, отделить от долек шкурки.

Расправленную шкурку положить на лист в клетку и получится проекция Меркатора. Бывают разные проекции с разными направлениями и размерами долек, бывают цилиндрические проекции, это когда апельсин превращают в цилиндр и раскатывают кожуру на плоскость, конические и т. д. Выбрать необходимую можно опытным путём либо зная основываясь на какой системы координат родилась интересующая вас МСК. На территории РФ, большая часть МСК выходцы из СК42 с проекцией Меркатора. Для точных локальных параметров МСК на малых территориях рекомендуем применять косую проекцию Меркатора (omerc).

Центр проекции в градусах (+lat_0=59.8338730825 +lonc=33) это то место, где расправленная шкурка апельсина меньше меньше всего растягивается для достижения плоскости (обычно серединка шкурки дольки), место с наименьшими искажениями. Грубо говоря место где плоский лист МСК прикасается к шарику нашей планеты. Часто для центральной точки выбирают точку центра района геодезических работ.

Развороты (+alpha=-0.0001 +gamma=-1.771957267229058) разворот осей координат МСК относительно меридиана.

Масштабный коэффициент (+k=0.9996584453038837), в идеале должен быть единицей. Показывает, на сколько реальное расстояние отличается от координатного. С помощью масштаба можно сразу прикинуть, как увеличивается искажение размеров при отдалении от центральной точки МСК.

Координаты центра проекции в метрах (+x_0=2365031.423134961 +y_0=426397.2888527482), можно рассматривать как значение смещения начала отсчёта координат в плоской МСК.

За основу взяты опенсорсные пакеты

  • proj4 для геодезических трансформаций
  • Leaflet для отображения информации на карте
  • geophp для расчета территории действия параметров с сантиметровой точностью (на момент написании статьи не реализовано)

Исходный код веб формы доступен с лицензией AGPL в открытом репозитории.

Обсуждение веб формы тутачки.
Подробнее..

Из песочницы Создание тайлов из растровых карт

07.10.2020 18:18:13 | Автор: admin
Как-то я озадачился вопросом создания карт, пригодных для использования в OsmAnd и OpenLayers. О ГИС я тогда вообще не имел ни малейшего понятия, поэтому разбирался со всем с нуля.

В статье расскажу о результатах своих исследований, составим алгоритм преобразования произвольной растровой карты в тайлы, понятные для приложений и попутно познакомимся с такими понятиями как эллипсоид, датум, система координат, проекция.

Наша Земля имеет не форму шара, и даже не форму эллипсоида, эта сложная фигура называется геоид. Дело в том, что массы внутри Земли распределены не равномерно, поэтому в одних местах Земля немного вогнутая, в других немного выпуклая. Если взять территорию отдельной страны или материка, то ее поверхность с достаточной точностью можно совместить с поверхностью некоторого эллипсоида, если центр этого эллипсоида немного сдвинуть по трем осям координат относительно центра масс Земли. Такой эллипсоид называется референц-эллипсоидом, он пригоден для описания только локального участка Земли, для которого он был создан. На больших расстояниях от этого участка, он может иметь очень большое расхождение с поверхностью Земли. Эллипсоид, центр которого совпадает с центром масс Земли, называется общеземным эллипсоидом. Понятно, что референц-эллипсоид лучше описывает свой локальный участок Земли чем общеземной, но зато общеземной пригоден для всей поверхности Земли.

Для описания эллипсоида достаточно только двух независимых значений: экваториального радиуса (обычно обозначается a) и полярного радиуса (b), но вместо второго независимого значения обычно пользуются полярным сжатием f=(a-b)/a. Это первое, что нам понадобится в нашем алгоритме как объект эллипсоид. Для разных участков Земли в разные годы разными исследователями было вычислено множество референц-эллипсоидов, информация о них приводится в виде данных: a (в метрах) и 1/f (безразмерная). Как это ни странно, для общеземного эллипсоида также существует множество отличающихся вариантов (разные a,f), но отличие не очень сильное, связано оно в основном с различием в методиках определения a и f.

struct Ellipsoid {    char *name;    double a;  /* Большая (экваториальная) полуось      */    double b;  /* Малая (полярная) полуось              */    double al; /* Сжатие (a-b)/a                        */    double e2; /* Квадрат эксцентриситета (a^2-b^2)/a^2 */};struct Ellipsoid Ellipsoid_WGS84 = {    .name = "WGS84",    .a  = 6378137.0,    .al = 1.0 / 298.257223563,};struct Ellipsoid Ellipsoid_Krasovsky = {    .name = "Krasovsky",    .a  = 6378245.0,    .al = 1.0 / 298.3,};

В примере приведены два эллипсодида: общеземной WGS84, используемой в спутниковой навигации, и референц-эллипсоид Красовского, применимый для территории Европы и Азии.

Рассмотрим еще один интересный момент, дело в том, что форма Земли медлено, но меняется, поэтому эллипсоид, который сегодня хорошо описывает поверхнось, через сотню лет может быть далек от реальности. Это мало касается общеземного эллипсоида, т.к. отклонения в пределах его же погрешности, но актуально для референц-эллипсоида. Тут мы подошли еще к одному понятию датум. Датум это совокупность параметров эллипсоида (a,f), его смещения внутри Земли (для референц-эллипсоида), зафиксированные в определенный момент времени. Если говорить более точно, то датум может описывать не обязательно эллипсоид, это могут быть параметры более сложной фигуры, например, квазигеоида.

Наверняка уже возник вопрос: как переходить от одного эллипсоида или датума к другому? Для этого на каждом эллипсоиде должна быть система геодезических координат: широта и долгота (фи, лямбда), переход осуществляется переводом координат из одной системы координат в другую.
Для преобразования координат существуют различные формулы. Можно сначала геодезичесике координаты в одной системе координат переводить в трехмерные координаты X,Y,Z, с ними выполнять сдвиги и повороты и затем полученные трехмерные координаты переводить в геодезические в другой системе координат. Можно это делать и напрямую. Т.к. все формулы это бесконечные сходящиеся ряды, то обычно ограничиваются несколькими членами рядов для достижения требуемой точности. В качестве примера воспользуемся преобразованиями Гельмерта (Helmert), это преобразования с использование перехода в трехмерные координаты, состоят из трех этапов описанных выше. Для преобразований кроме двух эллипсоидов понадобятся еще 7 параметров: три сдвига по трем осям, три угла поворота и масштабный коэффициент. Как можно догадаться, все параметры можно извлечь из датумов. Но в алгоритме мы не будем пользоваться таким объектом как датум, а вместо этого введем объект перехода из одной системы координат в другую, который будет содержать: ссылки на два эллипсоида и 7 параметров преобразования. Это будет вторым объектом нашего алгоритма.

struct HelmertParam {    char *src, *dst;    struct Ellipsoid *esp;    struct Ellipsoid *edp;    struct {        double dx, dy, dz;        double wx, wy, wz;        double ms;    } p;    // Вспомогательные величины    double a,  da;    double e2, de2;    double de2__2, dxe2__2;    double n, n__2e2;    double wx_2e2__ro, wy_2e2__ro;    double wx_n__ro, wy_n__ro;    double wz__ro, ms_e2;};struct HelmertParam Helmert_SK42_WGS84 = {    .src = "SK42",    .dst = "WGS84",    .esp = &Ellipsoid_Krasovsky,    .edp = &Ellipsoid_WGS84,    // SK42->PZ90->WGS84 (ГОСТ Р 51794-2001)    .p = {23.92, -141.27, -80.9, 0, -0.35, -0.82, -0.12e-6},};

В примере приведены параметры для преобразования из системы координат Пулково 1942 в систему координат WGS84. Сами параметры преобразования это отдельная тема, для некоторых систем координат они открыты, для других подобраны опытным путем, поэтому в разных источниках их значения могут незначительно отличаться.

Кроме параметров необходима и функция преобразования, она может быть прямая и для преобразования в обратном направлении, нам понадобится только преобразование в обратном направлении. Пропущу тонны матана и приведу свою оптимизированную функцию.

void setupHelmert(struct HelmertParam *pp) {    pp->a = (pp->edp->a + pp->esp->a) / 2;    pp->da = pp->edp->a - pp->esp->a;    pp->e2 = (pp->edp->e2 + pp->esp->e2) / 2;    pp->de2 = pp->edp->e2 - pp->esp->e2;    pp->de2__2 = pp->de2 / 2;    pp->dxe2__2 = pp->de2__2 + pp->e2 * pp->da / pp->a;    pp->n = 1 - pp->e2;    pp->n__2e2 = pp->n / pp->e2 / 2;    pp->wx_2e2__ro = pp->p.wx * pp->e2 * 2 * rad(0,0,1);    pp->wy_2e2__ro = pp->p.wy * pp->e2 * 2 * rad(0,0,1);    pp->wx_n__ro = pp->p.wx * pp->n * rad(0,0,1);    pp->wy_n__ro = pp->p.wy * pp->n * rad(0,0,1);    pp->wz__ro = pp->p.wz * rad(0,0,1);    pp->ms_e2 = pp->p.ms * pp->e2;}void translateHelmertInv(struct HelmertParam *pp,        double lat, double lon, double h, double *latp, double *lonp) {    double sin_lat, cos_lat;    double sin_lon, cos_lon;    double q, n;    if (unlikely(!pp)) {        *latp = lat;        *lonp = lon;        return;    }        sin_lat = sin(lat);    cos_lat = cos(lat);    sin_lon = sin(lon);    cos_lon = cos(lon);    q = 1 / (1 - pp->e2 * sin_lat * sin_lat);    n = pp->a * sqrt(q);   *latp = lat        - ((n * (q * pp->de2__2 + pp->dxe2__2) * sin_lat + pp->p.dz) * cos_lat           - (pp->p.dx * cos_lon + pp->p.dy * sin_lon) * sin_lat          ) / (n * q * pp->n + h)        + (pp->wx_2e2__ro * sin_lon - pp->wy_2e2__ro * cos_lon)          * (cos_lat * cos_lat + pp->n__2e2)        + pp->ms_e2 * sin_lat * cos_lat;    *lonp = lon        + ((pp->p.dx * sin_lon - pp->p.dy * cos_lon) / (n + h)           - (pp->wx_n__ro * cos_lon + pp->wy_n__ro * sin_lon) * sin_lat          ) / cos_lat        + pp->wz__ro;}

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

Теперь, чтобы приблизиться к выполнению изначальной задачи создать тайлы, необходимо рассмотреть систему координат под названием WebMercator. Эта система координат используется в приложении OsmAnd и в web, например в картах от Google и в OpenStreetMap. WebMercator это проекция Меркатора, построенная на сфере. Координаты в этой проекции это координаты пикселя X,Y и они зависят от масштаба Z, для нулевого масштаба вся земная поверхность (примерно до 85 градуса широты) помещается на одном тайле 256x256 пикселей, координаты X,Y меняются от 0 до 255, начиная с левого верхнего угла, для масштаба 1 уже 4 тайла, X,Y от 0 до 511 и так далее.

Для преобразования из WebMercator в WGS84 используются такие функции:

void XYZ_WGS84(unsigned x, unsigned y, int z, double *latp, double *lonp) {    double s = M_PI / ((1UL << 7) << z);    *lonp = s * x - M_PI;    *latp = asin(tanh(M_PI - s * y));}void WGS84_XYZ(int z, double lat, double lon, unsigned *xp, unsigned *yp) {    double s = ((1UL << 7) << z) / M_PI;    *xp = uint_round((lon + M_PI) * s);    *yp = uint_round((M_PI - atanh(sin(lat))) * s);}

И под конец первой части статьи мы уже сможем набросать начало нашего алгоритма создания тайла. Каждый тайл 256x256 пикселей адресуется тремя значениями: x,y,z, соотношение с координатами X,Y,Z очень простое: x = (int)(X / 256); y = (int)(Y /256); z = Z;

void renderTile(int z, unsigned long x, unsigned long y) {    int i, j;    double wlat, wlon;    double lat, lon;    for (i = 0; i < 255; ++i) {        for (j = 0; j < 255; ++j) {            XYZ_WGS84(x * 256 + j, y * 256 + i, z, &wlat, &wlon);            translateHelmertInv(&Helmert_SK42_WGS84, wlat, wlon, 0, &lat, &lon);            /* lat,lon - координаты в СК42 */        }    }}

Координаты в СК42 это уже преобразованные координаты в систему координат карты, теперь осталось найти на карте пиксель по этим координатам и занести его цвет в пиксель тайла по координатам j,i. Об этом будет следующая статья, в которой мы поговорим о геодезических проекциях и афинных преобразованиях.
Подробнее..

Создание тайлов из растровых карт (ч.2)

05.11.2020 18:21:17 | Автор: admin
В этой части статьи мы завершим наш алгоритм создания тайла, узнаем, как использовать полученные тайлы в OpenLayers и в OsmAnd. Попутно продолжим знакомство с ГИС и узнаем про картографические проекции, а также узнаем в чем заключается привязка растровой карты и зачем она нужна.


В предыдущей части мы остановились на том, что необходимо получить цвет пикселя из исходной растровой карты по геодезическим координатам широта,
долгота), уже переведенным в СК этой карты.

Геодезические координаты заданы на поверхности эллипсоида, а координаты пикселя на плоскости, т.е. необходим способ перехода от выпуклой поверхности к плоской. Проблема состоит в том, что выпуклую поверхность (представим что на ней нанесен какой-то рисунок или координатная сетка), невозможно перенести на плоскую без каких-либо искажений. Искажаться может: форма (углы), площадь, линейные размеры. Есть, конечно, возможность, причем не единственная, переноса на плоскую поверхность не искажая только что-то одно, но неизбежно будет искажаться остальное.



Очевидно, что на более мелких масштабах (вся планета, континет), искажения проявляются сильнее, чем на более крупных (область, город), а на самых крупных (план небольшого участка) о них вообще речь не идет, т.к. поверхность эллипсоида на таких масштабах уже не отличима от плоскости.

Здесь мы подошли к понятию картографической проекции. Не буду приводить примеры с картинками проецирования сферы на цилиндр или на конус с последующей разверткой, для нас сейчас важно обобщить.

Картографическая проекция это заданный математически способ отображения поверхности эллипсоида на плоскость. Проще говоря, это математические формулы для перевода геодезических координат (широта, долгота) в плоские декартовы как раз то, что нам нужно.

Картографических проекций изобретено огромное множество, все они находят применение для своих целей: равновеликие (в кторых сохраняется площадь) для политических карт, карт грунтов, равноугольные (в которых сохраняется форма) для навигации, равнопромежуточные (сохранение масштаба по выбранному направлению) для компьютерной обработки и хранения массивов геоданных. Есть также проекции, которые сочетают в себе в определенных пропорциях вышеперечисленные особенности, есть совсем эзотерические проекции. Примеры проекций можно найти в Википедии на странице Список картографических проекций.

Для каждой проекции выведены либо точные формулы, либо в виде суммы бесконечных сходящихся рядов, причем в последнем случае может существовать даже несколько вариантов. Формулы для проекций переводят широту и долготу в декартовы координаты, как правило единицей измерения в таких координатах используется метр. Такая метровая прямоугольная координатная сетка иногда может быть нанесена и на карту (в виде километровой сетки), но в большинстве случаев ее не наносят. Но мы теперь знаем, что в неявном виде она все-таки есть. Масштаб карты, который указан на карте, какраз и вычислен относительно размера этой сетки. Следует четко понимать, что 1 метр на такой координатной сетке соответствует 1 метру на местности не на всей карте, а лишь в некоторых точках, по определенной линии, либо по линиям в определенном направлении, в остальных же точках или направлениях проявляются искажения и 1 метр на местности не соответствет 1 метру координатной сетки.

Небольшое отступление. Функция из первой части статьи WGS84_XYZ как раз и является преобразованием координат из СК WGS84 в прямоугольные координаты, но выраженные не в метрах, а в пикселях. Как видно, формула там предельно простая, если бы использовалась проекция Меркатора не на сфере, а на эллипсоиде, то формула была бы посложнее. Именно поэтому, чтобы облегчить жизнь браузерам, была выбрана сфера, в последствии проекция WebMercator так и прижилась со своей сферой, за что ее часто ругают.

Для своих нужд я использовал документ под названием Map projections used by the U.S. Geological Survey в формате pdf, который можно найти в Интернет. В документе для каждой проекции приведены подробные инструкции, по которым легко написать функцию преобразования на языке программирования.

Продолжим писать наш алгоритм. Реализуем одну из популярных проекций под названием поперечная проекция Меркатора (Transverse Mercator) и один из его вариантов под названием проекция Гаусса-Крюгера (Gauss-Kruger).

struct TransverseMercatorParam {    struct Ellipsoid *ep;    double k;           /* Масштабный коэффициент                                 */    double lat0;        /* Начальная параллель  (в радианах)                      */    double lon0;        /* Центральный меридиан (в радианах)                      */    double n0;          /* Условное северное смещение для начальной параллели     */    double e0;          /* Условное восточное смещение для центрального меридиана */    double zw;          /* Ширина зоны (в радианах)                               */    double zs;          /* Условное восточное смещение между зонами               */    // Вспомогательные величины    double e2__a2k2, ie2__a2k2, m0, mp, imp;    double f0, f2, f4, f6;    double m1, m2, m4, m6;    double q, q1, q2, q3, q4, q6, q7, q8;    double q11, q12, q13, q14, q15, q16, q17, q18;    // Вспомогательные величины - 2    double apk, n, b, c, d;    double b1, b2, b3, b4;};struct TransverseMercatorParam TM_GaussKruger = {    .ep   = &Ellipsoid_Krasovsky,    .zw   = rad(6,0,0),    .lon0 = -rad(3,0,0),    .e0   = 5e5,    .zs   = 1e6,};


Особенностью поперечной проекции Меркатора является то, что она конформна, т.е сохраняется форма объектов на карте и углы, а также то, что сохраняется масштаб вдоль одного центрального меридиана. Проекция пригодна для всего земного шара, но при отдалении от центрального меридиана растут искажения, поэтому всю земную поверхность нарезают на узкие полоски по меридианам, которые называются зонами, для каждой из которых используется свой центральный меридиан. Примерами реализации таких проекций являются проекция Гаусса-Крюгера и UTM, в которых также определен способ распределения координат по зонам, т.е. определена и одноименная СК.



И, собственно, код функций инициализации и преобразования координат. В функции инициализации одноразово вычисляются константы, которые будут многократно использоваться функцией преобразования.

void setupTransverseMercator(struct TransverseMercatorParam *pp) {    double sin_lat, cos_lat, cos2_lat;    double q, n, rk, ak;    if (!pp->k)        pp->k = 1.0;    sin_lat = sin(pp->lat0);    cos_lat = cos(pp->lat0);    cos2_lat = cos_lat * cos_lat;    q = pp->ep->e2 / (1 - pp->ep->e2);    // Приплюснутость n = (a-b)/(a+b)    n = (pp->ep->a - pp->ep->b) / (pp->ep->a + pp->ep->b);    rk = (pp->ep->a + pp->ep->b) * pp->k / 2;    ak = pp->ep->a * pp->k;    pp->e2__a2k2  = pp->ep->e2 / (ak * ak);    pp->ie2__a2k2 = (1 - pp->ep->e2) / (ak * ak);    pp->f6 = 1097.0/4 * n*n*n*n;    pp->f4 = (151.0/3 - 3291.0/8 * n) * n*n*n;    pp->f2 = (21.0/2 + (-151.0/3 + 5045.0/32 * n) * n) * n*n;    pp->f0 = (3.0 + (-21.0/4 + (31.0/4 - 657.0/64 * n) * n) * n) * n;    pp->m6 = rk * 315.0/4 * n*n*n*n;    pp->m4 = rk * (-70.0/3 - 945.0/8 * n) * n*n*n;    pp->m2 = rk * (15.0/2 + (70.0/3 + 1515.0/32 * n) * n) * n*n;    pp->m1 = rk * (-3.0 + (-15.0/4 + (-4.0 - 255.0/64 * n) * n) * n) * n;    // polar distance    pp->mp = rk * (1.0 + (1.0/4 + 1.0/64 * n*n) * n*n);    pp->imp = 1 / pp->mp;    pp->m0 = pp->n0 - pp->mp * pp->lat0 - sin_lat * cos_lat *        (pp->m1 + (pp->m2 + (pp->m4 + pp->m6 * cos2_lat) * cos2_lat) * cos2_lat);    pp->q   =                        q;    pp->q1  =                            1.0/6    * q*q;    pp->q2  =            3.0/8     * q;    pp->q3  =            5.0/6     * q;    pp->q4  =  1.0/6   - 11.0/24   * q;    pp->q6  =            1.0/6     * q;    pp->q7  =            3.0/5     * q;    pp->q8  =  1.0/5   - 29.0/60   * q;    pp->q11 =          - 5.0/12    * q;    pp->q12 = -5.0/24  + 3.0/8     * q;    pp->q13 =                          - 1.0/240  * q*q;    pp->q14 =            149.0/360 * q;    pp->q15 = 61.0/720 - 63.0/180  * q;    pp->q16 =                          - 1.0/40   * q*q;    pp->q17 =          - 1.0/60    * q;    pp->q18 = 1.0/24   + 1.0/15    * q;    // Вспомогательные величины - 2    double e2 = pp->ep->e2;    pp->apk = ak * (1 + n*n / 4 + n*n*n*n / 64) / (1 + n);    pp->n = n;    pp->b = (5 - e2) * e2 * e2 / 6;    pp->c = (104 - 45 * e2) * e2 * e2 * e2 / 120;    pp->d = 1237.0/1260 * e2 * e2 * e2 * e2;    pp->b1 = (1.0/2 + (-2.0/3 + (5.0/16 + 41.0/180 * n) * n) * n) * n;    pp->b2 = (13.0/48 + (-3.0/5 + 557.0/1440 * n) * n) * n*n;    pp->b3 = (61.0/240 - 103.0/140 * n) * n*n*n;    pp->b3 = 49561.0/161280 * n*n*n*n;}void translateTransverseMercator(struct TransverseMercatorParam *pp, int zone,                double lat, double lon, double *ep, double *np) {    double lon2, v, m;    double k4, k6, h3, h5;    double sin_lat = sin(lat);    double cos_lat = cos(lat);    double cos2_lat = cos_lat * cos_lat;    lon -= zone * pp->zw + pp->lon0;    while (unlikely(lon <= -M_PI))        lon += 2*M_PI;    lon2 = lon * lon;    // Вычисление переменных для преобразования    v  = 1 / sqrt(pp->e2__a2k2 * cos2_lat + pp->ie2__a2k2);    m  = ((pp->m6 * cos2_lat + pp->m4) * cos2_lat + pp->m2) * cos2_lat + pp->m1;    k4 = ((pp->q1 * cos2_lat + pp->q2) * cos2_lat + 1.0/4 ) * cos2_lat - 1.0/24;    k6 = ((pp->q3 * cos2_lat + pp->q4) * cos2_lat - 1.0/12) * cos2_lat + 1.0/720;    h3 = ((                    pp->q6) * cos2_lat + 1.0/3 ) * cos2_lat - 1.0/6;    h5 = ((pp->q7 * cos2_lat + pp->q8) * cos2_lat - 1.0/6 ) * cos2_lat + 1.0/120;    // Вычисление северного и восточного смещения (в метрах)    *np = pp->m0 + pp->mp * lat        + (m + v * ((k6 * lon2 + k4) * lon2 + 0.5) * lon2) * cos_lat * sin_lat;    *ep = pp->e0 + pp->zs * zone        + (    v * ((h5 * lon2 + h3) * lon2 + 1.0) * lon ) * cos_lat;}


На выходе функции преобразования будем иметь координаты: восточное и северное смещение (e,n) это прямоугольные декартовы координаты в метрах.



Мы уже очень близки к завершению нашего алгоритма. Нам осталось только найти координаты пикселя (x,y) в файле карты. Т.к. координаты пикселей тоже декартовы, то мы можем найти их афинным преобразованием (e,n) к (x,y). К нахождению параметров самого афинного преобразования мы вернемся чуть позже.

struct AffineParam {    double c00, c01, c02;    double c10, c11, c12;};void translateAffine(struct AffineParam *app, double e, double n,                                double *xp, double *yp) {    *xp = app->c00 + app->c01 * e + app->c02 * n;    *yp = app->c10 + app->c11 * e + app->c12 * n;}


И, наконец, полный алгоритм создания тайла:

void renderTile(ImagePtr tile, int z, unsigned long x, unsigned long y) {    int i, j;    double wlat, wlon;    ImagePtr srcimg;    double lat, lon;    double e, n;    double x, y;    for (i = 0; i < 256; ++i) {        for (j = 0; j < 256; ++j) {            XYZ_WGS84(x * 256 + j, y * 256 + i, z, &wlat, &wlon);            translateHelmertInv(&Helmert_SK42_WGS84, wlat, wlon, 0, &lat, &lon);            findSrcImg(&srcimg, lat, lon);            translateTransverseMercator(&TM_GaussKruger, srcimg->zone, lat, lon, &e, &n);            translateAffine(&srcimg->affine, e, n, &x, &y);            setPixelColor(tile, j, i, interpolatePixelColor(srcimg, x, y));        }    }}


Результат работы для z=12, y=1377, x=2391:



В алгоритме осталась не описанной функция нахождения исходного изображения карты srcimg по заданным в СК карты геодезическим координатам lat, lon. Думаю, с ней и номером зоны srcimg->zone проблем не возникнет, а вот на нахождении параметров афинного преобразования srcimg->affine остановимся более подробно.

Где-то на просторах Интернета очень давно была найдена вот такая функция для нахождения параметров афинного преобразования, привожу ее даже с оригинальными комментариями:

struct TiePoint {    struct TiePoint       *next;    double                lon, lat;    double                e, n;    double                x, y;};void setupAffine(struct AffineParam *app, struct TiePoint *plist) {    /*     * Преобразование задается формулами:     *   x = c00 + c01 * e + c02 * n     *   y = c10 + c11 * e + c12 * n     */    struct TiePoint *pp;     /* Контрольная точка */    double a11, a12, a13;    /*             */    double a21, a22, a23;    /* Матрица 3*3 */    double a31, a32, a33;    /*             */    double b1, b2, b3;       /* Свободный член */    int    m;                /* Индекс цикла для z: m=0 -> z=x, m=1 -> z=y */    double z;                /* Либо x, либо y */    double t;                /* Рабочая величина при вычислении коэффициентов */    /* Нормальная система состоит из 2-х подсистем по 3 уравнения,       отличающихся свободными членами. */    /* Подсчет общих коэффициентов системы */    a11 = a12 = a13 = a22 = a23 = a33 = 0;    for (pp = plist; pp; pp = pp->next) {        a11 += 1;        a12 += pp->e;        a13 += pp->n;        a22 += pp->e * pp->e;        a23 += pp->e * pp->n;        a33 += pp->n * pp->n;    }    /* Преобразование коэффициентов (треугольное разложение матрицы) */    a21 = a12;    a31 = a13;    a12 /= a11;    a13 /= a11;    a22 -= a21 * a12;    a32 = a23 - a31 * a12;    a23 = a32 / a22;    a33 -= a31 * a13 + a32 * a23;    /* Теперь вещи, различные для подсистем X и Y */    for (m = 0; m < 2; m++) { /* m=0 -> X, m=1 -> Y */        /* Подсчет свободных членов подсистемы */        b1 = b2 = b3 = 0;        for (pp = plist; pp; pp = pp->next) {            z = !m ? pp->x : pp->y;            b1 += z;            b2 += pp->e * z;            b3 += pp->n * z;        }        /* Преобразование свободных членов */        b1 /= a11;        b2 = (b2 - a21 * b1) / a22;        b3 = (b3 - a31 * b1 - a32 * b2) / a33;        /* Решение подсистемы */        t = b2 - a23 * b3;        *(!m ? &app->c00 : &app->c10) = b1 - a12 * t - a13 * b3;        *(!m ? &app->c01 : &app->c11) = t;        *(!m ? &app->c02 : &app->c12) = b3;    }}


На вход необходимо подать не менее трех точек привязки, на выходе получаем готовые параметры. Точки привязки это точки, для которых одновременно известны координаты пикселя (x,y) и координаты восточного и северного смещения (e,n). В качестве таких точек можно использовать точки пересечения километровой сетки на исходной карте. А что если на карте нет километровой сетки? Тогда можно задать пары (x,y) и (lon,lat), в качестве таких точек взять точки пересечения параллелей и меридианов, они на карте есть всегда. Осталось только преобразовать (lon,lat) в (e,n), это делается функцией преобразования для проекции, в нашем случае это translateTransverseMercator().

Как видно, точки привязки необходимы, чтобы сообщить алгоритму, какой участок земной поверхности описывает файл с изображением карты. Поскольку обе координатные системы были декартовыми, то сколько бы точек привязки мы не задавали и как далеко бы они не находились друг от друга, расхождение по всей плоскости карты будет в пределах погрешности определения точек привязки. Большинство ошибок состоит в том, что применяется не правильная (с не точно заданными параметрами) проекция, датум или эллипсоид, в результате координаты (e,n) на выходе получаются не в декартовой системе координат, а в немного искривленной относительно декартовой. Визуально это можно представить как мятую простыню. Естественно, увеличение количества точек привязки эту проблему не решает. Проблему может решить тюнинг параметров проекции, датума и эллипсоида, в данном случае большое количество точек привязки позволит разгладить простыню точнее и не пропустить неразглаженных участков.

И в завершение статьи расскажу, как готовые тайлы использовать в OpenLayers и в каком виде их приготовить для программы OsmAnd.

Для OpenLayers тайлы необходимо просто выложить в web и назвать так, чтобы в названии файла или каталога можно было выделить (z,y,x), например так:
/tiles/topo/12_1377_2391.jpg
или, еще лучше так:
/tiles/topo/12/1377/2391.jpg
Тогда их использовать можно таким образом:

map = new OpenLayers.Map (...);map.addLayer(new OpenLayers.Layer.XYZ("Topo Maps", "/tiles/topo/${z}_${y}_${x}.jpg", {      isBaseLayer: false, visibility: false,  }));


Для программы OsmAnd легко определить формат по каким-либо уже имеющимся файлам с набором тайлов. Расскажу сразу про результаты. Тайлы упаковываются в файл базы данных sqlite, который создается таким образом:

CREATE TABLE info AS SELECT 99 AS minzoom, 0 AS maxzoom;CREATE TABLE tiles (x int, y int, z int, s int, image blob, PRIMARY KEY (x,y,z,s));CREATE INDEX IND on tiles (x,y,z,s);UPDATE info SET minzoom=$minzoom, maxzoom=$maxzoom


Колонка s всегда заполняется нулем, для чего она, я не разбирался, в image заносится картинка в исходном бинарном виде, формат (jpg, png, gif) теряется, но OsmAnd определяет его сам по содержимому. В одной базе могут быть упакованы тайлы в разных форматах. Вместо $minzoom и $maxzoom необходимо подставить пределы масштаба занесенных в базу тайлов. Заполненный файл базы данных, например, Topo.sqlitedb переносим на смартфон или планшет в каталог osmand/tiles. Перезапускаем OsmAnd, в Меню -> Configure Map -> Верхний слой появится новая опция Topo это карта с нашими новыми тайлами.
Подробнее..

Перевод Использование геолокационных данных в машинном обучении основные методы

29.04.2021 16:13:12 | Автор: admin
Геолокационные данные могут применяться в различных сценарияхГеолокационные данные могут применяться в различных сценариях

Данные о местоположении это важная категория данных, с которыми часто приходится иметь дело в проектах машинного обучения. Они, как правило, дают дополнительный контекст к данным используемого приложения. Специально к старту нового потока курса по Machine Learning, делимся с вами кратким руководством по проектированию и визуализации элементов с геопространственными данными.


Например, перед вами может встать задача прогнозирования объёмов онлайновых продаж через анализ клиентских данных. Методы машинного обучения способны определить более точные модели покупательского поведения с учётом информации о местоположении клиента. Применение таких методов более эффективно, если речь идёт о физических (не онлайновых) площадках, таких как магазины розничной торговли, рестораны, гостиницы или больницы.

В этой статье я попробую представить обзор методов работы с геолокационными данными для приложений машинного обучения. Эта довольно обширная тема, поэтому здесь я изложу только её основы. В следующих статьях я расскажу о конкретных областях более подробно.

Данные о предметной области приложения (включают основную информацию о местоположении)

Как и в случае со всеми приложениями машинного обучения, начинаем с набора данных о предметной области приложения. Важно понять, что в этих данных, помимо прочей, также содержится информация для определения нужного нам физического местоположения либо в виде адреса, либо в виде географических координат: широты и долготы.

Допустим, мы хотим спрогнозировать цены на недвижимость. Наш набор данных обычно состоит из информации о доме (его типе, времени постройки, площади и т. д.), его цене и, естественно, местоположении. Эти данные представляют собой структурированную таблицу.

Другие приложения могут использовать другие типы данных, например изображения. При прогнозировании для таких предметных областей, как сельское хозяйство (например в составлении прогнозов объёмов производства продуктов питания), геология (например при поиске оптимального места добычи полезных ископаемых), могут использоваться спутниковые изображения.

Спутниковые изображенияСпутниковые изображения

Очевидно, что при составлении прогноза данные о местоположении играют большую роль. Как же их можно использовать?

Геопространственные данные (используются как дополнение к информации о местоположении)

Наш набор данных можно расширить, добавив к нему внешние данные, основанные на местоположении (либо общедоступные, либо полученные от третьей стороны). В этой статье я буду использовать термин "геопространственные данные", или "данные геоинформационной системы (ГИС)", поскольку такие данные включают в себя информацию, связанную с географическим контекстом местности.

С помощью геопространственных данных фиксируются основные географические атрибуты местоположения.

Для нашей задачи прогнозирования цен на недвижимость это может быть информация о районе, местах расположения школ и парков, административных границах города, плотности населения, зонах землетрясений или наводнений, а также о любых других факторах.

Аналогичным образом, если используется информация со спутника, такие данные могли бы включать сведения о расположении рек и лесов, топографическую информацию (сведения о расположении холмов и долин), данные о региональном климате и прочее. Давайте вначале посмотрим, как эти данные представлены.

Форматы геопространственных данных

Таких стандартных форматов может быть несколько. В них хранятся геометрические данные и другие описательные атрибуты географических объектов. Например, в таких данных могут храниться координаты дорожных маршрутов с указанием типа и ширины дорожного покрытия, данные об ограничениях скорости на участках дороги, типе дороги (городская улица, автострада и пр.).

Самые часто используемые форматы:

  • Векторный формат (самый древний и самый распространённый стандарт. Файл в векторном формате фактически представляет собой набор файлов: в одном файле хранятся геометрические данные, в другом специальные атрибуты данных и т. п.).

  • GeoPackage (более новый стандарт, набирающий популярность. Данные хранятся в одном небольшом по размеру файле, реализованном в виде контейнера базы данных SQLLite).

  • GeoJSON (использует стандартный текстовый формат JSON).

Геометрические геоданные хранятся в виде векторных объектов:

  • точка: например местоположения зданий, домов, ресторанов, стоянок такси;

  • ломаная: например улицы, реки, железные дороги;

  • полигон: определяет зоны, например регионы, районы, озера, штаты, страны;

  • мультиполигон: набор полигонов.

В геоинформационных данных используются структуры данных Точка, Ломаная, Полигон и пр.В геоинформационных данных используются структуры данных Точка, Ломаная, Полигон и пр.

Помимо хранения отдельных объектов в геоинформационных данных также может содержаться топологическая информация, то есть информация о связях между объектами. В ней определяются дополнительные объекты:

  • дуга: аналогично ломаной;

  • узел: точка пересечения различных дуг или полигонов;

  • вершины: излом ломаной.

Географические объекты представляют географические особенности и отношения между ними Географические объекты представляют географические особенности и отношения между ними

Они используют структуры данных, определяющие связь между такими объектами, например:

  • Какие объекты находятся рядом друг с другом?

  • Какие дуги соединяются друг с другом?

  • Какие объекты находятся внутри других полигонов?

Загрузка геоданных

К счастью, нам не нужно вникать в тонкости структуры таких форматов и работать с низкоуровневыми структурами данных.

Мы можем использовать замечательную Python-библиотеку GeoPandas, максимально упрощающую выполнение задачи. GeoPandas представляет собой надстройку библиотеки Pandas, поэтому в ней сохранены все её мощные функции.

Она работает с объектами GeoDataFrame и GeoSeries, представляющими собой "пространственно ориентированные" версии объектов DataFrame и Series в Pandas. В надстройке реализуется ряд дополнительных методов и атрибутов, которые можно использовать для работы с геоданными в DataFrame.

GeoDataFrame это обычный объект в Pandas DataFrame с дополнительным "геометрическим" столбцом в каждой строке, в который заносятся данные о местоположении.

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

import geopandas as gpd# Load the Shape map of New York City as a GeoDataFrameshape_df = gpd.read_file(shape_data_dir/'ny.shp')

Предварительная обработка геоданных (базовые системы координат)

Геоданные содержат координаты (x, y) географических мест, как правило, в виде значений широты и долготы. Однако, как ни странно, сами по себе эти координаты не могут быть привязаны к физическому местоположению.

Такие координаты не более чем числа в произвольном пространстве. Для того чтобы они могли однозначно отображать реальное место в реальном мире, они должны быть связаны с системой координат. Такая система координат называется базовой (CRS).

Базовая система координат привязывает координаты широты/долготы к реальной точке на ЗемлеБазовая система координат привязывает координаты широты/долготы к реальной точке на Земле

Нам сейчас просто важно понять, что, поскольку Земля не является идеальной сферой, идеальных универсальных базовых систем координат просто не существует. Систем CRS множество, и каждая оптимизирована под конкретные цели или различные участки Земли.

Предварительная обработка геоданных (картографические проекции)

Аналогичным образом системы CRS используются для проецирования координат местоположения на карту с целью визуализации.

Картографическая проекция выводит изображение 3D-сферы на 2D-поверхностьКартографическая проекция выводит изображение 3D-сферы на 2D-поверхность

Поэтому, если вы получаете геоданные из разных источников, нужно позаботиться о том, чтобы перепроецировать все эти координаты в одну и ту же базовую систему координат. Также нужно убедиться, что она совпадает с базовой системой координат, используемой картой визуализации. В противном случае координаты вашего местоположения будут отображены неверно.

После загрузки и стандартизации геоданных необходимо выполнить анализ полученных данных и визуализировать их.

Визуализация

В Geopandas реализована довольно мощная встроенная функциональность прорисовки. Кроме того, для визуализации геоданных можно использовать другие отличные библиотеки Python, например Folium и Plotly.

Загрузите данные приложения в Pandas Dataframe.

Переведите данные в GeoDataFrame посредством преобразования информации о местоположении в её геометрический формат.

import pandas as pdimport geopandas as gpdfrom shapely.geometry import Point# Load your application data with Pandasapp_df = pd.read_csv(app_data_dir/'app.csv')# Convert it to a GeoDataFrame by transforming the Latitude/Longitude coordinates loc_crs = {'init': 'epsg:4326'}loc_geom = [Point(xy) for xy in zip(app_df['longitude'], app_df['latitude'])]geo_df = gpd.GeoDataFrame(app_df, crs=loc_crs, geometry=loc_geom)# Plot the GeoDataFramegeo_df.plot()

Затем выведите изображение GeoDataFrame.

Изображение данных о местоположенииИзображение данных о местоположении

Сами по себе точки данных не несут осмысленного контекста. Поскольку эти точки представляют собой места в Нью-Йорке, вы должны наложить их на базовую карту Нью-Йорка (которую мы загрузили из Shapefile), и только тогда такой набор точек приобретёт значимость.

Базовая карта Нью-ЙоркаБазовая карта Нью-Йорка
import matplotlib.pyplot as pltfig, ax = plt.subplots(figsize=(10,10))# Plot the base mapshape_df.plot(ax=ax, color='lightgrey', zorder=1)# Overlay the data locationsgeo_df.plot(ax=ax, alpha=0.5, zorder=2)
Для получения контекста наложите данные о местоположении на базовую картуДля получения контекста наложите данные о местоположении на базовую карту

Добавление функциональных возможностей

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

Геокодирование и обратное геокодирование

Геокодирование это способ привязки адреса, записанного в текстовом виде (например адреса дома, который вы собираетесь оценить), к координатам (широте/долготе). И, наоборот, обратное геокодирование позволяет сопоставить с координатами адрес (по улице, городу, штату и почтовому индексу). Такую функциональность обеспечивает Geopy популярная Python-библиотека.

Расстояние между двумя точками

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

  • эвклидово расстояние простое расстояние по прямой между координатами (x, y) двух точек. Это расстояние измеряется на плоской 2D-поверхности;

  • геодезическое расстояние измеряется на сферической Земле, то есть на трёхмерной поверхности. Например, кратчайшим расстоянием будет расстояние между двумя точками на сфере. Расстояние Haversine это примерно то же, что и дуга большого круга, но для его расчёта используется формула Haversine;

  • манхэттенское расстояние применяется к городским местоположениям, в которых улицы образуют кварталы. Используется для расчёта фактического расстояния (например при вождении или пешей прогулке) между двумя точками вдоль городских улиц. Такой расчёт более логичен, чем расчёт расстояния по прямой. Название расстояния происходит от района Манхэттен в Нью-Йорке, заполненного кварталами квадратной формы с дорогами, идущими параллельно друг другу и пересекающимися под прямым углом. Однако на практике, хотя улицы и пролегают прямо, их направление не всегда в точности ориентировано на север, юг, восток или запад. Это обстоятельство учитывается: рассчитывается скорректированное расстояние с учётом угла поворота карты улиц города.

Манхэттенское расстояниеМанхэттенское расстояние

Определение направления из одной точки к другой

При перемещении между двумя точками земного шара помимо расстояния можно рассчитать направление движения (азимут). При выходе из начальной точки рассчитывается начальное направление.

Направление между Кейптауном и МельбурномНаправление между Кейптауном и Мельбурном

Расстояние от точки до ломаной

Это ещё одна полезная информация. Например, вы хотите узнать, как далеко отстоит дом от шоссе, железнодорожного пути или автобусного маршрута? Или какое расстояние от фермы до реки?

Локализация

Кроме точек на карте имеются регионы. Возможно, вам захочется узнать, находится ли точка в определённом регионе.

Например, находится ли дом в школьном округе с высоким рейтингом, так как это обстоятельство существенно влияет на стоимость недвижимости.

Перекрытие регионов

Перекрытие появляется при пересечении или объединении двух регионов. Например, перекрывает ли зона наводнения (или лесная зона) границы округа или штата.

Географическая кластеризация

Помогает группировать места в географические кластеры, которые могут не совпадать с существующими географическими границами страны или штата.

Например, для сегментации клиентов можно определить кластеры на основе местоположения клиентов и создать функцию, назначающую каждого клиента своему кластеру.

Другим примером могут служить кластеры, создаваемые на базе информации о местоположении COVID-инфицированных людей и используемые при мониторинге распространения заболевания.

Встраивание географических областей

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

Модели машинного обучения

Как мы только что убедились, геолокационные данные и связанные с ними характеристики могут быть представлены в виде таблиц с числовыми или дискретными переменными. Например, если были получены данные о местоположении дома, то наравне со всеми другими атрибутами, не связанными с местоположением (например временем постройки и площадью дома), могут использоваться геодезические данные.

Другими словами, работа с данными о местоположении в основном связана с подготовкой данных, а не с созданием каких-либо специфических для данной местности моделей машинного или глубокого обучения. Вы можете продолжать пользоваться теми же моделями, которые обычно используются при работе с табличными данными.

Обратите внимание, что значения широты/долготы часто могут использоваться в чистом виде с древовидными моделями, такими как Random Forest или Gradient Boost, не требующими нормализации данных. Другие модели, например нейросетевые, обычно требуют нормализации значений координат.

В этой статье приведено общее описание методов работы с геолокационными данными. Работа с ними открывает богатые возможности для создания множества увлекательных приложений. А прокачать себя в самом машинном обучении можно на соответствующем курсе.

Узнайте, как прокачаться и в других специальностях или освоить их с нуля:

Другие профессии и курсы
Подробнее..

PostGis. Как найти ошибку в пространственном запросе?

04.09.2020 08:20:07 | Автор: admin
image

Добрый день! Я Виктор, разработчик в Gems development.
Ежедневно наша команда работает с пространственными данными разной сложности и качества. При выполнении операции пространственного пересечения с помощью Postgis в СУБД Postgresql мы столкнулись со следующей ошибкой:
XX000: GEOSIntersects: TopologyException: side location conflict at 10398.659 3844.9200000000001

Запрос, приводящий к ошибке, выглядит так:
select q1.key,st_asGeoJson(geoloc)    from usahalinsk.V_GEO_OOPT q1         where ST_Intersects(geoloc,                ST_GeomFromGeoJSON('{"type":"Polygon","coordinates":                    [[[11165.15,2087.5],[11112,2066.6],[11127.6,2022.5],                    [11122.6,2020.7],                    [11122.25,2021.2],[11107.07,2015.7],                    [11121,1947],[11123.48,1922.99],[11128.42,1874.4],                    [11131.5,1875],[11140.96,1876.81],[11160.73,1880.59],                    [11201.04,1888.3],[11194.2,1908],[11221.93,1916.57],                    [11223.3,1917],[11165.15,2087.5]]]}'))

Решение этой проблемы блокирует работу пользователей, так как не позволяет строить отчёты по данным и замедляет работу по оказанию услуг. Многие действия в разрабатываемой нами системе, такие как: подготовка схемы расположения земельного участка, подготовка градостроительного плана земельного участка и другие, используют пространственные операции подобные этой.

Предположим, что дело в некорректной геометрии. Часто подобную ошибку выдает операция пересечения, если участвующие в запросе объекты имеют самопересечения или дубли точек. Пример данных ошибок в геометрии можно увидеть ниже. (Граница полигона пересекает сама себя и в линии имеется две одинаковые координаты)



Мы провели собственное расследование по поиску причин ошибки и хотим рассказать об этом.
В настоящий момент мы используем Postgis 2.4 и Postgresql 9.6. Перейдем сразу к практике. Проверим константную геометрию на валидность и находим, что все работает корректно.


Можно предположить, что дело в таблице (представлении) usahalinsk.V_GEO_OOPT в котором мы ищем пересечения. Для того, чтобы подтвердить гипотезу, проверим эти данные тоже.



Но и здесь ошибок не находим. Кроме того, данные в выборку не попали вообще. Если бы они были, то задача решалась бы исправлением найденных записей через функцию Postgis st_makeValid.
Но ошибок в представлении нет, а запрос не выполняется. Предлагаем посмотреть его план.


Примечание: в реальной модели мы используем три столбца для геометрии (для полигонов, линий и точек), но для краткости будем называть это полем geoloc в нем хранится геометрия и оно выводится в представление.

Наше представление usahalinsk.V_GEO_OOPT построено как выборка из таблицы с пространственными данными usahalinsk.d_geometry и по полю с геометрией создан пространственный индекс.
Значит, при выполнении запроса идет чтение индекса и где-то в таблице, не попадая в нашу выборку, есть невалидные пространственные данные, которые попали в индекс, т.к. он построен по всей таблице.
Давайте попробуем удалить индекс:
DROP INDEX usahalinsk.d_geometry_cs1_all_sx;

И попробуем выполнить проблемный запрос.



Он выполнился без ошибок. Подтверждаем, что дело в индексе.
Можно вернуть индекс, но с условием на корректную геометрию:
CREATE INDEX d_geometry_cs1_all_sx  ON usahalinsk.d_geometry  USING gist(geoloc)  where st_isvalid(geoloc)=true;

Проверим выполнение и посмотрим план.



Запрос выполнился без ошибок, индекс в плане также используется.
Из минусов такого решения может быть замедление вставки/обновления, т.к. дополнительно будет проверяться условие при перестроении индекса.
Вернем это изменение назад и попробуем всё-таки найти из-за каких объектов в индексе наш запрос не может выполниться.
DROP INDEX usahalinsk.d_geometry_cs1_all_sx; CREATE INDEX d_geometry_cs1_all_sx  ON usahalinsk.d_geometry  USING gist  (geoloc);


Напомню, что у нас есть координаты места ошибки:
XX000: GEOSIntersects: TopologyException: side location conflict at 10398.659 3844.9200000000001


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

select key,ST_IsValidReason(geoloc)from usahalinsk.d_geometry     where st_isvalid(geoloc)!=true        and ST_AsText(geoloc) like '%3844.9200000000001%';        select key,ST_IsValidReason(geoloc)from usahalinsk.d_geometry     where st_isvalid(geoloc)!=true        and ST_IsValidReason(geoloc) like '%3844.9200000000001%';


Чтобы найти объекты, которые влияют на запрос, можно использовать следующий скрипт. Будем проверять каждый объект таблицы и пересекать его с искомой константой. В ходе выполнения ловим исключения и проверяем их содержимое. Если ошибка будет содержать нужные нам координаты, значит это наша проблемная геометрия.

do$$declare    tKey bigint;    rec record;    error_text text;    --Тест ошибки    error_info text:='GEOSIntersects: TopologyException: side location conflict at 10398.659 3844.9200000000001';begin    --Перебираем все данные в таблице    for rec in(select key from usahalinsk.d_geometry)    loop        begin            select key into tKey            from (select * from usahalinsk.d_geometry q1                                 --сравнение по первичному ключу                        where q1.key=rec.key                            and ST_Intersects(geoloc,                                    --константная геометрия                                    ST_GeomFromGeoJSON('{"type":"Polygon","coordinates":[[[11165.15,2087.5],                                    [11112,2066.6],[11127.6,2022.5],[11122.6,2020.7],                                    [11122.25,2021.2],[11107.07,2015.7],[11121,1947],                                                    [11123.48,1922.99],[11128.42,1874.4],[11131.5,1875],[11140.96,1876.81],                                    [11160.73,1880.59],[11201.04,1888.3],[11194.2,1908],[11221.93,1916.57],[11223.3,1917],                                    [11165.15,2087.5]]]}'))) geoQ;                exception when others then                --получаем ошибку если она есть              GET STACKED DIAGNOSTICS error_text = MESSAGE_TEXT;            --Если её тест равен искомому, то выводим ключ              if error_text=error_info then                raise info '%',rec.key;                end if;                          end;    end loop;end$$;

В результате получаем три ключа геометрии, которые легко исправить:
update usahalinsk.d_geometry set cs1_geometry_polygone=st_collectionextract(st_makevalid(geoloc),3)where key in(1000010001988961,1000010001989399,1000010004293508);


Отвечу на возникающий вопрос: почему нельзя исправить всю ошибочную геометрию в таблице, чтобы не искать выборочно причины?.
Дело в том, что пространственные данные поступают к нам в систему из различных источников (в т.ч. из Росреестра) и мы не можем выполнять исправление (как правило, оно сопровождается искажением) всех данных. Получив нужные ключи, мы анализируем какие данные они представляют и можно ли их исправить.

Тривиальная задача поиска причины ошибки может превратиться в целое расследование со скриптом исправления в конце.

Более сложный вариант задачи: как быть, если выполняется пересечение не с константой, а с другой таблицей? Как вариант, выполнять пересечение каждого из участвующих объектов первой таблицы с каждым объектом второй. И отлавливать исключения.

А как часто вы сталкиваетесь с проблемами геометрии и как обеспечиваете качество пространственных данных?
Подробнее..

Непростой бэкап строим BaaS-сервис для работы с ПДн и ГИС

18.04.2021 20:08:22 | Автор: admin

Нередко наши клиенты, уже использующие облака для работы с персональными данными, задаются вопросом: а подходят ли облачные сервисы для бэкапов ПДн? Сегодня мы на собственном опыте покажем, какие требования к резервному копированию ПДн и данных ГИС предъявляют регуляторы, как их выполняет сервис-провайдер в облаке и как мы решаем насущные задачи клиентов по обеспечению доступности персональных данных при использовании распределенной инфраструктуры.

Требования со стороны регуляторов

Практически все наши клиенты используют сервисы резервного копирования. При этом, работая с персональными данными, они понимают, что регуляторы предъявляют достаточно высокие требования к безопасности такой чувствительной информации. Предлагаем на нашем провайдерском опыте разобраться, как эти меры выполняются в облаке.

Прежде чем перейти к техническим вопросам, обсудим требования регуляторов по работе с ИСПДн и меры, которые необходимо выполнить при организации резервного копирования персональных данных.

Если как следует ознакомиться с основным регулирующим законом, 152-ФЗ О персональных данных, а именно со ст. 19, можно увидеть следующее:

Статья 19. Меры по обеспечению безопасности персональных данных при их обработке

1. Оператор при обработке персональных данных обязан принимать необходимые правовые, организационные и технические меры или обеспечивать их принятие для защиты персональных данных от неправомерного или случайного доступа к ним, уничтожения, изменения, блокирования, копирования, предоставления, распространения персональных данных, а также от иных неправомерных действий в отношении персональных данных.

2. Обеспечение безопасности персональных данных достигается, в частности:

7) восстановлением персональных данных, модифицированных или уничтоженных вследствие несанкционированного доступа к ним;

Иными словами, закон гласит, что на случай несанкционированного вмешательства, при котором ПДн были уничтожены или повреждены, необходимо иметь средства для их восстановления.

Вывод 1, очевидный. Бэкапы не являются задачей на усмотрение оператора ПДн, а, согласно требованиям 152-ФЗ, лежат в его зоне ответственности: резервное копирование ПДн его прямая обязанность.

Строя свою ИС, работающую с ПДн и ГИС, важно учитывать требования приказов ФСТЭК 17 и 21, которые относят средства резервного копирования к средствам защиты информации.

Приказ ФСТЭК 17:

20. Организационные и технические меры защиты информации, реализуемые в информационной системе в рамках ее системы защиты информации, в зависимости от угроз безопасности информации, используемых информационных технологий и структурно-функциональных характеристик информационной системы должны обеспечивать: доступность информации

20.11. Меры по защите среды виртуализации должны исключать несанкционированный доступ к информации, обрабатываемой в виртуальной инфраструктуре, и к компонентам виртуальной инфраструктуры, а также воздействие на информацию и компоненты, в том числе к средствам управления виртуальной инфраструктурой, монитору виртуальных машин (гипервизору), системе хранения данных (включая систему хранения образов виртуальной инфраструктуры), сети передачи данных через элементы виртуальной или физической инфраструктуры, гостевым операционным системам, виртуальным машинам (контейнерам), системе и сети репликации, терминальным и виртуальным устройствам, а также системе резервного копирования и создаваемым ею копиям.

Приказ ФСТЭК 21:

ЗСВ.8 Резервное копирование данных, резервирование технических средств, программного обеспечения виртуальной инфраструктуры, а также каналов связи внутри виртуальной инфраструктуры

ОДТ.4 Периодическое резервное копирование персональных данных на резервные машинные носители персональных данных

ОДТ.5 Обеспечение возможности восстановления персональных данных с резервных машинных носителей персональных данных (резервных копий) в течение установленного временного интервала

Вывод 2. Клиент, работая с ПДн в облаке, обязан решить вопрос доступности информации и, как следствие, регулярно выполнять резервное копирование.

Помимо приказов выше, необходимо обратить внимание на следующие нормативные документы:

Эти документы указывают на необходимость использования средств оперативного восстановления информации и фиксируют максимальное время восстановления доступа к потерянным или измененным вследствие несанкционированного доступа данным не более 8 часов.

Вывод 3. Приказы выше не устанавливают никаких требований к техническим особенностям системы или методикам выполнения резервного копирования. Однако максимальное время, за которое необходимо восстановить доступ к данным, зафиксировано в этих нормативных актах и составляет 8 часов.

Давайте подытожим. Приведенные выше документы обязывают оператора иметь систему резервного копирования ПДн, с помощью которой информация должна быть восстановлена не более чем за 8 часов.

Соответственно, оператор ПДн обязан выполнить это требование, отразив технические решения в организационно-распорядительной документации, и корректно использовать их на протяжении всей работы с ИС.

Пользователи облака, аттестованного по 152-ФЗ, получают в свое распоряжение готовую инфраструктуру, готовую к работе с ПДн. Другие сервисы, используемые в защищенном облаке, также должны соответствовать требованиям регуляции. BaaS-решения не исключение. Поэтому провайдер, предоставляя пользователям защищенной инфраструктуры бэкап-инструменты, помимо технических возможностей выполнения резервного копирования, должен обеспечить и соответствие требованиям регуляции.

Как решаются вопросы бэкапа со стороны провайдера

Наше облако аттестовано по требованиям УЗ-1 и К1, соответственно, в нем уже решены два типа задач:

  • резервное копирование непосредственно облачной инфраструктуры и обеспечение высокой доступности данных;

  • предоставление бэкап-сервисов пользователям этого облака.

В части обеспечения доступности информации (ОДТ) мы как провайдер решаем следующие задачи:

  • Периодическое резервное копирование конфигурации компонентов инфраструктуры защищенного сегмента на резервные носители информации (ОДТ.4).

  • Обеспечение возможности восстановления конфигурации компонентов инфраструктуры защищенного сегмента облака с резервных носителей (т.е. из резервных копий) в течение установленного временного интервала (ОДТ.5).

В части защиты среды виртуализации (ЗСВ):

Резервное копирование данных, резервирование технических средств, программного обеспечения виртуальной инфраструктуры, а также каналов связи внутри виртуальной инфраструктуры защищенного сегмента облака (ЗСВ.8).

Технически эти требования по резервному копированию облачной инфраструктуры реализуются на базе продуктов Veeam. Они хорошо зарекомендовали себя в системах виртуализации. Но это не единственная причина, почему для сегмента 152-ФЗ мы выбрали именно это решение:

  • Veeam Backup & Replication имеет сертифицированную версию с классификацией по 4-му уровню отсутствие декларированных возможностей;

  • благодаря наличию сертификата с ним легко проходить аттестацию.

Использование этого решения позволяет нам не только защищать свою инфраструктуру, но и предоставлять возможности резервного копирования пользователям нашего защищенного облака. С помощью Veeam пользователи облака могут бэкапить компоненты своей ИС, выполняя все требования регуляторов, которые мы обсудили выше.

Клиенты нашего облака в рамках одной инфраструктуры получают не только соответствующее 152-ФЗ IaaS-решение, но и готовый инструмент бэкапа, ответственность за который лежит на наших плечах. Пользователю остается лишь корректно настроить задачи резервного копирования и следить за их выполнением.

Таким образом, задача резервного копирования данных ИС клиента, находящихся в аттестованном облаке, решается без каких-либо лишних телодвижений. Во-первых, для этого есть полностью готовые к использованию сервисы. Во-вторых, данные не выходят за пределы аттестованного решения провайдера, поэтому обсуждать вопросы связности площадок не имеет смысла.

Однако клиенты не всегда ограничиваются исключительно сервисами одного провайдера. Многие используют собственные мощности или набор облаков различных поставщиков. Именно поэтому более сложна и интересна ситуация, когда у клиента существует потребность бэкапить персональные данные со своей локальной площадки в облако. Мы как провайдер помогаем таким клиентам решать эту задачу с использованием наших BaaS-сервисов.

Бэкап персональных данных с собственной локальной площадки в облако

При передаче резервных копий за пределы собственной защищенной площадки (то есть в репозиторий провайдера) в первую очередь необходимо решить вопрос безопасности. Построение распределенной системы резервного копирования складывается из трех задач. Посмотрим, что это за задачи и как они решаются:

Задача

Решение

Защита данных при передаче по недоверенным каналам связи

Использование сертифицированных крипторешений

Защита взаимодействующих площадок при подключении к публичным сетям

Использование сертифицированных средств межсетевого экранирования

Обеспечение высокой доступности согласно требованиям регулятора (помним про 8 часов на восстановление)

Построение отказоустойчивой архитектуры решения

Рассмотрим каждый из этих вопросов подробнее на практике.

  1. Как выполнить безопасный обмен данными между площадкой клиента и облаком?

    Есть два способа: зашифровывать бэкап перед отправкой либо воспользоваться защищенным каналом для передачи бэкапа. Поскольку представленные современные средства резервного копирования не имеют функционала сертифицированных средств шифрования, соответственно, не имеют каких-либо сертификатов СКЗИ, первый вариант отпадает. Поэтому систему нужно построить накладными средствами, решив вопрос защиты каналов с помощью установки криптошлюзов.

    Клиент, работая с облаком, привык пользоваться гибкими решениями и инструментами. В облаке, как известно, не приветствуется использование программно-аппаратных решений, поэтому стоит обратить внимание на виртуальные криптошлюзы.

    У такого подхода есть очевидные плюсы. Виртуальный шлюз легко и быстро устанавливается, не требует колокации и лишних затрат, у него отсутствуют характерные для аппаратных решений проблемы. Кроме того, виртуальные шлюзы (в отличие от аппаратных) хорошо масштабируются с точки зрения производительности при увеличении задействованных vCPU растет и производительность решения. Работа с ВМ, которая будет представлять криптошлюз, не требует удаленных рук и присутствия инженеров на площадке.

  2. Как защитить площадки, участвующие в обмене данными, при подключении к публичным сетям?

    На стороне локальной площадки клиента вопрос межсетевого экранирования обеспечивается установкой программно-аппаратного решения, которое, как правило, сертифицировано и как криптошлюз, и как межсетевой экран.

    В облаке мы используем виртуальные криптошлюзы. Да, такие решения могут не иметь сертификатов необходимого уровня по межсетевому экранированию, однако это и не нужно. Аттестованное облако уже защищено общим сертифицированным межсетевым экраном, поэтому надобность в применении отдельных сертифицированных решений отпадает.

  3. Реализация отказоустойчивой архитектуры решения

    В большинстве случаев отказоустойчивые решения строятся методом дублирования или кластеризации. Такой подход оправдан при построении систем на базе программно-аппаратных решений. На стороне облака виртуальные аплайнсы дают нам преимущества они могут быть легко забэкаплены, как и любые другие элементы инфраструктуры.

Своим клиентам мы предлагаем решение на базе продуктов С-Терра. Этот инструмент решает все задачи организации высоконадежной и защищенной связности двух площадок для передачи бэкапов ПДн. В линейке продуктов С-Терра имеются различные варианты программно-аппаратных и виртуальных криптошлюзов. Благодаря широкой линейке можно подобрать оптимальное решение как по производительности, так и по и отказоустойчивости. Производительность шлюзов С-Терра в зависимости от модификации варьируется от 100 Мбит/c до 10 Гбит/с, поэтому и клиент, и мы как провайдер всегда сможем подобрать наиболее оптимальное для своих задач решение.

Варианты подключения локальной площадки клиента к BaaS-сервису

Обмен данными между площадками может быть организован двумя способами.

  1. Veeam Cloud Connect Backup

    Схема используется в том случае, когда у клиента есть сервер Veeam Backup & Replication. Он выполняет резервное копирование объектов со своей площадки, а облако используется как репозиторий. Связь организуется между самим Veeam Backup & Replication и репозиторием через описанный выше защищенный канал связи.

  2. С использованием агентов

    В случае, когда у клиента отсутствует сервер Veeam Backup & Replication на своей площадке, вместо него для резервного копирования используются агенты на серверах и ВМ. Управление осуществляется через Veeam Service Provider Console.

Эти сценарии в дальнейшем могут обеспечить и другие возможности.

  • Восстановление в облако провайдера

При работе с собственной площадкой и хранением резервных копий в облаке, в случае выхода из строя локальных серверов, клиент может восстановиться прямо в аттестованном сегменте облака и продолжить там работу до того момента, пока локальная площадка не будет восстановлена.

  • Миграция инфраструктуры

В случае, если клиент хочет перенести данные с одной площадки на другую, VCC позволяет решить и такую задачу.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru