СлоиГеографическойСхемы.Индекс

Методы · IndexOf

Получает индекс объекта в коллекции.

Синтаксис

Индекс(<Объект>)
Полное описание, параметры и ограничения

СлоиГеографическойСхемы.Индекс (GeographicalSchemaLayers.IndexOf)

СлоиГеографическойСхемы (GeographicalSchemaLayers)

Индекс (IndexOf)

Доступен, начиная с версии 8.0.

Синтаксис:
Индекс(<Объект>)
Параметры:

<Объект> (обязательный)
Тип: СлойГеографическойСхемы.
Объект, для которого надо получить индекс.
Возвращаемое значение:
Тип: Число.

Описание:

Получает индекс объекта в коллекции.

Доступность:

Сервер, толстый клиент, внешнее соединение.

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Проверить попадание пунктов в собственную зону

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

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Собственная учебная база 8.5.1.1343, толстый клиент Windows. ГеографическаяСхема из этого урока недоступна в тонком/веб-клиенте: не вставляйте код в тонкий клиент.

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

  3. Каждый запуск создаёт новую схему в локальной переменной. Реквизиты карты и макеты не нужны; готовые карты, SHP, GPS и сервисы карт не загружаются.

  4. Точки и зоны вымышленные учебные объекты. Координаты заданы в градусах, высота в метрах; это не местоположение пользователей или реальных заказов.

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

  6. Запускайте уроки по одному. Статические проверки сверяют API установленной справки, но отрисовка и геометрические операции в 1С пока не проверены запуском.

&НаКлиенте
Процедура Выполнить(Команда)
    Схема = Новый ГеографическаяСхема;
    Схема.Обновление = Ложь;
    Схема.Проекция = ТипПроекцииГеографическойСхемы.ЦилиндрическаяРавноудаленнаяПроекция;
    Схема.СмещениеШироты = 0;
    Схема.СмещениеДолготы = 0;
    Пункты = Схема.Слои.Добавить("УчебныеПункты", Тип("ТочечныйОбъектГеографическойСхемы"));
    Пункты.Текст = "Учебные пункты";
    Пункты.Видимость = Истина;
    Пункты.РазрешитьВыбор = Истина;
    ПунктА = Пункты.Объекты.Добавить();
    ПунктА.Значение = "guide-point-A";
    ПунктА.Координаты = Новый ГеографическиеКоординаты(55, 37, 100);
    ПунктА.Видимость = Истина;
    ПунктА.ТипОтрисовки = ТипОтображенияТочечногоОбъектаГеографическойСхемы.Маркер;
    ПунктА.Маркер = ТипМаркераГеографическойСхемы.БольшойКруг;
    ПунктА.Цвет = Новый Цвет(25, 95, 180);
    ПунктА.ОтображатьДанные = Ложь;
    ПунктА.Подсказка = "Вымышленный пункт А; только учебные данные";
    ПунктА.Расшифровка = Новый Структура("УчебныйКод", "guide-point-A");
    ПунктБ = Пункты.Объекты.Добавить();
    ПунктБ.Значение = "guide-point-B";
    ПунктБ.Координаты = Новый ГеографическиеКоординаты(55.1, 37.2, 110);
    ПунктБ.Видимость = Истина;
    ПунктБ.ТипОтрисовки = ТипОтображенияТочечногоОбъектаГеографическойСхемы.Маркер;
    ПунктБ.Маркер = ТипМаркераГеографическойСхемы.БольшойТреугольник;
    ПунктБ.Цвет = Новый Цвет(35, 145, 75);
    Зоны = Схема.Слои.Добавить("УчебныеЗоны", Тип("ПолигональныйОбъектГеографическойСхемы"));
    Зоны.Текст = "Учебная зона";
    Зона = Зоны.Объекты.Добавить();
    Зона.Значение = "guide-zone-001";
    Зона.Видимость = Истина;
    Зона.Цвет = Новый Цвет(225, 240, 255);
    Зона.ЦветГраницы = Новый Цвет(90, 130, 175);
    Зона.ОтображатьДанные = Ложь;
    Зона.Подсказка = "Вымышленная прямоугольная зона";
    Зона.Расшифровка = "guide-zone-001";
    Контур = Зона.Контуры.Добавить();
    Контур.Добавить(Новый ГеографическиеКоординаты(54.9, 36.9));
    Контур.Добавить(Новый ГеографическиеКоординаты(54.9, 37.3));
    Контур.Добавить(Новый ГеографическиеКоординаты(55.2, 37.3));
    Контур.Добавить(Новый ГеографическиеКоординаты(55.2, 36.9));
    Контур.Добавить(Новый ГеографическиеКоординаты(54.9, 36.9));
    ГдеПроверять = Новый Массив;
    ГдеПроверять.Добавить(Зона);
    Сообщить(Схема.ПроверитьПоРасположению(ПунктА, ГдеПроверять, ТипПоискаОбъектовГеографическойСхемы.ВключаютПолностью));
    Сообщить(Схема.ПроверитьПоРасположению(ПунктБ, ГдеПроверять, ТипПоискаОбъектовГеографическойСхемы.ВключаютПолностью));
    Покрывающие = Схема.НайтиПоРасположению(ПунктА, ГдеПроверять, ТипПоискаОбъектовГеографическойСхемы.ВключаютПолностью);
    Сообщить(Покрывающие.Количество() = 1);
    ГдеИскать = Новый Массив;
    ГдеИскать.Добавить(ПунктА);
    ГдеИскать.Добавить(ПунктБ);
    Внутренние = Схема.НайтиПоРасположению(Зона, ГдеИскать, ТипПоискаОбъектовГеографическойСхемы.ВключаетПолностью);
    Сообщить(Внутренние.Количество() = 2);
    Выбранные = Новый Массив;
    Выбранные.Добавить(ПунктА);
    Выбранные.Добавить(ПунктБ);
    Схема.УстановитьСвойствоОбъектов(Выбранные, "Цвет", Новый Цвет(180, 70, 35));
    Схема.Слои.Сдвинуть(Схема.Слои.Индекс(Зоны), -1);
    Сообщить(Схема.Слои.Получить(0) = Зоны);
    Сообщить(Схема.Слои.Количество() = 2);
    Схема.Обновление = Истина;
    Схема.Показать("Собственная учебная схема — guide-owned-geo");
КонецПроцедуры

Разбор по шагам

  1. Оба пункта строго внутри прямоугольника, не на его границе: широта 54.9–55.2, долгота 36.9–37.3.

  2. ВключаютПолностью ищет кандидатов, которые покрывают переданный объект. Передаём пункт как объект поиска и зону как кандидата.

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

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

  5. УстановитьСвойствоОбъектов получает явно собранный список двух собственных пунктов и существующее свойство Цвет. Внешние имена свойств не принимаются.

  6. Слой зоны был вторым; сдвиг на −1 ставит его первым, чтобы точки рисовались поверх заливки. Не перемещаем координаты объектов.

Как проверить результат

  1. Шесть логических проверок ожидаются Истина; при фактическом запуске проверьте поиск и порядок слоёв.

  2. Две точки должны остаться видимыми поверх зоны; операция изменяет только новую локальную схему.

Ожидаемый результат

На ясной собственноручно построенной геометрии показаны направленный поиск и оформление списка объектов.

На что обратить внимание

  1. Для точки на границе сложного полигона нельзя переносить результаты этого прямоугольного примера без проверки.

  2. Включает и Включают имеют противоположные направления. Названия не взаимозаменяемы.

  3. Сдвинуть слоя не меняет широту/долготу; это порядок отрисовки.

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

Построить два собственных пункта на пустой географической схеме

Создаём слой точечных объектов, задаём координаты и идентификаторы; проверяем поиск и ограничивающий прямоугольник.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Собственная учебная база 8.5.1.1343, толстый клиент Windows. ГеографическаяСхема из этого урока недоступна в тонком/веб-клиенте: не вставляйте код в тонкий клиент.

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

  3. Каждый запуск создаёт новую схему в локальной переменной. Реквизиты карты и макеты не нужны; готовые карты, SHP, GPS и сервисы карт не загружаются.

  4. Точки и зоны вымышленные учебные объекты. Координаты заданы в градусах, высота в метрах; это не местоположение пользователей или реальных заказов.

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

  6. Запускайте уроки по одному. Статические проверки сверяют API установленной справки, но отрисовка и геометрические операции в 1С пока не проверены запуском.

&НаКлиенте
Процедура Выполнить(Команда)
    Схема = Новый ГеографическаяСхема;
    Схема.Обновление = Ложь;
    Схема.Проекция = ТипПроекцииГеографическойСхемы.ЦилиндрическаяРавноудаленнаяПроекция;
    Схема.СмещениеШироты = 0;
    Схема.СмещениеДолготы = 0;
    Пункты = Схема.Слои.Добавить("УчебныеПункты", Тип("ТочечныйОбъектГеографическойСхемы"));
    Пункты.Текст = "Учебные пункты";
    Пункты.Видимость = Истина;
    Пункты.РазрешитьВыбор = Истина;
    ПунктА = Пункты.Объекты.Добавить();
    ПунктА.Значение = "guide-point-A";
    ПунктА.Координаты = Новый ГеографическиеКоординаты(55, 37, 100);
    ПунктА.Видимость = Истина;
    ПунктА.ТипОтрисовки = ТипОтображенияТочечногоОбъектаГеографическойСхемы.Маркер;
    ПунктА.Маркер = ТипМаркераГеографическойСхемы.БольшойКруг;
    ПунктА.Цвет = Новый Цвет(25, 95, 180);
    ПунктА.ОтображатьДанные = Ложь;
    ПунктА.Подсказка = "Вымышленный пункт А; только учебные данные";
    ПунктА.Расшифровка = Новый Структура("УчебныйКод", "guide-point-A");
    ПунктБ = Пункты.Объекты.Добавить();
    ПунктБ.Значение = "guide-point-B";
    ПунктБ.Координаты = Новый ГеографическиеКоординаты(55.1, 37.2, 110);
    ПунктБ.Видимость = Истина;
    ПунктБ.ТипОтрисовки = ТипОтображенияТочечногоОбъектаГеографическойСхемы.Маркер;
    ПунктБ.Маркер = ТипМаркераГеографическойСхемы.БольшойТреугольник;
    ПунктБ.Цвет = Новый Цвет(35, 145, 75);
    Сообщить(Схема.Слои.Количество() = 1);
    Сообщить(Пункты.Имя = "УчебныеПункты");
    Сообщить(Пункты.ТипОбъектов = Тип("ТочечныйОбъектГеографическойСхемы"));
    Сообщить(Схема.Слои.Индекс(Пункты) = 0);
    Сообщить(Схема.Слои.Получить(0) = Пункты);
    Сообщить(Схема.Слои.Найти("Учебные пункты") = Пункты);
    Сообщить(Пункты.Объекты.Количество() = 2);
    Сообщить(Пункты.Объекты.Получить(0).Значение = "guide-point-A");
    Сообщить(Пункты.НайтиПоЗначению("guide-point-B") = ПунктБ);
    Сообщить(Пункты.НайтиПоЗначению("guide-missing") = Неопределено);
    Сообщить(ПунктА.Координаты.Широта = 55);
    Сообщить(ПунктА.Координаты.Долгота = 37);
    Сообщить(ПунктА.Координаты.Высота = 100);
    Сообщить(ПунктА.Слой = Пункты);
    Границы = Пункты.ОграничивающийПрямоугольник;
    Сообщить(Границы.ШиротаЮжнойГраницы <= 55 И Границы.ШиротаСевернойГраницы >= 55.1);
    Сообщить(Границы.ДолготаЗападнойГраницы <= 37 И Границы.ДолготаВосточнойГраницы >= 37.2);
    Сообщить(ТипЗнч(ПунктА.ОграничивающийПрямоугольник) = Тип("ПрямоугольникГеографическойСхемы"));
    Сообщить(ТипЗнч(Схема.ОграничивающийПрямоугольник) = Тип("ПрямоугольникГеографическойСхемы"));
    Схема.Обновление = Истина;
    Схема.Показать("Собственная учебная схема — guide-owned-geo");
КонецПроцедуры

Разбор по шагам

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

  2. Тип объектов задаётся при Добавить слоя; Добавить объекта принимает ноль аргументов, а Координаты устанавливаются отдельно.

  3. Имя слоя служебное, Текст — его подпись. Согласно описанию коллекции Слои.Найти ищет по тексту, поэтому передана подпись Учебные пункты.

  4. Значение — собственный устойчивый ключ пункта. НайтиПоЗначению не ищет подсказку и не запрашивает адрес через интернет.

  5. ОграничивающийПрямоугольник рассчитывается по объектам; его поля только для чтения. Проверяем, что он охватывает оба пункта.

  6. На время построения обновление отключено, затем включено перед показом; это касается отрисовки, не записи базы.

Как проверить результат

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

  2. Наведите курсор на пункт А: подсказка поясняет учебный характер. Файлы и сеть не использованы.

Ожидаемый результат

Есть законченная небольшая схема с настоящими слоями, объектами, координатами и поиском.

На что обратить внимание

  1. Не выдавать эту геометрию за карту дорог или навигационный маршрут.

  2. Перестановка широты/долготы может дать допустимые, но неверные координаты.

  3. Прямоугольник не создаётся через Новый и не заполняется присваиванием readonly-полей.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.