Visualisera postnummer på karta med Google maps

Gjorde ett snabbt jobb idag och tänkte kort skriva om det här. Uppdraget var att visualisera förekomsten av postnummer i en tabell, baserat på antalet gånger varje postnummer förekommer – d.v.s. en sorts “heat map” över postnummer presenterat på en karta.

Vad är väl mer lämpligt än google maps för ett sådant jobb?

Men först problemet med hur man bestämmer latitud och longitud för alla postnummer i hela Sverige (över 14000 st). Det visade sig vara inte helt trivialt, då Googles geocoding API inte kände igen merparten av alla postnummer, utan returnerade helt tokiga koordinater.

Vad gör man då? Söker på nätet så klart. Det visade sig dock snart att information kan kosta pengar. Geopostcodes.com vill ha 30 euro för en fil med alla postnummer geokodade, medan postnummerservice vill har 3500kr för samma sak! Jo tack.

Med begränsad budget så gör man det näst bästa: skapar en egen tabell. Eftersom google inte klarar postnummer så fick det bli lite grovmaskigare. Jag körde en geokodnings batch för alla orter i Sverige, kopplade dem till respektive postnummer och hängde på koordinaterna.

Resultatet kan du ladda ner gratis här: All postnummer i Sverige med latitud och longitud.

Formatet är *.txt och innehållet är formaterat som en serialized array.

Med detta ur vägen så var resten trivialt: upp med en google karta och hämta aktuella postnummer från databas, plotta cirklar med radie som beror av antalet förekomster. Koordinaterna hämtas från ovan nämnda fil, främst eftersom det inte är så lämpligt att hammra på Googles geokodnings tjänst för varje fråga, då detta kan leda till blockering, och dessutom blir det långsamt.

Resultatet ser ut så här, med några exempelpostnummer:

postnr

Har du några behov eller problem rörande visualisering och / eller karttjänster? Jag är ibland tillgänglig för uppdrag. Kontakta mig så lämnar jag offert.

UPPDATERING: nu finns lite mer avancerade funktioner tillgängliga på geosok.se, bland annat ett verktyg för att få fram vilka postnummer som finns inom ett visst avstånd från en punkt.

UPPDATERING 2: nu finns inom kort ett verktyg för dig som själv vill skapa kartor som den ovan från dina postnummer tillgängligt här.

You can leave a response, or trackback from your own site.

12 Responses to “Visualisera postnummer på karta med Google maps”

  1. Mårten says:

    Härligt, har inte kollat på filen ännu men hoppas kunna få ut postnummer och ort ur den.
    Har inte lust att betala 1800kr för en lilsta på postnummer och orter.

    Tack igen!

  2. daniel says:

    Tackar för detta!

    En liten fråga dock, vad använder du för att skapa cirklarna? Har kollat runt på Google Maps API för visualization, men hittar inte riktigt nånting som ser ut sådär övht.

    Har sett markers, men vill ju göra de olika stora beroende på hur många kunder som är därifrån, så att säga.

  3. Jesper says:

    Hej Daniel

    Cirklarna ritas mha polylines och är egentligen en antal raka streck som arrangeras så att de ser ut som en cirkel. Kika i källkoden här så kan du nog lista ut det hela.

  4. Graham says:

    Hej,

    Is there any way to convert that array to a CSV? I am not a programmer and thus am having trouble :(

    Graham

  5. Jesper says:

    The easiest way to do that is in PHP, using UNSERIALIZE, to get a multidimensional array and then loop through all items and then using IMPLODE to make a comma separated string from each item array.

    If you are not a programmer it will be a bit of work, and you need access to a php-parser.

  6. Graham says:

    OK I will expand my skills a bit ;) Thanks Jesper

  7. Jocke says:

    Snyggt jobbat! Skulle du kunna förklara exakt vad som är vad i arrayen?

    Jag misstänker att detta är ett entry?

    i:14231;a:4:{s:4:”city”;s:6:”Skogås”;s:3:”lat”;s:10:”59.2196602″;s:3:”lon”;s:10:”18.1504425″;s:8:”accuracy”;s:1:”4″;}

    Mvh Joakim

  8. Jesper says:

    Hej Jocke

    I arrayen finns

    postnummer | ort | latitud | longitud | noggranhet

    där de 4 första är självförklarande, och “noggranhet” avser Googles accuracy som returneras när man gör en geoencodning, säger med hur stor precision som latitud och longitud bestämts, ju högre tal desto bättre precision.

    /jesper

  9. Väldigt bra grej!

    Synd bara att inte länken till källkoden fungerade längre. :)

  10. Hemsida says:

    Grym
    Tack för inlägget

  11. Eric says:

    For your information: It did not work You can not unserialize it. Prob. bad string. I like the attempt and I hope for a unserialize text file, pleace.

  12. Anders says:

    Jag vill ju inte tjata ;-) , men det där “Uppdatering 2″ som hintas ovan vore guld värd!

Leave a Reply