Min Ledamot - teknisk information, del 2
Här kommer del 2 av min tekniska genomgång av tjänsten Min Ledamot, i en tidigare postning gick jag igenom hur jag har använt Riksdagens syndikeringstjänst och den information som jag fått därigenom. Här tänkte jag gå vidare med det här och skriva lite mer om det som jag inte fått från Riksdagen utan som jag behövt hämta från andra platser. I mitt arbete med Min Ledamot inspirerades jag av brittiska My Society som driver flera informationstjänster där invånare utifrån sitt postnummer kan hitta information om deras parlamentariker eller komma i kontakt med desamma.
För att kunna relatera till det här så krävs lite kunskap om hur val går till i Storbritannien. Utan att gå in på allt för stora detaljer kan sägas att Storbritannien är indelat i många fler valkretsar än vad vi har här i Sverige. Närmare bestämt har man lika många valkretsar som man har stolar i parlamentet. Varje valkrets utser nämligen sin parlamentariker. Det här gör det svårt för nya partier att komma in i parlamentet eftersom man måste få majoritet i en valkrets för att få en plats, men det är kanske ett ämne för en annan postning. För att relatera till ämnet så är postnummer därmed ganska relevant i Storbritannien: genom att mata in sitt postnummer kan en invånare få reda på exakt vilken person som är vald att representera dem i parlamentet.
I Sverige har vi större valkretsar, inte mer än 29 av dem, och de största valkretsarna (i antalet mandat räknat) har nästan 20 mandat. Jag tycker dock det är rimligt att även i Sverige fundera kring valkretsar på det sättet man gör i Storbritannien mer. Speciellt med tanke på att vi nu har vissa möjligheten till personval, eller i alla fall att kryssa in någon över andra. Så det känns relevant för mig att veta vilka som i just min valkrets har valts att representera mig i Riksdagen, och jag ville se ett sätt i Min Ledamot att kunna knyta postnummer som en person matar in med en valkrets.
Den här informationen finns säkert någonstans, men jag lyckades inte hitta den. Det var till och med svårt att hitta en lista med postnummer! Men till slut hittade jag befolkningsstatistik från SCB där man anger befolkning per postnummer, och som ett resultat av det så kunde jag plocka ut en lista över samtliga Sveriges postnummer - i alla fall postnummer där det normalt bor människor: jag har missat postnummer i stil med 41296 som inte hör till ett geografiskt område utan är knutet till ett företag eller organisation (i det här fallet Chalmers Tekniska högskola).
Men hur går man från ett postnummer till en valkrets? Tittar man på Valmyndigheten så finns en hel del information om valkretsarna historiskt och deras storlek i antal väljare sett, men inte så mycket om dess geografiska spridning. Från Valmyndighetens statistiksida för valet 2010 hittade jag dock länken till Rådata. Som tekniker tycker jag om sådana benämningar eftersom det tenderar att handla om saker som går att tolka och behandla datoriserat.
I hörnan på den rådatasidan ifnns en länk till GIS-filer (GIS står för Geografiskt informationssystem) som ger så kallade ShapeFiler för valkretsarna. En ShapeFil är ett standardiserat format för GIS och det finns en del verktyg för att tolka dem. Själv använde jag perl-modelen Geo::ShapeFile. Informationen som man får ut från dessa filer kan se ut såhär:
Shape Type: Polygon (id: 1) Parts: 1 Points: 1663
X bounds(min=656773.409178442, max=682485.604669744)
Y bounds(min=6569471.80972002, max=6592667.13253502)
Part 1:
Point(X=664707.86574013,Y=6592378.49283502)
Point(X=664822.052040123,Y=6592357.81523502)
Point(X=664833.681840121,Y=6592372.94843502)
Point(X=664872.984240119,Y=6592424.09063502)
Point(X=664883.340640117,Y=6592420.32573502)
....
Det här talar om att första delen i ShapeFilen är en polygon med 1663 geografiska punkter, som sedan listas en efter en. Knutet till detta är ett databasrecord som talar om att det här är den polygon som representerar valkrets 1, Stockholms Kommun. Koordinaterna får man reda på, om man tittar i projektionsfilen som hör till ShapeFilen, är i formatet SWEREF99 TM. Mer information om SWEREF99 TM finns på Lantmäteriet, Wikipedia och många andra platser för de som är intresserade. Kort sagt kan man säga att SWEREF99 TM är ett av de koordinatsystem som används i Sverige för att ange geografiska koordinater på Svenskt territorium.
De flesta numera är mer vana vid WGS 84, som anger koordinater i grader, minuter och sekunder, och det är också detta som oftast används i GPSer, och också det som används av exempelvis Google Maps och Google Earth. Men nu hade jag då två delar som endast behövde sammanfogas: den geografiska utbredningen av varje valkrets samt en lista med postnummer.
Här tog jag hjälp av Google Maps API, där jag bad Google Maps om att lägesbestämma varje postnummer för mig. Jag frågade exempelvis Google Maps om "42252, Sweden" för att få reda på den geografiska positionen för postnummer 42252, vilken jag fick tillbaka i WGS 84-format. Detta gjorde jag under ett par dagar: Google Maps API blir inte glad om man gör fler än runt 2500 frågor mer dygn, och vi har runt 9160 postnummer i Sverige som jag behövde beta av. Efter ett tag hade jag dock en mer komplett lista (dessvärre sparade jag inte WGS 84-formatet, vilket jag insett senare att det hade varit intressant att spara på).
Istället konverterade jag WGS 84-formatet direkt till SWEREF99 TM genom att använda programmet Proj och följande parametrar, vilket är den magiska sekvensen just för att konvertera WGS 84 till SWEREF 99 TM:
+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs
För varje koordinat som jag fick fram på det här sättet gick jag igenom samtliga polygoner som definerats i Valmyndighetens ShapeFil (29 stycken, en för varje valkrets) och testade om koordinaterna som jag fått fram rymdes inom den polygonen. Med den konverteringen i bagaget hade jag således gått hela vägen från postnummer till valkrets. Och det.. ja, det var faktiskt "allt" som jag behövde göra för att få Min Ledamot att fungera som jag tänkt.









