2016-11-22 2 views
0

Ich habe eine Tabelle in SQL Server, die Straßensegmente mit Geometry-Datentyp enthält: ID (int), Geometrie (Geometrie), Name (varchar (150))SQL Server Geometry Schnittpunkte von Straßen

Ich möchte um eine Ansicht zu erstellen, die Punkte enthält, die die Schnittpunkte der Straßensegmente sind, einen Punkt pro Schnittpunkt, mit einer verketteten Spalte, die die Namen wie folgt kombiniert: "Main Street @ George Street @ Bob Street".

Ich habe diese Arbeit bekam deutlichen Schnittpunkt GEOMS zu schaffen, aber ich habe keine Ahnung, wie die Straßennamen für jeden aggregieren und verketten:

select geometry::STGeomFromText(t2.[g], 26917) as Geom 
from 
(
    select distinct g 
    from 
    (
     select r1.[geom].STIntersection(r2.[geom]).ToString() as [g] 
     from [Roads] r1 inner join 
     [Roads] r2 on 
     r1.[geom].STTouches(r2.[geom]) = 1 
     and r1.[ID] <> r2.[ID] 
    ) t 
) t2 

Antwort

0
select 
       RoadA 
      , RoadB 
      , '@ ' + RoadA + ' @ ' +RoadB as Intersecion 
      , geometry::STGeomFromText(t2.[g], 26917) as Geom 
from 
(
    select distinct g 
      , RoadA 
       , RoadB 
    from 
    (
     select r1.[Geom].STIntersection(r2.[Geom]).ToString() as [g] 
       , r1.Name as RoadA 
       , r2.name as RoadB 

     from Roads r1 inner join 
     Roads r2 on 
     r1.[Geom].STTouches(r2.[Geom]) = 1 
     and r1.[ID] <> r2.[ID] 
    ) t 
) t2 
+0

Das ist ziemlich nah dran, Vielen Dank. Es erzeugt tatsächlich einen Punkt für jedes Straßensegment, wenn also 4 Straßensegmente vorhanden sind, erzeugt es jeweils einen Punkt (übereinander). Gibt es einen Weg, nur einen Punkt zu haben? – firsttube

Verwandte Themen