Jeg har importert en csv-fil som inneholder geografisk områdeinformasjon i varchar, og konverterte varchar (max) - verdier til varbinary (maks) ved å legge til 0x til varchar (max) - verdier før konvertering. Da, bortsett fra 0x i begynnelsen, ser dataene i varbinary (max) kolonne nøyaktig den samme som varchar (max) en i konvertert til tekst. Nå kjører jeg følgende skript: hvor WKB er den varbinære (maks) kolonnen. Kjører det ovennevnte skriptet, kaster denne feilen: Den kjente binære (WKB) - inngangen er ikke gyldig Datakilden er fra Open Street Map, så det er ingen tvil om at de er riktige områdedata. Så jeg antar at det må være noe galt i det jeg gjør eller jeg mangler noe poeng å konvertere WKB til geometri datatype. Kan noen hjelpe, vennligst jeg antar at problemet er når du konverterer varchar-dataene til varbinary du konverterer den faktiske tegnrepresentasjonen av binære data, i stedet for bare å endre typen til binær. F. eks. Hvis du har dataene 0xDEADBEEF i varchar-kolonnen din, så gjør konverteringen (varbinary (max), DEADBEEF) konvertere ascii-tegnrepresentasjonene til binære. Hva du vil gjøre i stedet, er å konvertere hex-strengen til binær, som er mulig ved å bruke stilparameteren til konvertere. SELECT konvertere (varbinary (max), DEADBEEF, 2) bør gjøre hva du vil konvertere varchar wkb data til ekte binær. Min kollega oppdaget at ESRI-linjen WKB er misdannet inneholder uspesifiserte bakre data, og siden de ikke er aktive på GIS. SE, jeg postet hans kommentarer som et svar. Jeg venter noen dager for kritikk før jeg aksepterer det dersom noen har en mer definitiv reaksjon. I mellomtiden kan jeg gjenskape unntaket mellom ESRI Line Geometry WKB og SqlServer. Types ved å lage en helt ny funksjonsklasse, noe som gir den en enkeltlinje geometri og bingo --- det kan repeteres. Hver gang. Men jeg googlede dette hele dagen i går og fant ingen bekreftelse på dette. Jeg må være en dårlig Googler Når jeg prøver å konvertere en esriPolylineGeometry til IWkb, så gå gjennom bevegelsene for eksport til wkbBytes og konsumere den i SqlServer. Types. SqlGeometry. STGeomFromWKB () konverteringen mislykkes alltid med feilen kjente binær (WKB ) er ikke gyldig. Men hvis jeg bruker samme tilnærming til å få wkbBytes, fungerer det bra når jeg sender det gjennom SharpMap-omformere. Jeg har gjort alt jeg kan forestille meg å utelukke fattige geometrier, og jeg tenker sikkert at noen har kjørt inn i dette før. På ESRI-siden forsøkte Ive å bruke ITopologyOperator til å utføre. Simplify () og. Buffer (0). og det gjør heller ingen forskjell. Ive har også prøvd å legge til. MakeValid () bak STGeomFromWKB () til ingen bruk. Og det er heller ingen forskjell fra enten IWkb. ExportToWkb () eller alternativet IGeometryFactory. CreateWkbVariantFromGeometry (). Så spørsmålet mitt er: Er WKB virkelig ugyldig. Hvis så, hvorfor er det derfor konvertert riktig i SharpMap. Den WKB som kommer ut av ESRI ser slik ut: Nedenfor viser den første kodeblokken den sviktende tilnærmingen når jeg forsøker å konsumere ved hjelp av SqlGeometrys statiske metode STGeomFromWKB (). Den andre blokken viser SharpMap-tilnærmingen, som fungerer når du bruker de samme wkbBytes-dataene. Denne tilnærmingen ved hjelp av SqlServer. Types mislykkes. Men denne tilnærmingen ved hjelp av SharpMap-omformere fungerer. Begge tilnærmingene godtar polygon geometrier, men jeg håper noen vet hvordan man får SqlServer. Types tilnærming til å jobbe på Line geometrier, da vi har andre prosjekter som allerede bruker biblioteket. Jeg vil ikke nøle med å bruke SharpMap omformere hvis det er svaret, men det plager meg at en ukjent tilstand forårsaker SqlServer. Types å mislykkes i sammenheng med Line geometrier. spurte jul 12 12 kl 22:09 Ingen forseelse, men faktisk konklusjonene fra kollegaen din om hvordan noe han mener burde virke, gjør det ikke til den offisielle måten den skal fungere på. For det refererer vi til OGC-spesifikasjonene. Hvis du henviser til side 66-70 finner du spesifikasjonen for det eldre dokumentet, eller side 65-72 for den nyere spesifikasjonen. For å oppsummere det, er det ingen del som forbyder wkb å ha etterfølgende data. Faktisk inneholder spesifikasjonen tellere for hvert enkelt element, slik at du vet nøyaktig hvor mye av binærblokken du bør parsere. Det går ned til selv med en byte for byte bestilling slik at du kan bytte mellom endianhet av binær representasjon av hvert indre geometri element som du analyserer det. Mitt poeng er at du alltid vet nøyaktig hvor mye av det du skal lese og hvordan du skal være tolke den. Microsoft har valgt, i sin parser, å fortsette å forbruke det binære innholdet, selv om ingenting i OGC-spesifikasjonen sier det burde. Da valgte de å vurdere denne tilstanden ugyldig. Er de feil Vel, det er hvordan de tolket det selv om binærblokken selv tilfredsstiller spesifikasjonen. Å si WKB levert av ESRI er ugyldig, for dette bestemte tilfellet er feil. For øvrig aksepterer hver eneste annen WKB-parser der ute (GEOS, PostGIS, GDALs, ESRIs, SharpMaps, Autodesks, etc) denne tilstanden som OK. Her er ditt eksempel ved hjelp av PostGIS: Nå skal jeg legge til noen tilfeldige binære data på slutten av din geometri: Feilen er faktisk i Microsoft-parseren. I en ånd av god debatt må du innrømme at de er ganske ubrukelige 039s på slutten av den ESRI WKB-strømmen. Hvis jeg bruker samme tilnærming til å konvertere ESRI-polygongeometri, returnerer den en ren strøm (i det minste i øynene til MS-parseren). Men jeg er helt enig i at det er gyldig hvor det teller. I et forsøk på å nå den beste freden, innlever jeg at ESRI har en skitten strøm, men MS har en tyrannisk parser. Det er alltid interessant når to kraftoverføringer kommer sammen på senteris. heh ndash elrobis 14 Jul 12 kl 22:39 Du har rett om at bytes er ganske ubrukelige. Ikke sikker på hvor de kommer fra (noen interne implementeringsdetaljer sannsynligvis). Hvis du vil nitpick, ville jeg faktisk si at hver eneste byte som brukes til å beskrive endianhet i hvert enkelt geometrielement, er ganske dumt også. Jeg kan se hvordan en binær blob kan komme fra forskjellige systemer og dermed serialisere annerledes. men jeg tror at å legge det til hvert element er avfall. Jeg kan se hvordan du ville ha en i begynnelsen skjønt. Jeg forstår hvorfor det er der, men det ville være et emne for en annen diskusjon helt og holdent. ndash Ragi Yaser Burhum 14 Jul 12 kl 23:59 I utgangspunktet svarte min kollega mine hovedspørsmål, så jeg slår dem inn for å svare på tråden. Forhåpentligvis vil noen få stemme på det, noe som gir det litt ekstra troverdighet. Q1: Er ESRI Line Geometry som WKB virkelig ugyldig Ja. Wkb sier at det er 9 poeng i linjen, og da skal parseren lese 9 poeng. MS (med rette) oppdager flere data (som er 10'erne) og forteller at det er ødelagt. 10-tallet er 5 byte i den opprinnelige gruppen. Fjern de siste 10-tallene, og det er bra, som .. Q2: Hvis WKB er virkelig ugyldig, hvorfor kan SharpMap-biblioteket konvertere det jeg er 100 sikker på hvorfor sharplib ikke feiler: formatet dikterer at det er 9 poeng. Hvis du ikke er kresen, stopper du bare med å lese og alt SEEMS dandy. Og. hvorfor ville du faktisk validere at det ikke er flere byte. Så jeg er ganske sikker på at SharpLib ikke klarer det spesielt. de slutter å lese etter 9 poeng, og alt ser ut til å fungere. Takk til MS for ikke bare å forlate Bits amp Bytes henger rundt. HVORFOR ESRI WKB er misdannet, fikk jeg noen gjetninger: De tildeler x mengden byte om gangen, og er ikke nøyaktig om lukke byte-arrayet. ELLER. de. Når man teller antall byte, tar de kroppslengden og legger også headerlengden (1 byte kodingsinfo, 1 byte geom type, 8 byte antall poeng i linjen), og på en eller annen måte når man teller kroppen, inkluderer de lengden av toppteksten. forårsaker dobbel topptekststørrelse. Uansett, det er bare spekulasjoner og jeg er ikke sikker på hva infoen er bra for, da vi ikke kan gjøre noe med det uansett :-) svaret 13. juli kl 12: 51 Når du angir en formfil som en geografisk datakilde, og den ligger på din lokal datamaskin, blir de geografiske dataene automatisk innebygd i rapporten. For å bruke romlig data fra en ESRI-fil dynamisk, må du gjøre følgende: Last opp både. shp-filen og. dbf-filen til samme mappe på en rapportserver, og deretter koble til. shp-filen som den romlige datakilden. For mer informasjon om emnet, se følgende artikkel, Maps (Report Builder 3.0 og SSRS): msdn. microsoften-uslibraryee240845 (SQL.105).aspx Hvis du har spørsmål, er du velkommen til å gi meg beskjed. Merket som svar av Eileen Zhao 17. juli 2011 kl. 16:38 Mandag 11. juli 2011 07:20 Alle svar Når du angir en formfil som en romlig datakilde, og den er lokalisert på din lokale datamaskin, er det romlige Dataene legges automatisk inn i rapporten. For å bruke romlig data fra en ESRI-fil dynamisk, må du gjøre følgende: Last opp både. shp-filen og. dbf-filen til samme mappe på en rapportserver, og deretter koble til. shp-filen som den romlige datakilden. For mer informasjon om emnet, se følgende artikkel, Maps (Report Builder 3.0 og SSRS): msdn. microsoften-uslibraryee240845 (SQL.105).aspx Hvis du har spørsmål, er du velkommen til å gi meg beskjed. Merket som svar av Eileen Zhao 17. juli 2011 kl. 16:38 Mandag 11. juli 2011 7:20 Jeg har opplevd denne feilen selv når lokale data er innebygd i rapporten. Den potensielle årsaken som er oppgitt, kan ikke være den eneste. Søndag 8. januar 2012 kl 18:18 Noen store SHP-filer har forårsaket denne feilen når kartkontrollen er justert for å ta opp mindre plass. Merkelig kan problemet gå bort hvis en litt annen grad av plassbesparelse er valgt. Det ser ut til at algoritmen som brukes til å komprimere kartdataene, kan gi ugyldige binære data på enkelte innstillinger, men gir riktige data med litt forskjellige innstillinger. Foreslått som svar av Stefan Granath Søndag 06. desember 2015 kl. 04:19 Torsdag 12. januar 2012 15:47 Microsoft gjennomfører en online-undersøkelse for å forstå din mening på Msdn-nettsiden. Hvis du velger å delta, vil onlineundersøkelsen bli presentert for deg når du forlater nettstedet Msdn. Ønsker du å delta 2017 Microsoft. Alle rettigheter reservert.
Comments
Post a Comment