Archive for the ‘MySQL’ category

Komplett databasesett over Norges postnummer (med koordinater)

mars 12th, 2010

Her kommer det er oversikt over absolutt alle postnummer i Norge med tilhørende fylke, kommune og poststed. Hvert postnummer har også en lengde- og breddegrad tilknyttet seg. På denne måten kan du koble opp postnummeret til f.eks Google Maps.

Det er i alt fire tabeller i databasesettet:

  • Comments
  • County
  • Municipal
  • Zip
    • _codes
    • _places

Første tabell inneholder bare seks rader, som forklarer om postnummeret er av typene:

  • Firma med eige postnummer
  • Fleire bruksområde
  • Gateadresser
  • Gateadresser og postboksar
  • Postboksar
  • Serviceboksar

Databasesettet er generert med hjelp av Postnummer-dugnaden Yr.no arrangerte sommeren 2009.

Ved hjelp av lengde- og breddegradene kan du jo også regne deg frem til avstanden mellom to steder, eller finne nærmeste postkontor til en bruker.

For å få lett oversikt over alle postkoder, kjører du følgende spørring:

SELECT
z.zip, c.name as fylke, m.name as kommune, p.name as poststed, cc.comment, z.lat, z.lon
FROM `zip_codes` z
INNER JOIN zip_places p
ON p.place_id = z.place_id
INNER JOIN municipal m
ON m.id = p.municipal_id
INNER JOIN county c
ON c.county_id = m.county_id
INNER JOIN comments cc
ON cc.comment_id = z.comment_id
ORDER BY
z.zip ASC, fylke ASC, kommune ASC, poststed ASC

Med enhver sak kan det forekomme feil, så om dere kommer over noe som skulle vise seg til å være en bug: si i fra.

Liste over alle postnummer:
http://trunk.davidsteinsland.net/zip_codes.htm

Oppdateringer

  • Ser ut til at Jan Mayen og Svalbard har klart å falle ut. Dette er pga. øyene ikke tilhører noe fylke. Skal ordnes.
  • Fikset nå. Poststeder på øyene er plassert i et eget dummy-fylke kalt “Svalbard og Jan Mayen”
  • Fylkene har nå fått korrekt fylkesnummer basert på ISO 3166-2:NO. Fikset opp i kommuner på Jan Mayen og Svalbard

Laste ned

Norske postnummer.zip, lisensiert under Creative Commons.

Tips & triks

Hvordan finne et originalpunkt basert på gitt bredde- og lengdegrad?

Basert på sfærisk trigonometri kan vi “enkelt” regne oss frem til dette. Først av alt må vi gjøre punktene våres om til radianer (fra grader) for at funksjonen skal gjelde. Vi benytter oss også av jordradien i meter.

Distansen mellom punktene er gitt ved s:

s = \cos^{-1}\big( \sin \phi \cdot \sin \phi_0 + \cos \phi \cdot \cos \phi_0 \cdot \cos \Delta \lambda \big) \cdot R_\oplus

Breddegradene (\phi) og lengdegradene (\lambda) må først gjøres om til radianer. Dette gjør du med følgende formel:

{rad} = \frac{180^\circ}{\pi} \cdot {deg}

Dette er igrunn irrelevant, for dette har jeg allerede tatt høyde for i kodene.

For å løse det i MySQL, kan man gjøre det slik:

 SET @MY_LAT = 59.7022480, @MY_LON = 5.3764340;

SELECT z.zip, p.name, z.lat, z.lon, acos(SIN( RADIANS(@MY_LAT)) * SIN( RADIANS(z.lat))
+(cos(RADIANS(@MY_LAT)) * COS( RADIANS(z.lat)) * COS(RADIANS(z.lon) - RADIANS(@MY_LON))
)) * 6378137 AS distance
FROM zip_codes z
INNER JOIN zip_places p
ON z.place_id = p.place_id
HAVING distance <= 2000
ORDER BY distance ASC

Her har jeg satt variablene utenfor selve spørringen slik at det blir litt lettere å få det med seg.

I PHP kan man gjøre det slik:

$lat_1 = deg2rad (59.7022480);
$lat_2 = deg2rad (59.7022480);

$lon_1 = deg2rad (5.3764340);
$lon_2 = deg2rad (5.3764340);

$R = 6378137; // meters

$distance = acos ( sin($lat_1) * sin($lat_2) + cos ($lat_1) * cos($lat_2) * cos ($lon_2 - $lon_1)) * $R;
echo 'Distance: ' . (int)$distance/1000 . ' km'; 

Hva betyr dette? Hva kan man nytte det til?
Dersom du bruker en pakkeløsning hvor du kan dra frem koordinatene til en bruker basert på hans IP, kan du finne ut en circa-plassering på hvor han er i Norge. Formelen har en feilkilde på rundt 1 meter.

Bruke jQuerys Ajax-funksjonalitet til å hente ut data om postnummer

1. Opprett en fil kalt “get_postal.php” med følgende kode:
http://norskwebforum.no/pastebin/11243

2. Opprett så index.html med følgende kode:
http://norskwebforum.no/pastebin/11244

3. Opprett en mappen “cache”

Test ved å skrive inn et postnummer (fire siffer langt) eller et poststed. Informasjon om postnummeret/-stedet vil etterhvert poppe opp i avsnittet under skjemaet.

Liten oppdatering til Fileshed

august 12th, 2009

I dag fikk jeg ideen å oppdatere filopplastningssystemet mitt litt. Tanken var følgende: la brukere legge passord på filene sine. Fra før kan brukerne velge mellom “offentlig” eller “privat” status på filene. Dersom filen er privat er det kun han som kan laste ned den, er den offentlig kan alle. Problemet var at det ikke fantes noe mellomledd: det kom i dag.

Nå kan brukere lett legge passord på filen sin (også et hint, om nødvendig), og passe på at uvedkommende ikke laster ned filen (selv om den er markert offentlig). Når en bruker klikker på filen for å laste ned den, kommer det opp en side som spør etter passord.

Dersom dere har flere tips til hva som kan være nyttig, er det bare å si i fra. Jeg personlig har tenkt litt over en E-posttjeneste, hvor brukeren får i valg å sende en E-post med markert fil som vedlegg. Hadde dette vært noe?

Fileshed-oppdateringFiler med nøkkel etter filnavnet er passordbeskyttede filer. Dersom de har rød bakgrunn er de markert privat. For å bytte status er det bare til å klikke på det røde utropsikonet / grønne v-ikonet. For masseendringer finnes det avkryssningsbokser.

Edit 13/08-09: Nå er det også blitt lagt til en passord-glemmer.
Edit 14/08-09: Har laget en logg for nedlastninger, slik brukeren kan følge med på hvem som laster ned fra han (hvilken fil, og dato).
Edit 16/08-09: Nå er også E-postvideresenderen på plass, som gjør du kan sende filer via E-post.

Nytt utseende til Fileshed — trenger feedback

juni 28th, 2009

Fileshed, filopplastningssiden jeg har laget, fikk en etterlengtet ansiktsløftning i disse nattetider, hvor jeg skiftet ut det dystre og kjedelige designet med noe nytt.

For å fortelle litt om tjenesten, er det en side hvor du kan laste opp filer slik du kan for eksempel sende dem mellom multiple PC-er. Du kan også organisere filene i mapper, gjøre dem offentlige (andre kan se dem, og laste de ned) eller private. Det er også mulighet for å laste ned mange filer på én gang (vil bli arkivert i et Zip-arkiv).

Tjenesten ligger også ute for salg, om det er noen som har lyst å bruke det kommersielt/privat.

Her følger to før-bilder; hvordan siden såg ut for ti minutt siden:Fileshed, fremsidenFileshed, oversikt over filer

Her er den nye siden, fra samme sider som bildene over:

Fileshed (ny), fremsidenFileshed (ny), oversikt over filerBle det bedre, eller hva synes du? Skjekk selv på: http://fileshed.davidsteinsland.net/