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

Создать карту из таблицы

Добавлено: 03 окт 2019, 14:21
tems-ya
Добрый день!

Вопрос собственно простой.

Как одним махом превратить прямоугольную таблицу с координатами и данными в карту с точками и атрибутами.

Сейчас имею, условно работающим что-то типа такого (иллюстрация на уровне идеи)

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

q = QSqlQuery(db)
q.exec_("select * from MyTable")

while(q.next()):
    ATR1 = q.value(1)
    ATR2 = q.value(2)
    ............
    LAT = float(q.value(78))
    LON = float(q.value(79))

т.е. на мой неискушенный взгляд, фактически последовательный перебор всех значений. Если сюда попытаться интегрировать что-то типа такого:

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

q = QSqlQuery(db)
q.exec_("select * from MyTable")

#---------------------------------------------------------------------
layer = QgsVectorLayer('Point?crs=epsg:4326', 'MyPoint' ,'memory')
pr = layer.dataProvider()
pt = QgsFeature()
#---------------------------------------------------------------------

while(q.next()):
	ATR1 = q.value(1)
 	ATR2 = q.value(2)
	............
	LAT = float(q.value(78))
	LON = float(q.value(79))

	#---------------------------------------------------------------------
	point1 = QgsPointXY(LAT,LON)
	pt.setGeometry(QgsGeometry.fromPointXY(point1))
	pr.addFeatures([pt])
	layer.updateExtents()
	#---------------------------------------------------------------------

QgsProject.instance().addMapLayer(layer)
короче, на MapIfo такой фокус не проходил из-за крайне медленной работы.

Думаю здесь будет тоже самое.

Собственно вопрос, как, какими стредствами можно заставить Qgis прревраить целиком массив данных в карту не прибегаю к поэлементному перебору.

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

Спасибо.

Re: Создать карту из таблицы

Добавлено: 03 окт 2019, 14:25
Денис Афанасьев
Таблицу можете выложить?

Re: Создать карту из таблицы

Добавлено: 03 окт 2019, 14:30
trir
сделать это сразу в запросе select

Re: Создать карту из таблицы

Добавлено: 03 окт 2019, 14:57
tems-ya
Таблицу можете выложить?
- не хотелось бы этого делать, чтобы не скатываться на частности, данные в ней - это не принципиально, могут быть любые. Пусть для примера будет, чтото типа:

Col1 Col2 ... ColN LAT LON
-------------------------------------------------------
Atr11 Atr12 ... Atr1N LAT11 LON11
Atr21 Atr22 ... Atr2N LAT21 LON21
.............
.............
.............
AtrM1 AtrM2 ... AtrMN LATM1 LONM1
сделать это сразу в запросе select
- а примерчик можно рабочий, ну или иллюстрацию на уровне идеи, чтобы можно было за что зацепиться и нагуглить решение. Хоть немного конкретики, какие классы использовать, или может технологии какие, слои ...Пока совсем непонятно.

Пока
сделать это сразу в запросе select
- извините, не дорос, в процессе :) , мне надо как тем подводника, что у чукчи спрашивали, куда делась американская подводная лодка, - "ты рукой покажи, куда она пошла" :)

Re: Создать карту из таблицы

Добавлено: 03 окт 2019, 15:06
trir
uri = "/some/path/file.csv?delimiter=%s&xField=%s&yField=%s" % (";", "x", "y")
vlayer = QgsVectorLayer(uri, "layer_name_you_like", "delimitedtext")
uri = "file:///some/path/file.csv?delimiter=%s&crs=epsg:4723&wktField=%s" % (";", "shape")
https://docs.qgis.org/2.8/ru/docs/pyqgi ... layer.html

Re: Создать карту из таблицы

Добавлено: 03 окт 2019, 15:28
tems-ya
:( - это не то. Никаких файлов. Все данные из БД должны загружаються в память и в памяти храниться и обрабатываться. И по ним нужно построить карту...как-то

Хотя... можно обдумать и такой вариант.... костыли, конечно, жуткие, но спасибо и за такую идею...

Коллеги, может кто что еще предложит?

С виртуальными слоями никто не работал?

Re: Создать карту из таблицы

Добавлено: 03 окт 2019, 15:31
trir
Из какой БД?

Re: Создать карту из таблицы

Добавлено: 03 окт 2019, 15:44
tems-ya
Oracle. Причем без геонадстроек. Доступны только координаты. Чисто теоретически, могу на стороне оракла и его средствами сформировать ручками что-нибудь, если это нужно...

Re: Создать карту из таблицы

Добавлено: 03 окт 2019, 16:09
gamm
tems-ya писал(а):
03 окт 2019, 15:28
это не то. Никаких файлов. Все данные из БД должны загружаються в память и в памяти храниться и обрабатываться. И по ним нужно построить карту...как-то
План А) Написать собственную ГИС для визуализации данных, которые "в памяти" (в чьей памяти, кстати - в какой среде, что там у Оракла нынче, все еще джава? и куда вы "карту" рисовать собрались?)

План В) Использовать готовую ГИС, значит вывести данные в ГИС файл, и рисовать его средствами ГИС.

Re: Создать карту из таблицы

Добавлено: 03 окт 2019, 16:41
tems-ya
План А) - шутку оценил :)

Мой вопрос был как раз про План В).
ИМХО csv - ни разу не ГИС формат.
ГИC файлы это shp. У меня в БД храняться данные с координатами.

Как мне средствами ГИС сформировать из них shp файл не плодя лишних (не нужных сущностей в виде всяких временных костылей, типа промежуточных csv). Подключился к БД, скачал данные и сохранил их в виде shp.

Re: Создать карту из таблицы

Добавлено: 03 окт 2019, 17:30
Игорь Лебедь
QGIS - База данных - Менеджер БД, там подключаете свою базу.
Далее запускаете инструмент "Создать точечный слой из таблицы".

Re: Создать карту из таблицы

Добавлено: 03 окт 2019, 18:16
trir
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(12, 14, NULL), NULL, NULL)
https://docs.oracle.com/database/121/SP ... m#SPATL529

Re: Создать карту из таблицы

Добавлено: 03 окт 2019, 18:18
gamm
trir писал(а):
03 окт 2019, 18:16
SDO_GEOMETRY
а оно без геонахлобучки (которой у ТС нет) работать точно будет?

Re: Создать карту из таблицы

Добавлено: 03 окт 2019, 18:21
gamm
tems-ya писал(а):
03 окт 2019, 16:41
ИМХО csv - ни разу не ГИС формат.
ГИC файлы это shp.
какая разница, csv или текстовый MIF/MID, если shape не нравится? зато значки и надписи можно сразу соорудить. Либо цепляться из какой-нибудь ГИС прямо к базе, как написано выше

Re: Создать карту из таблицы

Добавлено: 03 окт 2019, 18:24
trir
Oracle Locator (also referred to as Locator) is a feature of Oracle Database Standard Edition
https://docs.oracle.com/database/121/SP ... m#SPATL340