(26-04-2013, 08:10)sebaq napisał(a): Cześć!
A jak najszybciej uzupełnić tabelę geometry_columns? Insertami, czy może QGIS/PostgreSQL/PostGIS to zrobi automatem? QGIS ładnie dodaje wpisy przy użyciu wtyczki SPIT, aczkolwiek dane mogą być dodawane z różnych źródeł i nie zawsze się o tym pamięta.
Kiedy tworzysz tabelę, w poleceniu CREATE TABLE powinieneś pominąć kolumnę geometrii i dodać ją później funkcją AddGeometryColumn (patrz: dok. PostGIS-a), która od razu doda wpis do geometry_columns oraz pozakłada constrainty. SPIT również trzyma się tej zasady.
Jeśli dodałeś (albo coś dodało) kolumnę od razu w poleceniu CREATE TABLE, to trzeba oddzielnie wstawiać insertami.
Cytat: I jak rozpoznać poprawną geometrię...
Np. SELECT DISTINCT ST_GeometryType na każdej tabeli, czyli to, co teraz robi QGIS przy każdym łączeniu się z bazą.
Cytat:Nie zawsze mamy pewność czy mamy do czynienia tylko z LINESTRING czy MULTILINESTRING. Być może lepiej wtedy stosować 'nadmiarowo' prefix MULTI?
Mieszanie różnych typów geometrii w jednej tabeli generalnie nie jest dobrym pomysłem. Po pierwsze QGIS nie obsługuje mieszanych warstw i właśnie po to analizuje typy geometrii w każdej tabeli, żeby móc je porozbijać na osobne warstwy w razie znalezienia różnych typów. Jeśli oszukasz go w geometry_columns, to może to prowadzić do błędów (a co najmniej do pominięcia rekordów z niepasującym typem). Po drugie to się zwykle wyspie przy eksporcie (np. przez ogr2ogr), po trzecie czasami przy wewnętrznych operacjach w PostGISie trzeba wiedzieć, czy to jest MULTI czy nie i wtedy trzeba takie działania robić dwukrotnie z WHERE ST_GeometryType. Poza tym wszystkim, gdybym wiedział, że w tabeli jest tylko jeden typ geometrii, to w poprzednim akapicie zamiast DISTINCT dałbym zwykłe LIMIT 1.
Absolutnie nie możesz wpisać do geometry_columns MULTI, jeśli w tabeli siedzą zwykłe linie. To jest inny typ, np. po pierwszej konwersji do WKT wysypie się na brakujących nawiasach. Jeśli masz w tabeli MULTI i zwykłe, to przekonwertuj wszystkie zwykłe do MULTI (patrz: google).
Cytat:No i co w przypadku warstw opartych na widokach?
Nie próbowałem, ale jeśli masz porządek w danych, to typy nie powinny się pomieszać, a wpis w geometry_columns powinien działać i dla widoków. Jeśli masz tylko kilka, to zresztą można by je zostawić je w spokoju - może przyśpieszenie na zwykłych tabelach wystarczy.
Cytat:Dodatkowo spytam czy dodanie CONSTRAINTów typu enforce_geotype_the_geom, enforce_srid_the_geom czy enforce_dims_the_geom na tabeli z geometrią jest obligatoryjne i czy cokolwiek poprawia?
Technicznej obligatoryjności nie ma, ale poprawia rzecz najbardziej fundamentalną, czyli spójność danych...