Плагины

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

Re: Плагины

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

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

Re: Плагины

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

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

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

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

Re: Плагины

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

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


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

Re: Плагины

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

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

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

Re: Плагины

Сообщение Александр » 27 май 2024, 16: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
Аватара пользователя
Матвеич
Пользователь
Сообщения: 115
Зарегистрирован: 09 янв 2024, 14:43

Re: Плагины

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

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

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

P.S. По моему разумению такие функции должны быть.
Аватара пользователя
Матвеич
Пользователь
Сообщения: 115
Зарегистрирован: 09 янв 2024, 14:43

Re: Плагины

Сообщение Матвеич » 13 дек 2024, 12:41

Доброго времени суток!

Вопрос : Как в Python API выполнить копию открытой таблицы по указанному пользователем пути.
т.е. есть ли аналог оператора MapBasic : Commit Table rez As filepath+'rezult.tab'
где: rez - открытая таблица,
filepath - путь сохраняемой таблицы - rezult.tab
Аватара пользователя
gisamap
Пользователь
Сообщения: 367
Зарегистрирован: 18 окт 2019, 11:03

Re: Плагины

Сообщение gisamap » 13 дек 2024, 13:04

Добрый день
Вот пример из документации https://axipy.axioma-gis.ru/6.1/referen ... ation.html
Только в отличии от документации
заменил destination с mif на tab
file_in = 'world.tab'
file_out = 'world_copy.tab'
source = provider_manager.tab.get_source(file_in).open()
destination = provider_manager.tab.get_destination(file_out, source.schema)
destination.export(source.items())
Матвеич писал(а): 13 дек 2024, 12:41 Доброго времени суток!

Вопрос : Как в Python API выполнить копию открытой таблицы по указанному пользователем пути.
т.е. есть ли аналог оператора MapBasic : Commit Table rez As filepath+'rezult.tab'
где: rez - открытая таблица,
filepath - путь сохраняемой таблицы - rezult.tab
Аватара пользователя
Матвеич
Пользователь
Сообщения: 115
Зарегистрирован: 09 янв 2024, 14:43

Re: Плагины

Сообщение Матвеич » 13 дек 2024, 13:33

Уважаемый gisamap !

Благодарю Вас и Вашу эрудицию ! !!!!!!!!!!!!!!!!!!!!
Аватара пользователя
Матвеич
Пользователь
Сообщения: 115
Зарегистрирован: 09 янв 2024, 14:43

Re: Плагины

Сообщение Матвеич » 13 дек 2024, 20:14

gisamap доброго времени суток.


пример из документации https://axipy.axioma-gis.ru/6.1/referen ... ation.html
в этом случае , при копировании , пользователь открывает по указанному пути таблицу :
source = provider_manager.tab.get_source(file_in).open() и копирует в нужную папку :
destination = provider_manager.tab.get_destination(file_out, source.schema) ........

У меня ситуация иная: В ГИС Аксиома открыта таблица. Составляется SQL запрос по этой таблице.
Выбранные записи , SQL запроса, хранятся в таблице: "Запрос". Необходимо сохранить копию таблицы "Запрос"

найти методику или операторы копирования таблиц не удается...
Ответить