Ergebnis 1 bis 7 von 7

Thema: Geometry von 2 Tabellen vergleichen

  1. #1
    pursey ist offline Neuer Benutzer
    Registriert seit
    15.01.2008
    Beiträge
    4

    Standard Geometry von 2 Tabellen vergleichen

    Hi,
    Ich habe jeweils in seperaten Tabellen Klassifikationen einer Satellitenbildszene zu 2 unterschiedlichen zeitpunkten gespeichert (2004 / 2005) und möchte alle Gebäude finden, welche 2005 neu sind.
    Dafür hab ich mit ST_Overlaps (tab1.geom, tab2.geom) die Objekte aus 2005 selektiert welche sich mit denen von 2004 überlappen inklusive der gid. Das geschieht alles in einer "derived" table.
    Dann selektiere ich aus 2005 alle gebäude inklusive der gid und will die selektieren welche ungleich sind mit denen aus der "derived table" -> die gebäude die sich überlappen. Dafür vergleiche ich die gid.

    In diesem Fall bekomme ich aber alle Gebäude aus 2005 (insgesamt 137). Insgesamt überlappen sich 95, daher sollte ich eigentlich aus dem querry 137 - 95 objekte kriegen, was aber nicht der Fall ist.

    Zu beginn hab ich es mit ST_Disjoint probiert was aber icht funktioniert hat.

    Hier ist der Syntax von meinem Statement,
    Code:
    SELECT 
    DISTINCT ab.gid, ab.class, ab.the_geom
    FROM
    (SELECT * FROM ara05 WHERE class = 'buildings') AS ab,
    (SELECT ara05.the_geom, ara05.class, ara05.gid FROM ara04, ara05 WHERE ST_Overlaps(ara04.the_geom, ara05.the_geom) 
    AND ara04.class = 'buildings' AND ara05.class = 'buildings') AS overlap
    WHERE
    ab.gid <> overlap.gid
    ich hoffe jemand kann mir helfen!

  2. #2
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    794

    Standard

    Stimmen denn die SRIDs, bzw sind sie vorhanden?
    Was bekommst du denn als Ergebnis der Abfrage?
    Gruß Uwe
    Have a lot of fun!

  3. #3
    pursey ist offline Neuer Benutzer
    Registriert seit
    15.01.2008
    Beiträge
    4

    Standard

    hallo uwe,

    Die srid sind noch nicht gesetzt. Das wäre jetzt mein nächster Schritt gewesen um es zu probieren.

    Zu dem was ich als Ergebniss bekomme:
    Ich habe 2 Tabelle für die Klassifikationen von 2004 und 2005, beide haben momentan keine srid.
    Um von einem großen SQL statement wegzugehen habe ich das ganze mal Schritt für Schritt versucht.
    Zunächst habe ich 2 neue, temporäre Tabellen erstellt. "buildings_05" beinhaltet alle Gebäude von 2005, insgesamt 137.
    Und eine weitere Tabelle "overlap_04_05", welche die Gebäude aus 2005 beinhaltet, die gleich sind mit denen aus 2004 (siehe SQL Statement). Insgesamt sind das 95.

    Wenn ich jetzt das statement setze:
    "zeige mir alle gebäude aus den gesamten in 2005 wo die gid gleich ist mit den gebäuden die 2004 auch schon da waren" bekomme ich tatsächlich 95.
    Wenn ich die Abfrage umdrehe bekomme ich 137 und nicht 32.
    Ich habe es probiert mit Vergleichsoperator ("=", "<>") und der "IN" Funktion. Ich krieg bei beiden Methoden das gleiche ergebniss.

    Die Overlap Funktion funktioniert aber soweit ich das sehe. Ich habe die beiden Tabellen als shp exportiert und in ein GIS geladen. Das Ergebnis hat gestimmt! Daher glaube ich nicht, dass es an der srid liegt sondern eher an der gid.

  4. #4
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    794

    Standard

    Das mit der SRID war nur eine Vermutung, früher gabs einige Probleme bei verschiedenen Vergleichen, wenn die nicht da war. Wies im Moment aussieht weiß ich noch nicht, da ich erst seit 3 Tagen das 1.3.2 hab und noch nicht dazu gekommen bin mich damit eingehender zu beschäftigen.

    Aber mal ne logische Frage: Suchst du Gebäude, deren 'Umriss' sich geändert hat aber nicht die ID, oder nur den neuen Datenbstand, also neue Gebäude mit eine neuen ID, die vorher nicht dabei war? Sorry, wenn ich etwas aufm Schlauch steh...

    gruß Uwe
    Have a lot of fun!

  5. #5
    pursey ist offline Neuer Benutzer
    Registriert seit
    15.01.2008
    Beiträge
    4

    Standard

    Ich suche die Gebäude die vorher noch nicht da waren!

    Es handelt sich hierbei um eine objektorientierte Klassifikation! Daher kann es sein, dass sich die Objekte in ihrem Umriss geändert haben aber in ihrer Klassifikation nicht. Ich Hab daher auch nach der Überlappung bzw. nicht Überlappung gesucht und nicht nach den Gebäude die "genau den gleichen umriss haben".

    Man könnte natürlich auch mit einer Distanzrechnung an das Problem herangehen. Ich denk das werde ich mal als nächstes Probieren.

    lg

  6. #6
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    794

    Standard

    Hast du schon ST_Equals oder den Operator '~=' ausprobiert?

    Also etwa so:
    Code:
    select t1.gid, t1.the_geom 
            from tab_2005 t1 left join tab_2004 t2 on (t1.gid==t2.gid) 
            where not (t1.the_geom ~= t2.the_geom)
    Ohne Gewähr so kurz vor Feierabend...

    Gruß UWe
    Have a lot of fun!

  7. #7
    pursey ist offline Neuer Benutzer
    Registriert seit
    15.01.2008
    Beiträge
    4

    Standard

    hallo uwe,

    Ich hab mein Problem gelöst! Danke für deine Hilfe.
    Bei ST_Overlap bekommt man entweder True oder False zurück. Dabei vergleicht er Objekt für Objekt und schaut ob die sich überlappen z.B.

    objekt 1 - objekt 2 - überlappung F
    objekt 1 - objekt 3 - überlappung F
    ........
    Daher hab ich auch so eine Lange Tabelle als Resultat bekommen wenn ich nach "FALSE" selektiert hab. Ich hab es jetzt mit folgendem Sql statment gelöst:

    Code:
    DELETE FROM 
    ara05_buildings
    WHERE EXISTS
    (
        SELECT
        overlap_id.gid_2005
        FROM
            (
            SELECT
            DISTINCT buildings05.gid AS gid_2005
            FROM
                (SELECT * FROM ara05 WHERE class = 'buildings') AS buildings05,
                (SELECT * FROM ara04 WHERE class = 'buildings') AS buildings04
            WHERE
            ST_Overlaps(buildings05.the_geom, buildings04.the_geom) = 't'
            ) 
            AS overlap_id
        WHERE
        overlap_id.gid_2005 = ara05_buildings.gid
    );
    lg

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 24.11.2010, 16:56
  2. Datentyp Geometry
    Von bea im Forum Allgemeines
    Antworten: 2
    Letzter Beitrag: 24.05.2010, 16:51
  3. geometry nach join
    Von karl_ha im Forum PostGIS
    Antworten: 4
    Letzter Beitrag: 23.07.2009, 16:51
  4. Problem INSERT INTO Geometry
    Von pyc09 im Forum PostGIS
    Antworten: 4
    Letzter Beitrag: 02.01.2009, 19:19
  5. Postgis sdo.geometry
    Von rs_II im Forum PostGIS
    Antworten: 3
    Letzter Beitrag: 09.03.2007, 09:00

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum