Плагины

Вопросы связанные с работой ГИС Аксиома
Аватара пользователя
gisamap
Сообщения: 229
Зарегистрирован: 18 окт 2019, 08:03

Re: Плагины

Сообщение gisamap » 07 май 2024, 07:13

Добрый день.
Все так же - как описано в документации
property holes: List[Pnt]

Дырки полигона. Реализован в виде списка list.
Пример.

poly = Polygon((0, 0), (1, 10), (10, 1))
poly.holes.append([(2, 2), (2, 4), (5, 3)]) # Добавим дырку
for p in poly.holes[0]: # Просмотр точек дырки полигона
print("Point of hole:", p)
print('Вторая точка первой дырки:', poly.holes[0][1])
Матвеич писал(а): 06 май 2024, 13:20 gismap - доброго времени суток !

задача состоит в считывании координат выбранного площадного объекта - полигона
с двумя дырками. Т.е. необходимо считать координаты внешнего контура полигона и
координаты дырок и записать в массивы

# Определяем выбранный объект
for item in axipy.selection_manager.get_as_cursor() :
print(item.geometry)

>>> Polygon (points=5, holes=0); prj:NonEarth Units "m" Bounds (0, 0) (1000000, 1000000)
количество дырок две , а значение holes=0 ?

# тип выбранного объекта должен быть полигон
if item.geometry.name=='Полигон' :
ps = item.geometry.to_wkt()
print (ps) # печатаем координаты полигона с дырками
>>> POLYGON ((9994.36 11038.82, 10007.12 11102.13, 10074.68 11087.01, 10058.62 11016.15, 9994.36 11038.82), (10042.08 11066.23, 10039.72 11085.12, 10052 11085.6, 10053.42 11069.06, 10042.08 11066.23), (10018.7525 11050.3195, 10029.4505 11066.025, 10036.279 11048.726, 10018.7525 11050.3195))

# Применяем Ваш фрагмент
for p in item.geometry.points : # Просмотр точек полигона
x = p.x
y = p.y
print (x, ' - ', y)
# считали координаты внешнего контура полигона
>>> 9994.36 - 11038.82
10007.12 - 11102.13
10074.68 - 11087.01
10058.62 - 11016.15
9994.36 - 11038.82

# теперь вопрос - как считать координаты дырок . (количество дырок произвольное)
Или координаты можно считывать из to_wkt() ?

Вы отсылаете к руководству Polygon (Точка,Pnt)
понять взаимосвязь операторов и методов без примера очень трудно.
(Ориентируюсь только на Ваши рабочие фрагменты)
Аватара пользователя
Матвеич
Сообщения: 91
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

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

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

P.S. Трудно с MapBasic на Python API переключаться.
Аватара пользователя
Матвеич
Сообщения: 91
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

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

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

Я приношу Вам свои извинения ! уточняю свою ситуацию с полигонами.
эти примеры в руководстве я смотрел , но к своей ситуации применить не смог.
Вложения
Ворос_Уточнение.docx
(214.05 КБ) 7 скачиваний
Аватара пользователя
Матвеич
Сообщения: 91
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

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

Получилось , ... почему -то ... ?!!
Буду разбираться как так вышло ...
Аватара пользователя
Матвеич
Сообщения: 91
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

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

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

Как в Python API создать текстовое окно ввода ? Это возможно ?
Аватара пользователя
Матвеич
Сообщения: 91
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

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

Форумчане нашел решение своей проблемы. Не ожидал от Python API такого варианта.
Аватара пользователя
Матвеич
Сообщения: 91
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

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

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

Вопрос: Как в Python API найти объекты и определить тип объекта в заданной точке (X,Y) Карты ?

Дано: в активном окне карты есть полигон. В нескольких узлах полигона есть точечные объекты.
Задача: Определить узел в котором есть точечный объект и считать семантику точечного объекта.

Это возможно ?
Аватара пользователя
Александр
Сообщения: 444
Зарегистрирован: 18 апр 2019, 08:21

Re: Плагины

Сообщение Александр » 16 май 2024, 17:33

Я не до конца понял задачу, но, например, на одном слое находится полигон, а на другом — точки.
Требуется найти все точки, которые находятся в узлах полигона.
img_poly_point.png
img_poly_point.png (9.74 КБ) 127 просмотров
Для этого можно использовать следующий код (при условии, что системы координат таблиц одинаковые):

Code: Select all

import axipy as axp

with axp.data_manager.query_hidden(
'''SELECT test_poly.ID as PID, test_point.ID
FROM test_poly, test_point
WHERE Touches(FromAxiGeo(test_poly.obj), FromAxiGeo(test_point.obj))''') as qry:
for f in qry.items():
print(f['ID'])
вывод: таблицы для теста:
test_poly_point.zip
(4 КБ) 6 скачиваний
Аватара пользователя
Матвеич
Сообщения: 91
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

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

Александр добрый день !

Уточнение: полигон и точечные объекты находятся в одной таблице (на одном слое).
SQL запрос изменится принципиально или в SQL запросе указывается одна таблица ?
Аватара пользователя
Александр
Сообщения: 444
Зарегистрирован: 18 апр 2019, 08:21

Re: Плагины

Сообщение Александр » 17 май 2024, 09:55

Существенной разницы нет: таблица будет соединяться сама с собой, однако необходимо как-то выделить полигон от остальных объектов.
В приведенном примере я использую значение 99 для поля ID полигона.
img_test_table.png
img_test_table.png (9.55 КБ) 61 просмотр

Code: Select all

import axipy as axp

with axp.data_manager.query_hidden(
'''SELECT poly.ID as PID, point.ID
FROM test_table poly, test_table point
WHERE
poly.id = 99
and point.id <> 99
and Touches(FromAxiGeo(poly.obj), FromAxiGeo(point.obj))''') as qry:
for f in qry.items():
print(f['ID'])
Вывод: таблица для теста:
test_table.zip
(2.93 КБ) 4 скачивания
Ответить