Announcement

Collapse
No announcement yet.

MS SQL Server 2008 - Spatial Data Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • MS SQL Server 2008 - Spatial Data Problem

    Hallo zusammen,

    Es geht um Spatial Data in SQL Server 2008. Ich möchte eine Spalte mit Datentyp geography füllen, was aber schief geht --> System.ArgumentException.
    Ich habe ein bisschen geforscht an welcher Stelle es kracht und habe das Problem eingegrenzt, und zwar auf eine ganz seltsame Gegebenheit, deren Grund ich hoffentlich von euch erklärt bekomme:

    Folgende Zeile liefert genau die Fehlermeldung, die ich auch beim Tabelle befüllen hatte:
    select geography::STPolyFromText('POLYGON((12.908 47.825, 12.923 47.825, 12.923 47.120, 12.908 47.825))', 4326)

    und jetzt kommt das seltsame, folgende Zeile FUNKTIONIERT:
    select geography::STPolyFromText('POLYGON((-12.908 47.825, -12.923 47.825, -12.923 47.120, -12.908 47.825))', 4326)

    ...und der einzige Unterschied beim zweiten ist die Tatsache, dass alle LON -Werte Negativ sind.

    (Anmerkung: Nimmt man geometry statt geography, dann klappen beide Befehle)

    Kann mir jemand erklären, was es damit auf sich hat?
    Vielen Dank im Voraus,
    Tom

  • #2
    Hallo Tom,

    bei mir ist es eher anders rum, das erste geht, das zweite nicht (habe noch die CTP9).

    Erklärung liefert etwas die genau Fehlermeldung

    Meldung 6522, Ebene 16, Status 1, Zeile 1
    .NET Framework-Fehler beim Ausführen der benutzerdefinierten Routine oder des benutzerdefinierten Aggregats 'geography':
    Microsoft.SqlServer.Types.GLArgumentException: 24205: The specified input does not represent a valid geography instance because it exceeds a single hemisphere. Each geography instance must fit inside a single hemisphere. A common reason for this error is that a polygon has the wrong ring orientation.
    Microsoft.SqlServer.Types.GLArgumentException:
    at Microsoft.SqlServer.Types.GLNativeMethods.ThrowExc eptionForHr(GL_HResult errorCode)
    at Microsoft.SqlServer.Types.GLNativeMethods.Geodetic IsValid(GeometryData g)
    at Microsoft.SqlServer.Types.SqlGeography.IsValidExpe nsive()
    at Microsoft.SqlServer.Types.SqlGeography.ConstructGe ographyFromUserInput(GeometryData g, Int32 srid)
    at Microsoft.SqlServer.Types.SqlGeography.STPolyFromT ext(SqlChars polygonTaggedText, Int32 srid)
    .
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Danke für die schnelle Antwort.
      Meine Fehlermeldung ist jedoch etwas anders, da steht nichts mit der hemisphere drin:

      Msg 6522, Level 16, State 1, Line 2
      A .NET Framework error occurred during execution of user-defined routine or aggregate "geography":
      System.ArgumentException: 24200: The specified input does not represent a valid geography instance.
      System.ArgumentException:
      at Microsoft.SqlServer.Types.SqlGeography.ConstructGe ographyFromUserInput(GeoData g, Int32 srid)
      at Microsoft.SqlServer.Types.SqlGeography.GeographyFr omText(OpenGisType type, SqlChars taggedText, Int32 srid)

      Comment


      • #4
        Hallo Tom,

        die Punkte des Polygon müssen im Uhrzeigersinn angegeben werden; siehe auch hier
        http://conceptdev.blogspot.com/2007_12_01_archive.html
        Nach der anstrengenden Woche kann ich mir geistig zwar nicht mehr vorstellen, "wie rum" diese Koordinaten bei Dir sind (kann nur noch ans Feierabend-Bier denken ).

        Dein zweites
        select geography::STPolyFromText('POLYGON((-12.908 47.825, -12.923 47.825, -12.923 47.120, -12.908 47.825))', 4326)

        läuft bei mir auf Fehler; drehe ich die Koordinaten um
        select geography::STPolyFromText('POLYGON((-12.908 47.825, -12.923 47.120, -12.923 47.825, -12.908 47.825))', 4326)

        klappt es.
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Es wird immer seltsamer...
          habe das bei mir mal geprüft, Ergebnis:

          Das erste Polygon, was bei mir NICHT funktioniert, ist im Uhrzeigersinn.
          Das zweite Polygon, das er "frisst", ist GEGEN den Uhrzeigersinn orientiert.
          Und genau das klappt bei dir nicht, sondern erst wenn du die Punkte andersrum orientierst... was läuft da schief bei mir?

          Habe auch noch mit anderen Polygonen getestet, immer wenn ich sie linksrum laufend angab (also gegen Uhrzeiger), hat es geklappt...
          Ich verstehe die Welt nicht mehr :/

          Comment


          • #6
            Sorry, mein Fehler: "counter-clockwise" heisst natürlich "gegen den Uhrzeigersinn".
            Olaf Helper

            <Blog> <Xing>
            * cogito ergo sum * errare humanum est * quote erat demonstrandum *
            Wenn ich denke, ist das ein Fehler und das beweise ich täglich

            Comment


            • #7
              OK, das löst natürlich schlagartig alle Probleme! =)
              Fazit: Polygone müssen für den Datentyp geography in SQL 2008 gegen den Uhrzeigersinn angegeben werden.

              Vielen Dank für deine Mühe!

              Tom

              Comment

              Working...
              X