Ich habe eine csv-Datei mit räumlichen Bereichsinformationen in varchar importiert und dann varchar (max) Werte in varbinary (max) umgesetzt, indem du 0x zu varchar (max) Werten vor der Konvertierung hinzufügst. Bis dahin, abgesehen von der 0x am Anfang, sieht die Daten in varbinary (max) Spalte genau die gleiche wie die varchar (max) eins in konvertiert in Text. Jetzt laufe ich das folgende Skript: Wo WKB die varbinary (max) Spalte ist. Das Ausführen des obigen Skripts wirft diesen Fehler auf: Die bekannte Binärdatei (WKB) ist nicht gültig Die Datenquelle ist aus der Open Street Map, ohne Zweifel sind sie korrekte Bereichsdaten. Also nehme ich an, es muss etwas falsch sein, was ich tue oder ich vermisse einen Punkt, um WKB in Geometrie-Datentyp umzuwandeln. Könnte jemand helfen bitte Ich nehme an, das Problem ist bei der Umwandlung der Varchar-Daten in Varbinary Sie konvertieren die tatsächliche Zeichen-Darstellung der binären Daten, anstatt nur die Änderung der Typ in binäre. Wenn Sie also die Daten 0xDEADBEEF in Ihrer Varchar-Spalte haben, dann konvertieren (varbinary (max), DEADBEEF) konvertieren die ascii Zeichen Darstellungen in binär. Was Sie stattdessen tun möchten, konvertiert den Hex-String in binär, was mit dem Style-Parameter von convert möglich ist. SELECT konvertieren (varbinary (max), DEADBEEF, 2) sollte was tun, was du deine varchar wkb Daten in echte binary umwandeln möchtest. Mein Mitarbeiter bemerkte, dass die ESRI Line WKB fehlerhaft ist, enthält nicht spezifizierte nachlaufende Daten und da hes nicht auf GIS aktiv ist. SE, ich habe seine Bemerkungen als Antwort veröffentlicht. Ich warte ein paar Tage auf Kritik, bevor ich es akzeptiere, falls jemand eine endgültigere Reaktion hat. In der Zwischenzeit kann ich die Ausnahme zwischen ESRI Line Geometry WKB und SqlServer. Types neu erstellen, indem ich eine brandneue Feature-Class, die es eine einzelne Linie Geometrie, und Bingo --- seine wiederholbar. Jedes Mal. Aber ich habe den ganzen Tag gestern gegessen und fand keine Bestätigung dafür. Ich muss ein schlechter Googler sein Wenn ich versuche, eine EsriPolylineGeometry in IWkb umzuwandeln, dann geh durch die Bewegungen des Exportierens in wkbBytes und verbrauchen sie in SqlServer. Types. SqlGeometry. STGeomFromWKB () die Konvertierung scheitert immer mit dem Fehler bekannte Binärdatei (WKB ) Eingabe ist nicht gültig. Allerdings, wenn ich den gleichen Ansatz verwenden, um wkbBytes zu bekommen, funktioniert es gut, wenn ich es durch SharpMap-Konverter schicke. Ive getan alles, was ich mir vorstellen kann, um schlechte Geometrien auszuschließen, und ich denke sicher, dass jemand in dieses vorher gegangen ist. Auf der ESRI-Seite habe ich mit ITopologyOperator versucht,.Simplify () und. Buffer (0) auszuführen. Und macht keinen Unterschied. Ive auch versucht Hinzufügen von. MakeValid () hinter STGeomFromWKB () ohne Gebrauch. Und es gibt auch keinen Unterschied von entweder IWkb. ExportToWkb () oder der Alternative IGeometryFactory. CreateWkbVariantFromGeometry (). Also meine Frage ist: Ist die WKB wirklich ungültig Wenn ja, dann warum ist es richtig umwandeln in SharpMap Die WKB kommt aus ESRI sieht so aus: Im Folgenden zeigt der erste Codeblock den fehlerhaften Ansatz, wenn ich versuche, mit SqlGeometrys statische Methode zu konsumieren STGeomFromWKB (). Der zweite Block zeigt den SharpMap-Ansatz, der funktioniert, wenn er die gleichen wkbBytes-Daten verbraucht. Dieser Ansatz mit SqlServer. Types scheitert .. Aber dieser Ansatz mit SharpMap-Konverter funktioniert. Beide Ansätze akzeptieren Polygon-Geometrien, aber ich hoffe, dass jemand weiß, wie man die SqlServer. Types Ansatz, um auf Line Geometrien zu arbeiten, wie wir haben andere Projekte bereits mit dieser Bibliothek zu bekommen. Ich zögere nicht, SharpMap-Konverter zu benutzen, wenn das die Antwort ist, aber es stört mich, dass eine unbekannte Bedingung SqlServer. Types verursacht, um im Kontext von Liniengeometrien zu scheitern. Fragte am 12. Juli um 22:09 Keine Beleidigung, aber eigentlich die Schlussfolgerungen deines Mitarbeiters darüber, wie etwas er denkt, dass es funktionieren soll, macht es nicht offiziell, wie es funktionieren sollte. Dafür verweisen wir auf die OGC-Spezifikationen. Wenn Sie auf die Seiten 66-70 verweisen, finden Sie die Spezifikation für das ältere Dokument oder die Seiten 65- 72 für die neuere Spezifikation. Um es zu vervollständigen, gibt es keinen Teil, der das wkb daran hindert, nachlaufende Daten zu haben. In der Tat, die Spezifikation enthält Zähler für jedes einzelne Element, so dass Sie genau wissen, wie viel von der binären Blob Sie sollten analysieren. Es geht hinunter sogar ein Byte für die Byte-Bestellung, so dass man zwischen Endianness der binären Darstellung jedes inneren Geometrie-Elements wechseln kann, wie man es pausiert. Mein Punkt ist, dass Sie immer genau wissen, wie viel davon Sie lesen und wie Sie sein sollten Interpretieren sie. Microsoft hat sich in ihrem Parser entschieden, den Binärinhalt weiter zu verbrauchen, obwohl nichts in der OGC-Spezifikation sagt, dass es sollte. Dann haben sie sich entschieden, diese Bedingung für ungültig zu halten. Sind sie falsch Nun, das ist, wie sie es interpretiert, obwohl der binäre Blob selbst die Spezifikation befriedigt. Das WKB, das von ESRI zur Verfügung gestellt wird, ist ungültig, für diesen speziellen Fall ist es falsch. Übrigens nimmt jeder einzelne WKB-Parser da draußen (GEOS, PostGIS, GDALs, ESRIs, SharpMaps, Autodesks, etc.) diese Bedingung als OK an. Hier ist dein Beispiel mit PostGIS: Jetzt gehe ich zufällige Binärdaten am Ende deiner Geometrie hinzu: Der Bug ist eigentlich im Microsoft Parser. Im Geiste der guten Debatte, aber du musst zugeben, das sind ziemlich nutzlos 039s am Ende des ESRI WKB-Streams. Wenn ich den gleichen Ansatz verwende, um ESRI-Polygon-Geometrie umzuwandeln, gibt es einen sauberen Stream zurück (zumindest in den Augen des MS-Parsers). Aber ich bin vollkommen einig, dass es gültig ist, wo es zählt. In einem Versuch, den besten Frieden zu erreichen, stelle ich vor, dass ESRI einen schmutzigen Strom hat, aber MS hat einen tyrannischen Parser. Es ist immer interessant, wenn zwei Macht vorwärts kommen im Zentrum Eis. Heh ndash elrobis Sie sind Recht über die Bytes, die ziemlich nutzlos sind. Nicht sicher, woher sie kommen (einige interne Implementierung Detail wahrscheinlich). Wenn du nitpick willst, würde ich eigentlich sagen, dass jedes einzelne Byte verwendet wurde, um Endianness in jedem einzelnen Geometrieelement zu beschreiben, ist auch ziemlich dumm. Ich kann sehen, wie ein binärer Blob aus verschiedenen Systemen kommen kann und somit anders zu unterscheiden. Aber ich denke, dass das Hinzufügen zu jedem Element ist Abfall. Ich kann sehen, wie du am Anfang aber eins haben würdest. Ich verstehe, warum es dort ist, aber das wäre ein Thema für eine andere Diskussion insgesamt. Ndash Ragi Yaser Burhum Jul 14 12 at 23:59 Grundsätzlich antwortete meine Mitarbeiterin meine Hauptfragen, also schmecke ich sie hier, um den Thread zu beantworten. Hoffentlich werden ein paar Leute up-vote es, geben ihm einige zusätzliche Glaubwürdigkeit. Q1: Ist die ESRI Line Geometry als WKB wirklich ungültig Ja. Der wkb sagt, dass es 9 Punkte in der Linie gibt, und dann sollte der Parser 9 Punkte lesen. MS (rechtmäßig) erkennt mehr Daten (die 10 0s) und erzählt seine durcheinander gebracht. Die 10 0s sind 5 Bytes im ursprünglichen Array. Entferne die letzten 10 0s, und seine gute, wie .. Q2: Wenn die WKB wirklich ungültig ist, warum ist die SharpMap-Bibliothek in der Lage, sie umzuwandeln, ich bin mir sicher, warum sharplib nicht versagt: das Format diktiert, dass es 9 Punkte gibt. Wenn du nicht wählerisch bist, hörst du einfach auf zu lesen und alles, was du dandy hast. Und. Warum würdest du eigentlich bestätigen, dass es keine Bytes mehr gibt. Also ich bin mir sicher, dass SharpLib es nicht genau behandelt. Sie hören einfach auf zu lesen nach den 9 Punkten, und alles scheint zu funktionieren. Danke an MS für nicht nur verlassen Bits amp Bytes herumhängen. Wie für WARUM die ESRI WKB fehlerhaft ist, bekam ich ein paar Vermutungen: Sie weisen x die Anzahl der Bytes zu einem Zeitpunkt zu und sind nicht genau über das Schließen des Byte-Arrays. ODER. Sie. Beim Zählen der Anzahl der Bytes nehmen sie die Körperlänge und fügen die Header-Länge hinzu (1 Byte encodinginfo, 1 Byte Geom-Typ, 8 Bytes Anzahl der Punkte in der Zeile), und irgendwie beim Zählen des Körpers, enthalten sie die Länge Des Headers. Verursachung der Doppelkopfgröße. Jedenfalls ist das nur Spekulationen und ich bin mir nicht sicher, was die Info gut ist, denn wir können sowieso nichts dagegen machen :-) antwortete am 13. Juli um 15: 51Wenn du eine Formdatei als räumliche Datenquelle spezifizierst und sie sich auf deinem befindet Lokaler Computer, werden die räumlichen Daten automatisch in den Bericht eingebettet. Um räumliche Daten aus einer ESRI-Datei dynamisch zu verwenden, musst du folgendes ausführen: Laden Sie sowohl die. shp-Datei als auch die. dbf-Datei in denselben Ordner auf einem Berichtsserver und verknüpfen Sie dann mit der. shp-Datei als räumliche Datenquelle. Weitere Informationen zum Thema finden Sie im folgenden Artikel, Maps (Report Builder 3.0 und SSRS): msdn. microsoften-uslibraryee240845 (SQL.105).aspx Wenn Sie irgendwelche Fragen haben, können Sie mich gerne informieren. Als Antwort von Eileen Zhao markiert Sonntag, 11. Juli 2011 um 4:38 Uhr Alle Antworten Wenn Sie eine Formdatei als räumliche Datenquelle angeben und sich auf Ihrem lokalen Computer befindet, ist die räumliche Daten werden automatisch in den Bericht eingebettet. Um räumliche Daten aus einer ESRI-Datei dynamisch zu verwenden, musst du folgendes ausführen: Laden Sie sowohl die. shp-Datei als auch die. dbf-Datei in denselben Ordner auf einem Berichtsserver und verknüpfen Sie dann mit der. shp-Datei als räumliche Datenquelle. Weitere Informationen zum Thema finden Sie im folgenden Artikel, Maps (Report Builder 3.0 und SSRS): msdn. microsoften-uslibraryee240845 (SQL.105).aspx Wenn Sie irgendwelche Fragen haben, können Sie mich gerne informieren. Als Antwort von Eileen Zhao markiert Sonntag, 11. Juli 2011 18:20 Uhr Ich habe diesen Fehler erlebt, auch wenn lokale Daten in den Bericht eingebettet sind. Die potenzielle Ursache kann nicht die einzige sein. Sonntag, 8. Januar 2012 um 18:18 Uhr Einige große Shp-Dateien haben diesen Fehler verursacht, wenn die Kartensteuerung so eingestellt ist, dass sie weniger Platz einnimmt. Neugierig kann das Problem weggehen, wenn ein etwas unterschiedlicher Platzeinsparung gewählt wird. Es scheint, als ob der Algorithmus, der verwendet wird, um die Kartendaten zu komprimieren, ungültige Binärdaten auf einigen Einstellungen ergeben kann, aber korrekte Daten mit leicht unterschiedlichen Einstellungen liefert. Vorgeschlagen als Antwort von Stefan Granath Sonntag, 12. Dezember 2015 4:19 AM Donnerstag, 12. Januar 2012 03:47 Uhr Microsoft führt eine Online-Umfrage durch, um Ihre Meinung über die Msdn-Website zu verstehen. Wenn Sie sich für die Teilnahme entscheiden, wird Ihnen die Online-Umfrage präsentiert, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmen 2017 Microsoft. Alle Rechte vorbehalten. Im neu zu räumlichen Daten. Ich habe einige ESRI-Dateien in meine Datenbank mit der OSGeo4W-Anwendung importiert. Ich möchte nun diese Karten auf einige unserer Client-Server einsetzen, ohne die OSGeo4W-Anwendung zu verwenden. Da ich nur noch 9 Karten habe, habe ich gehofft, einfach so die Daten einzufügen. Msg 6522, Ebene 16, Status 1, Zeile 2 Ein Framework-Fehler trat bei der Ausführung von benutzerdefinierten Routine - oder Aggregat-Quotometrie auf: System. FormatException: 24115: Die bekannte Binärdatei (WKB) ist nicht gültig. Bei Microsoft. SqlServer. Types. WellKnownBinaryReader. ParseWkb (OpenGisType-Typ) bei Microsoft. SqlServer. Types. WellKnownBinaryReader. Read (OpenGisType-Typ, Int32-Srid) bei Microsoft. SqlServer. Types. SqlGeometry. GeometryFromBinary (OpenGisType-Typ, SqlBytes binär, Int32 srid ) Hinweis - ich musste die Binärdaten abschneiden, um innerhalb der postgrenze zu bleiben. Versuchen, die Einsatzzeichenfolgen mit SSMS zu erzeugen. Ich vermute, dass Ihr Raster oder Textausgabe immer in den Abfrageergebnissen trunktiert wird. Klicken Sie mit der rechten Maustaste auf die Datenbank im Objekt-Explorer in ssms select tasksgenerate scripts. Wählen Sie bestimmte Datenbankobjekte aus. Klicken Sie auf den nächsten Klick auf Fortgeschrittene und stellen Sie sicher, dass die Art der Daten in das Skript (letzte Option unter Allgemein) auf Daten gesetzt ist, klicken Sie einfach auf OK, wählen Sie die Ausgabe auf das Abfragefenster und schlagen Sie dann weiter, bis Sie Ihr Skript erhalten. Ich habe es gerade mit einem 30.00043-Punkt-Polygon getestet, das eine WKT-Saitenlänge von 1,2 Millionen Zeichen hat. Bearbeitet von jakubk Dienstag, 17. September 2013 5.30 Uhr Als Antwort von clay123123123 markiert Dienstag, 17. September 2013 um 10:13 Uhr Dienstag , September 17, 2013 5:28 AM Jakubk, das ist das Problem. Ich habe es nach deinem Vorschlag skriptiert und die Datei script. sql ist 120MB Für nur 9 Datensätze muss ich meine Deployment-Strategie überdenken oder einige Karten mit niedrigerer Auflösung finden. Die Karten, die ich verwende, sind von australischen Staaten 43 1 andere Gebiete. Die ursprüngliche Formdatei, die ich importierte, war 30MB. Als Antwort von clay123123123 markiert Dienstag, 17. September 2013 um 10:12 Uhr Alle Antworten versuchen, die Insert-Strings mit SSMS zu generieren. Ich vermute, dass Ihr Raster oder Textausgabe immer in den Abfrageergebnissen trunktiert wird. Klicken Sie mit der rechten Maustaste auf die Datenbank im Objekt-Explorer in ssms select tasksgenerate scripts. Wählen Sie bestimmte Datenbankobjekte aus. Klicken Sie auf den nächsten Klick auf Fortgeschrittene und stellen Sie sicher, dass die Art der Daten in das Skript (letzte Option unter Allgemein) auf Daten gesetzt ist, klicken Sie einfach auf OK, wählen Sie die Ausgabe auf das Abfragefenster und schlagen Sie dann weiter, bis Sie Ihr Skript erhalten. Ich habe es gerade mit einem 30.00043-Punkt-Polygon getestet, das eine WKT-Saitenlänge von 1,2 Millionen Zeichen hat. Bearbeitet von jakubk Dienstag, 17. September 2013 5.30 Uhr Als Antwort von clay123123123 markiert Dienstag, 17. September 2013 um 10:13 Uhr Dienstag , September 17, 2013 5:28 AM Jakubk, das ist das Problem. Ich habe es nach deinem Vorschlag skriptiert und die Datei script. sql ist 120MB Für nur 9 Datensätze muss ich meine Deployment-Strategie überdenken oder einige Karten mit niedrigerer Auflösung finden. Die Karten, die ich verwende, sind von australischen Staaten 43 1 andere Gebiete. Die ursprüngliche Formdatei, die ich importierte, war 30MB. Als Antwort von clay123123123 markiert Dienstag, 17. September 2013 um 10:12 Uhr Danke für die Antwort Olaf - Ich habe die Binärdaten abgerufen, indem du aus dem Abfrageergebnis-Raster in SSMS kopierst. Ich wusste nicht, wie riesig meine Geometrie-Säulen sind. Dienstag, 17. September 2013 um 6:42 Uhr sollte es ok komprimieren, also könnte dein Einsatz als Zip-Datei verpackt werden. Oder wenn es eine setup. exe-Typ-Bereitstellung, dann haben sie automatisch entpacken die. sql in ein temp-Verzeichnis, führen Sie es aus, dann löschen Sie die Temp-Datei. Ihre andere Option wäre zu laufen. Reduce () über die Polygone zuerst, um die Anzahl der Punkte zu reduzieren, aber ich denke nicht, die Reduzierung der Auflösung lohnt sich ein paar Meg .. Dienstag, 17. September 2013 07:21 Ich bin am Ende Verwenden Sie. Reduce () - das muss als Teil unseres Standard-Upgrade-Prozesses eingesetzt werden, der eine Charge beinhaltet, um in SSMS zu laufen (die 120MB-Abfrage stürzte SSMS ein paar Mal auf meine Maschine). Jedenfalls haben die Karten noch viel Auflösung für meine Zwecke. Vielen Dank. Dienstag, 17. September 2013 um 10:12 Uhr Microsoft führt eine Online-Umfrage durch, um Ihre Meinung über die Msdn-Website zu verstehen. Wenn Sie sich für die Teilnahme entscheiden, wird Ihnen die Online-Umfrage präsentiert, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmen Helfen Sie uns, MSDN zu verbessern. Besuchen Sie unsere UserVoice-Seite, um auf Ideen Dev Centers Lernressourcen vorzulegen und abzustimmen
No comments:
Post a Comment