2016-05-18 8 views
0

Ich habe eine Datenbank von wenigen Millionen Aufzeichnungen (alle Häuser in meinem Land). Jetzt möchte ich alle Datensätze auswählen, die einen benachbarten Datensatz haben (ein Haus ist daran angeschlossen) und diesem den Status "T" geben. Jeder Datensatz hat eine Geometriespalte, die wie folgt aussieht:Wählen Sie Nachbarpolygone in Sql

POLYGON((254059.737 593504.637 0.0, 254059.227 593500.0 0.0, 254059.216 593499.899 0.0, 254058.242 593500.0 0.0, 254057.914 593500.034 0.0, 254057.893 593500.0 0.0, 254057.807 593499.863 0.0, 254052.074 593490.692 0.0, 254052.182 593490.639 0.0, 254058.138 593490.002 0.0, 254057.932 593488.165 0.0, 254074.487 593486.413 0.0, 254075.981 593500.0 0.0, 254076.265 593502.583 0.0, 254076.561 593502.55 0.0, 254076.594 593502.847 0.0, 254059.737 593504.637 0.0)) 

Gibt es eine Möglichkeit, dies mit einer SQL-Anweisung zu tun? Ich habe nie SQL benutzt, also bin ich ein kompletter Neuling. Eine detaillierte Erklärung wird bevorzugt.

Ich begann mit:

SELECT id, geometry, 'T'::text as type 
FROM houses 
WHERE 

Ich glaube, ich habe etwas schneiden Funktion an der WHERE Klausel hinzufügen?

+0

Do not [Cross-post] (http://gis.stackexchange.com/q/194023/1872) –

Antwort

0

Werfen Sie einen Blick auf ST_Intersection oder ST_Crosses.

Also, ich würde so etwas tun:

SELECT DISTINCT 
    h1.id, 
    'T'::text as type 
FROM 
    houses h1, 
    houses h2 
WHERE 
    h1.id <> h2.id and 
    ST_Intersects(h1.geometry, h2.geometry) 
+0

Danke für die Antwort . Aber ich habe 8 Millionen Datensätze. Ich kann 'h1.id' nicht bis 'h8000000' schreiben. Gibt es keinen automatischen Weg, wo er für jedes Haus überprüft, ob es ein Haus mit dem gleichen Liniensegment oder etwas hat? – user30058

+0

Sie müssen das nicht tun, diese Auswahl wird jede Hausgeometrie sammeln, die eine Kreuzung hat, und es wird Ihnen sagen, welche ID-s diese schneidet. Also, wenn ID1 Schnittpunkt mit ID2 und ID3 hat, wird es etwa so aussehen: row1: id1 | id2 | T; row2: id1 | id3 | T; Probieren Sie die Auswahl mit Limit 100 und Sie werden sehen. – perzsa

+0

Ich sehe was du meinst. Probieren Sie die neue Auswahl aus, ich habe die Frage bearbeitet. Dies wird jede ID auswählen, die mindestens einen "Nachbarn" hat. – perzsa