[Nordic] Tiny WKB

Nicklas Avén nicklas.aven at jordogskog.no
Sun Apr 7 15:31:41 PDT 2013


Hej

När ändå listan har vaknat lite så är det väl lika bra att fortsätta :-)

Jag har hållit på en del den senaste tiden med ett exportformat från
PostGIS som jag har stor tro på.

Det är ett komprimerat binärt format.

Jag skall inte ta hela förklaringen här och nu, det kommer en blog-post
med tiden.

funktionen har jag än så länge kallat ST_ASTWKB 
Men kort förklarat så är det ett binärformat som har liknande features
som en del text-baserade format. Den lagrar relativa koordinater, dvs
den första koordnaten är komplett men sedan är det bara sträckan i x och
y-led fram till nästa koordinat som lagras. På det sättet kan de flesta
koordinaterna lagras på betydligt mindre utrymme.

En annan sak är att i geometrien så finns det också plats att lagra ett
id. 

Det är fortfarande en hel del optimaliseringar att göra, och jag har en
hel del idéer på hur man kan gå vidare, tex genom att göra en
aggregerande variant på ST_ASTWKB. Då geometrien har plats för sin egen
id så kan man nästla många geometrier i en geometry collection med
bibehållna id på varje geometrie. Om man då gör aggregeringen utifrån en
grid så har man skapat vektor-tiles i binärformat.

Man kan också tänka sig att utvidga formatet till att hantera
topologier.

Jag har tro på att det kan bli bra, men har inte lagt stort jobb på att
sälja in det till resten av PostGIS-gänget än.

Här finns en demo som fungerar (åtminståne för mig) Det verkar vara lite
problem med färgsättningen av arealdekke i en del browsrar.
http://178.79.156.122/twkb

I botten av sidan kan ni klicka igång två lager, Norges kommuner och ett
lager som heter N2000 som norska kartverket har släppt fritt (jag hoppas
detta är tillåten använding).

I kommun-lagret är det 435 polygoner med ca 130000 vertex-punkter om jag
minns rätt. I arealdekke är det drygt 3500 polygoner och ca 180000
vertexpunkter.
lagren är på ca 160 respektive 600 kb när de sänds över nätet. Då är de
gzippade i php också.

Demon är inte särskilt snabb. Flaskhalsarna är både i att jag både
dumpar geometrierna till singel polygoner, transformerar dem till srid
4326 och bygger twkb on the fly. Det som tar tid är dumpingen och
transformeringen. Båda är onödiga att göra on the fly.

Nästa flaskhals är att jag är för dålig på leaflet och javascript. Efter
att geometrierna är parsade från binärformat så lagras de i ganska
komplexa object som verkar vara väldigt slöa. Dessutom verkar det ta tid
att skapa upp polygonerna i Leaflet.

Så om det finns någon som tror på id±en och vill hjälpa till för att få
in den i PostGIS core, så ta gärna en titt och hjälp mig optimalisera
client-sidan.

koden till ST_ASTWKB ligger i 
http://svn.osgeo.org/postgis/spike/nicklas/twkb

Den är bara att kompilera och köra.

Själva funktionen finns i 
http://svn.osgeo.org/postgis/spike/nicklas/twkb/liblwgeom/lwout_twkb.c

Så kom gärna med inspel om det är något ni tror på eller inte.

För att se hur själva parsingen från binärt går hos klienten så är det
lättast att kolla i twkb.js i demon ovanför.

Det finns helt säkert buggar där :-)


Hälsningar

Nicklas Avén



More information about the Nordic mailing list