Paul: MS SQLServer geometry

Moin moin, ich habe eine Tabelle mit geometry-Spalte. Nun möchte ich abfragen, in welchem Polygon ein bestimmter Punkt liegt. Habe das mit PHP und SQL gebastelt. Es wird jede Spalte/Polygon mit STIntersects() abgefragt. Die Abfrage dauert aber so ca. 1/2 Sek. Da das Ergebnis per Ajax sehr oft abgefragt wird, ist das zu langsam. Ich bräuchte ca. 1/10 Sek.

Gibt es da evtl. eine SQL Standardfunktion wie pointInTable() oder so die dann das entsprechnede Polygon/Spalte ausgibt?

Danke und Gruß, Paul

  1. Moin!

    Handbuch lesen:

    Gibt es da evtl. eine SQL Standardfunktion wie pointInTable() oder so die dann das entsprechnede Polygon/Spalte ausgibt?

    https://msdn.microsoft.com/de-de/library/bb933960.aspx

    Grüße Sven

  2. Moin!

    Ganz unabhängig von der Datenbank: Derlei braucht meines Erachtens immer einen Fullscan.

    Zu einer erheblichen Verkürzung könnte es beitragen, wenn Du neben dem Poligon auch mehrere, vorberechnete, viereckige Bereiche definierst in denen 1 Punkt:

    1. definitiv innerhalb des Poligons liegt
    2. definitiv NICHT innerhalb des Poligons liegt

    oder, wenn beides nicht zutrifft:

    • also womöglich innerhalb des Poligons liegt -> weitere Berechnung nötig

    Ob das die Sven verlinkten Lib macht kann ich nicht wissen. Auf jeden Fall erspart eine wohlformulierte Abfrage sehr viele Berechnungen und kann die Antwort in vielen Fällen durch Befragen der Indizes, also in Bruchteilen der 1/10 s liefern.

    Jörg Reinholz