Страница 1 из 1

Пространственные запросы

Добавлено: 06 янв 2023, 12:05
Афанасич
Как составить SQL запрос вида 'SELECT * FROM table WHERE table.obj Contains pointObject" где pointObject - переменная

Re: Пространственные запросы

Добавлено: 07 янв 2023, 07:01
gisamap
Добрый день.
Насколько я знаю , пока таких возможностей нет.
Один из вариантов записать pointObject в какую то временную таблицу , тогда можно будет выполнить запрос аналогичный запрос

Re: Пространственные запросы

Добавлено: 07 янв 2023, 13:21
Александр
В SQL-запросе можно создавать геометрию "на лету" из строки
Например с помощью FromMIF или GeomFromText

Ниже пример на Python с запросом использующим FromMIF:

Code: Select all

import axipy
from PySide2.QtWidgets import QFileDialog

fn = QFileDialog.getOpenFileName(axipy.view_manager.global_parent, 'Открыть таблицу', None, 'MapInfo tab (*.tab)')
x = 68.42
y = 57.64
if fn[0]:
with axipy.provider_manager.openfile(fn[0]) as tbl:
if isinstance(tbl, axipy.da.Table):
with axipy.data_manager.query_hidden(
f"Select * From {tbl.name} Where obj Contains FromMIF('Point {x} {y}')") as qry:
for itm in qry.items():
print('----------')
for val in itm.values():
if not isinstance(val, (axipy.da.Geometry, axipy.da.Style)):
print(val)

Re: Пространственные запросы

Добавлено: 08 янв 2023, 08:23
Афанасич
Спасибо, сработала привычка писать на mapbasic, хотя sql запросы мне известны. Попробую проверить оба варианта на скорость.

Re: Пространственные запросы

Добавлено: 08 янв 2023, 15:40
gisamap
Добрый день.
У обоих вариантов есть свои плюсы и минусы :
- в 1 варианте создание дополнительной таблицы ( хотя это может быть и ссылка на запрос )
- 2 варианта , это текстовое представление объектов , что приводит к проблеме форматирования ( число знаков после запятой ) и возможно большая длина строки запроса ( простой пример полигон границы какого либо субъекта РФ)

Re: Пространственные запросы

Добавлено: 08 янв 2023, 15:42
gisamap
Добрый день.
У обоих вариантов есть свои плюсы и минусы :
- в 1 варианте создание дополнительной таблицы ( хотя это может быть и ссылка на запрос )
- 2 варианта , это текстовое представление объектов , что приводит к проблеме форматирования ( число знаков после запятой ) и возможно большая длина строки запроса ( простой пример полигон границы какого либо субъекта РФ)

Если говорить о MapBasice , то начиная с 17 версии можно было писать функцию на MapBasic и регистрировать как функцию SQL , что было очень удобно