Wenn ich eine einfache Abfrage versuche

 SELECT "Water_Service_Area_Boundaries_Non_Cadastral"."Network", count(*), sum(st_length(geometry)) FROM "W_Mains_DSC_ExclAbandoned", "Water_Service_Area_Boundaries_Non_Cadastral" WHERE ST_Intersects("Water_Service_Area_Boundaries_Non_Cadastral", "W_Mains_DSC_ExclAbandoned") GROUP BY "Water_Service_Area_Boundaries_Non_Cadastral"."Network"  

Ich erhalte diesen Fehler

Query preparation error on PRAGMA table_info(_tview): ambiguous column name: geometry 

Wenn ich es ohne die st_length Es funktioniert, um eine einfache Gruppe mit Zählungen zu erstellen.

Auch das Folgende funktioniert einwandfrei

  Select sum(st_length(geometry)), count(*) From W_Mains_DSC_ExclAbandoned  

Beispiele für die Teilmenge der Abfrage, die unabhängig voneinander funktionieren, jedoch nicht, wenn sie aneinandergereiht sind

Nur die Gesamtlänge

Beispiel1

Nur die Gruppe

Beispiel2

Wenn ich einfach die st_length

Beispiel3

Ich habe es mit .geometry in ST_Intersects und dies gibt korrekte Zählungen an, gibt aber das Pragma-Geom an Versuchen Sie einen Fehler, wenn die Summe hinzugefügt wird.

Beispiel4

Kommentare

  • ST_Length erfordert Projektionsinformationen (SRID), siehe gis.stackexchange.com/questions/35462/…
  • Ihre erste Abfrage verweist auf zwei Tabellen mit der Spalte geometry. Sie müssen angeben, für welche Geometriespalte Sie ST_length() ausführen möchten. Genau wie Sie die Tabelle für die Spalte Network
  • angegeben haben, verstehe ich ' nicht, warum diese 2 Abfragen mit den Problemen funktionieren, wenn sie von selbst ausgeführt werden. Ich ' füge der Frage Screenshots hinzu.
  • @she_weeds Entschuldigung, ich habe gerade festgestellt, dass es ohne die .geometry nicht ' gab keinen Fehler aus, aber ' gab keinen richtigen Wert für die Zählungen an, sodass der Schnittpunkt ' nicht funktionierte. Das Problem beim Ausführen der Länge der Leitungen im Netzwerkbereich führt jedoch immer noch zum gleichen Problem.

Antwort

Meiner Meinung nach benötigen Sie keine SRID , da Sie nicht mit ST_Length_Spheroid() arbeiten.

Auf was @she_weeds zeigt, ist in der Tat richtig.

 SELECT ws."Network", count(ws."Network"), sum(st_length(ws.geometry)) FROM "Water_Service_Area_Boundaries_Non_Cadastral" AS ws, "W_Mains_DSC_ExclAbandoned" AS wmain WHERE ST_Intersects(ws.geometry, wmain.geometry) GROUP BY ws."Network"  

Kommentare

  • Danke – also musste es wissen, dass ' die Geometrie eines der Eingabedatensätze ist, für die wir die Länge benötigen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.