Плагины

Вопросы связанные с работой ГИС Аксиома
Аватара пользователя
Матвеич
Сообщения: 95
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

Сообщение Матвеич » 17 май 2024, 12:17

Александр! Благодарю Вас !
Я еще не отвык от MapBasic.
Аватара пользователя
Матвеич
Сообщения: 95
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

Сообщение Матвеич » 22 май 2024, 09:48

Александр ! Доброго времени суток!

Как осуществить поиск объектов в заданной точке Карты ?

( по аналогии с MapBasic - функция SearchPoint(map_window_id,x,y) поиск осуществляет по всем доступным слоям ока Карты )
где: map_window_id - идентификатор окна Карты;
x - координата по оси X
y- координата по оси Y
возвращает количество найденных объектов
Аватара пользователя
Матвеич
Сообщения: 95
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

Сообщение Матвеич » 22 май 2024, 10:42

Добавка: аналог функции SearchInfo(sequence_number,attribute)
где : sequence_number - кол-во найденных объектов
attribute : Search_info_table - имя таблицы содержащий этот объект
Search_info_row - номер записи


P.S. назначение функций MapBаsic я привел , чтобы не запутать Вас своими вопросами.
Аватара пользователя
Матвеич
Сообщения: 95
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

Сообщение Матвеич » 27 май 2024, 08:02

Александр ! Доброго времени суток!

Я правильно понял , что осуществить поиск объектов в заданной точке Карты по всем слоям
в Python API такой возможности нет ?
Аватара пользователя
Александр
Сообщения: 464
Зарегистрирован: 18 апр 2019, 08:21

Re: Плагины

Сообщение Александр » 27 май 2024, 13:15

Стандартной функции нет, но её можно реализовать

Code: Select all

import typing

import axipy as axp


class SearchInfo(typing.NamedTuple):
table: axp.Table
features: typing.Iterator[axp.Feature]


def search_point(map_view: axp.MapView, x: float, y: float, dp: int = 1) -> typing.Iterator[SearchInfo]:
"""
:param map_view: Окно карты
:param x: X-координата
:param y: Y-координата
:param dp: точность в пикселях
:return: Список, состоящий из таблицы и принадлежащих ей записей
"""

# найдём прямоугольник на карте плюс-минус точность в пикселях от исходной точки
xp, yp = map_view.scene_to_device_transform.map(x, y)
x1, y1 = map_view.device_to_scene_transform.map(xp - dp, yp - dp)
x2, y2 = map_view.device_to_scene_transform.map(xp + dp, yp + dp)
r = axp.Rectangle(x1, y1, x2, y2, cs=map_view.coordsystem)

# На всех векторных слоях найдём объекты, пересекающиеся с этим прямоугольником
return (SearchInfo(lr.data_object, lr.data_object.itemsInObject(r))
for lr in map_view.map.layers if isinstance(lr, axp.VectorLayer) and isinstance(lr.data_object, axp.Table))


# Пример использования
# Найдём на активной карте все оъекты в точке 37.627773, 55.75062
# Для каждого результата выведем название таблицы и значение из первой колонки
for sp in search_point(axp.view_manager.active, 37.627773, 55.75062):
for f in sp.features:
print(sp.table.name, ": ", f[0])
вывод для карты мира с сайта:

Код: Выделить всё

Столицы :  Москва
Страны :  Россия
Океан :  0
Аватара пользователя
Матвеич
Сообщения: 95
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

Сообщение Матвеич » 28 май 2024, 05:58

Александр ! доброго времени суток !

Благодарю Вас, буду разбираться.

P.S. По моему разумению такие функции должны быть.
Ответить