Saturday 30 September 2017

24115 The Välkända Binära Options


Jag har importerat en csv-fil som innehåller rumsinformation i varchar, sedan konverterade varchar (max) värden till varbinary (max) genom att lägga till 0x till varchar (max) värden före omvandling. Då, förutom 0x i början, ser data i varbinary (max) kolumn exakt samma som varchar (max) en i konverterad till text. Nu kör jag följande skript: där WKB är den varbina (max) kolumnen. Körning av ovanstående skript kasta det här felet: Den välkända binära (WKB) - inmatningen är inte giltig Källan för data är från Open Street Map så det är ingen tvekan om att de är korrekta områdedata. Så jag antar att det måste finnas något fel i vad jag gör eller jag saknar någon punkt att konvertera WKB till geometrisk datatyp. Kan någon hjälpa till med att jag antar att problemet är att konvertera varchar-data till varbinary du konverterar den faktiska karaktärsrepresentationen av binär data, istället för att bara ändra typ till binär. Om du till exempel har uppgifterna 0xDEADBEEF i din varchar kolumn, konverterar du (varbinary (max), DEADBEEF) konvertera ascii teckenföreställningarna till binära. Vad du vill göra istället är att konvertera hex-strängen till binär, vilket är möjligt med hjälp av stilparametern för konvertera. SELECT konvertera (varbinary (max), DEADBEEF, 2) bör göra vad du vill konvertera din varchar wkb-data till verklig binär. Min kollega märkte att ESRI-linjen WKB är felformad innehåller ospecificerade efterföljande data och eftersom den inte är aktiv på GIS. SE, jag lade upp sina kommentarer som ett svar. Jag väntar några dagar för kritik innan jag accepterar det om någon har en mer definitiv reaktion. Under tiden kan jag återskapa undantaget mellan ESRI Line Geometry WKB och SqlServer. Types genom att skapa en helt ny funktionsklass, vilket ger en enstaka geometri och bingo --- dess repeterbar. Varje gång. Men jag googlade det hela dagen igår och hittade ingen bekräftelse på detta. Jag måste vara en dålig Googler När jag försöker konvertera en esriPolylineGeometry till IWkb, gå sedan igenom rörelserna för att exportera till wkbBytes och konsumera den i SqlServer. Types. SqlGeometry. STGeomFromWKB () omvandlingen misslyckas alltid med felet känt binärt (WKB ) Inmatningen är inte giltig. Men om jag använder samma tillvägagångssätt för att få wkbBytes fungerar det bra när jag skickar det via SharpMap-omvandlare. Jag har gjort allt jag kan föreställa mig att utesluta dåliga geometrier, och jag tror säkert att någon har stött på det här innan. På ESRI-sidan försökte Ive använda ITopologyOperator att utföra. Simplify () och. Buffer (0). och ingen skillnad. Ive försökte också lägga till. MakeValid () bakom STGeomFromWKB () till ingen användning. Och det finns ingen skillnad från antingen IWkb. ExportToWkb () eller alternativet IGeometryFactory. CreateWkbVariantFromGeometry (). Så är min fråga: Är WKB verkligen ogiltig? Om så, varför konverterar den ordentligt i SharpMap? Den WKB som kommer ut från ESRI ser så här ut: Nedan visar det första kodblocket det felaktiga tillvägagångssättet när jag försöker konsumera med SqlGeometrys statiska metod STGeomFromWKB (). Det andra blocket visar SharpMap-tillvägagångssättet, vilket fungerar när man konsumerar samma wkbBytes-data. Detta tillvägagångssätt med SqlServer. Types misslyckas .. Men det här sättet att använda SharpMap-omvandlare fungerar. Båda metoderna accepterar polygongeometrier, men jag hoppas att någon vet hur man får SqlServer. Types-tillvägagångssättet att arbeta på Linjegeometrier, eftersom vi har andra projekt som redan använder det biblioteket. Jag tvekar inte att använda SharpMap-omvandlare om det är svaret, men det stör mig att ett okänt tillstånd orsakar SqlServer. Types att misslyckas i samband med Linjegeometrier. frågade 12 juli 12 klockan 22:09 Inga brott, men i själva verket slutsatserna från din medarbetare om hur något han tycker borde fungera gör det inte den officiella sätten att det ska fungera. För det hänvisar vi till OGC-specifikationerna. Om du hänvisar till sidorna 66-70 hittar du specifikationen för det äldre dokumentet, eller sidorna 65-72 för den nyare specifikationen. För att summera det finns ingen del som förbjuder wkb att ha efterföljande data. I själva verket innehåller specifikationen räknare för varje enskilt element så du vet exakt hur mycket av binärblåsen du borde parsa. Det går ner till även med en byte för bytebeställning så att du kan växla mellan endianhet av den binära representationen för varje inre geometrisk element när du analyserar det. Min punkt vet du alltid exakt hur mycket av det du borde läsa och hur du ska vara tolka den. Microsoft har valt att i sin parser fortsätta att konsumera binär innehåll trots att inget i OGC-specifikationen säger att det borde. Då valde de att överväga att villkoret var ogiltigt. Är de fel Tja, det är hur de tolkade det trots att binärblåsen själv uppfyller spec. Att säga WKB tillhandahållen av ESRI är ogiltig, för det här fallet är felaktigt. För övrigt accepterar varje annan WKB-parser där ute (GEOS, PostGIS, GDALs, ESRIs, SharpMaps, Autodesks, etc) detta villkor som OK. Här är ditt exempel med PostGIS: Nu ska jag lägga till några slumpmässiga binära data i slutet av din geometri: Felet är faktiskt i Microsoft-parsern. I en anda av god debatt måste du dock erkänna att de är ganska värdelösa 039s i slutet av den ESRI WKB-strömmen. Om jag använder samma tillvägagångssätt för att konvertera ESRI-polygongeometri, returnerar den en ren ström (åtminstone i MS-parserns ögon). Men jag håller helt med om att det är giltigt där det räknas. I ett försök att nå den bästa freden förklarar jag att ESRI har en smutsig ström, men MS har en tyrannisk parser. Det är alltid intressant när två kraft framåt kommer ihop på mitt is. heh ndash elrobis 14 Jul 12 kl 22:39 Du har rätt om att dessa bytes är ganska värdelösa. Inte säker på var de kommer ifrån (någon intern implementeringsdetaljer förmodligen). Om du vill nitpick, skulle jag faktiskt säga att varje byte som används för att beskriva endianhet i varje geometriskt element är ganska dumt också. Jag kan se hur en binär blob kan komma från olika system och serialiseras så annorlunda. men jag tror att att lägga till varje element är avfall. Jag kan se hur du skulle ha en i början men. Jag förstår varför det är där, men det skulle vara ett ämne för en annan diskussion helt och hållet. ndash Ragi Yaser Burhum 14 juli 12 kl 23:59 I grund och botten svarade min medarbetare mina huvudfrågor, så jag slår in dem här för att svara på tråden. Förhoppningsvis kommer några få människor att rösta på det, vilket ger en viss trovärdighet. Q1: Är ESRI Line Geometry som WKB verkligen ogiltig Ja. Wkb säger att det finns 9 poäng i linjen, och då ska parsern läsa 9 poäng. MS (med rätta) upptäcker mer data (som är 10''en) och berättar att den är uppradad. 10'erna är 5 byte i originaluppsättningen. Ta bort de senaste 10-åren, och det är bra, som .. Q2: Om WKB är verkligen ogiltigt, varför kan SharpMap-biblioteket konvertera det jag är 100 säker på varför sharplib inte misslyckas: formatet dikterar att det finns 9 poäng. Om du inte är picky, slutar du bara läsa och allt SEEMS dandy. Och. varför skulle du faktiskt validera att det inte finns fler byte. Så jag är ganska säker på att SharpLib inte hanterar det specifikt. de slutar bara läsa efter de 9 poängen, och allt verkar fungera. Tack vare MS för att inte bara lämna Bits Amp Bytes hängande. Varför ESRI WKB är felformad fick jag några gissningar: De tilldelar x mängd byte åt gången och är inte exakta när det gäller att stänga byte-arrayen. ELLER. de. När man räknar antalet byte tar de kroppslängden och lägger även till rubriklängden (1 byte kodningsinfo, 1 byte geom-typ, 8 byte antal punkter i linjen) och på något sätt när man räknar kroppen ingår längden av rubriken. orsakar dubbelt rubrikstorlek. Hur som helst, det är bara spekulationer och jag är inte säker på vad informationen är bra för, eftersom vi inte kan göra något åt ​​det ändå :-) svarade 13 juli 12 kl 15:51 När du anger en formfil som en rumslig datakälla och den ligger på din lokal dator, är rumsinformationen automatiskt inbäddad i rapporten. För att använda rymddata från en ESRI-fil dynamiskt måste du göra följande: Ladda upp både. shp-filen och. dbf-filen till samma mapp på en rapportserver och länka sedan till. shp-filen som den rumsliga datakällan. För mer information om ämnet, se följande artikel, Maps (Report Builder 3.0 och SSRS): msdn. microsoften-uslibraryee240845 (SQL.105).aspx Om du har några frågor, var snäll och kontakta mig. Markerad som svar av Eileen Zhao Söndag den 17 juli 2011 kl 16:38 Måndag 11 juli 2011 07:20 Alla svar När du anger en formfil som en rumslig datakälla och den ligger på din lokala dator, data inbäddas automatiskt i rapporten. För att använda rymddata från en ESRI-fil dynamiskt måste du göra följande: Ladda upp både. shp-filen och. dbf-filen till samma mapp på en rapportserver och länka sedan till. shp-filen som den rumsliga datakällan. För mer information om ämnet, se följande artikel, Maps (Report Builder 3.0 och SSRS): msdn. microsoften-uslibraryee240845 (SQL.105).aspx Om du har några frågor, var snäll och kontakta mig. Markerad som svar av Eileen Zhao Söndag den 17 juli 2011 16:38 Måndag 11 juli 2011 07:20 Jag har upplevt detta fel även när lokala uppgifter är inbäddade i rapporten. Den potentiella orsaken som nämns kan inte vara den enda. Söndag 8 januari 2012 18:18 Några stora SHP-filer har orsakat det här felet när kartkontrollen är inställd för att ta upp mindre utrymme. Nyfiken kan problemet gå bort om en något annorlunda utrymmebesparing väljs. Det verkar som om algoritmen som används för att komprimera kartdata kan ge ogiltig binär data på vissa inställningar men ge rätt data med lite olika inställningar. Föreslagna som svar av Stefan Granath Söndag den 6 december, 2015 4:19 Torsdag den 12 januari 2012 15:47 Microsoft genomför en online-undersökning för att förstå din åsikt om Msdn-webbplatsen. Om du väljer att delta, kommer onlineundersökningen att presenteras för dig när du lämnar Msdn-webbplatsen. Vill du delta 2017 Microsoft. Alla rättigheter förbehållna.

No comments:

Post a Comment