mboost-dp1

Postnumre / tætteste match


Gå til bund
Gravatar #1 - Windcape
13. apr. 2011 21:31
Hvis jeg har en liste af danske postnumre, og jeg så gerne vil finde det nærmeste match, hvad er så den idealle tilgang til problemet?

F.eks. hvis jeg er i 8200 Aarhus N, men 8200 er ikke på min liste. Så vil jeg gerne finde det nærmeste område på min liste, som f.eks. 8240 Risskov.

Er der en matematisk tilgang, eller skal jeg selv skabe region-indexes for de forskellige områder?

Mere i detaljer handler det om at finde det nærmest målepunkt fra denne liste ud fra et postnummer fundet via. GPS positioner.

DMI ser selv ud til at bruge noget forsimplet funktionalitet:



function validatePostnum(form) {

var x = parseInt(form.by.value);

if (isNaN(x) || x < 1800) form.by.value = "1000";

else

if (x < 2000) form.by.value = "2000";

else

if (x > 2000 && x < 2500) form.by.value = "1000";

else

if (x > 5000 && x < 5280) form.by.value = "5000";

else

if (x > 6000 && x < 6020) form.by.value = "6000";

else

if (x > 6700 && x < 6720) form.by.value = "6700";

else

if (x > 7100 && x < 7130) form.by.value = "7100";

else

if (x > 8000 && x < 8220) form.by.value = "8000";

else

if (x > 8900 && x < 8950) form.by.value = "8900";

else

if (x == 8920 || x == 8930 || x == 8940 || x == 8960) form.by.value = "8900";

else

if (x > 9000 && x < 9230) form.by.value = "9000";

else

if (x > 9999) form.by.value = "1000";

}


Men hvis der en smartere metode, kunne det jo være meget interessant.
Gravatar #2 - Daniel-Dane
13. apr. 2011 21:49
Ja.
Gravatar #3 - Windcape
13. apr. 2011 21:54
#2

Singular answer to multiple-choice question :(
Gravatar #4 - Daniel-Dane
13. apr. 2011 21:56
Jeg kom lige i tanke om, at det skal være den nærmeste. #2'eren runder ned. Jeg vil i stedet bruge et loop, som finder ud af, hvornår x bliver mindre end liste[j], og så tager den liste[j], hvis den er tættere på x end liste[j+1] og vice versa.
Gravatar #5 - Windcape
13. apr. 2011 22:03
Jeg tror bare ikke at tallene i sig selv kan gøre det. Der lader ikke til at være noget mønster mellem nord/syd/øst/vest og postnumrene.

Så man bliver nok begrænset til DMIs måde at gøre det på, hvis man ikke selv laver et regionalt index :(

På den anden side, hvorfor fanden resolver den ikke Risskov når man er i Århus Nord, hmmm
Gravatar #6 - arne_v
14. apr. 2011 01:45
#1

nemmest->bedst:
1) if's
2) array lookup
3) beregning af afstand via længde og bredde grader
Gravatar #7 - mfriis
14. apr. 2011 07:04
Køb dig ind i DAV databasen (hvis den ikke er blevet gratis efterhånden). Der har du centroid koordinat på samtlige post distrikter. Så går du bare ud af fra et koordinat indtil du rammer det næste nærmeste postdistrikt som du kan godtage.

SQLServer har nogle fine funktioner til at lave spatiale og geometriske udregninger.

Du kan evt. købe geometrierne over postdistrikterne (WKT) og tjekke på hvornår en centroid udviddet til cirkel rammer linjerne på de andre distrikter hvis ikke det er nok med afstand (nogle postdistrikter har en ret underlig form som gør det en smule besværligt bare at regne med centroid afstande)
Gravatar #8 - myplacedk
14. apr. 2011 07:43
mfriis (7) skrev:
Køb dig ind i DAV databasen (hvis den ikke er blevet gratis efterhånden). Der har du centroid koordinat på samtlige post distrikter.

Du kan også få dem gratis fra Google. Den vigtigste betingelse er, at du ikke viser dem på et andet kort end Googles:

https://maps.googleapis.com/maps/api/geocode/json?...

results[0].geometry.location indeholder postdistriktets geografiske centrum.

Dokumentation: http://code.google.com/apis/maps/documentation/geo...
Gravatar #9 - Skak2000
21. apr. 2011 12:57
Hvis du blot skal have det post nr. der er tættest på.

Gennemløb liste af post nr. for at se om det er på listen.
Hvis ikke læg +1 til, gennemløb så igen. Forsæt til du finder et postnr på din liste. (Tæl hvor mange gang du har lagt +1 til)

Derefter gør det samme men med -1, tæl så igen hvor mange gang du har trukket -1 fra.
Sammenlign så antal gennemløb med +1 og -1. Hvor efter du ved hvilket postnr. der ligger tættest på.

:)
Gravatar #10 - markjensen
21. apr. 2011 13:00
#9 Lyder det ikke lidt langsomt?
Gravatar #11 - Skak2000
21. apr. 2011 13:17
Jo, den kan nok effektiviseres en smule. Eks. Sæt den til +10 mener post nr. Hopper med 10.
Gravatar #12 - Mamad (moveax1ret)
21. apr. 2011 13:19
lav det som et precalculated array for alle numre i rangen......de skal alligevel regnes ud mindst en gang for hvert hit.
Gravatar #13 - Windcape
21. apr. 2011 13:47
Skak2000 (9) skrev:
Hvis du blot skal have det post nr. der er tættest på.
Vi snakker geografisk tættest på!
Gravatar #14 - onetreehell
21. apr. 2011 22:03
Findes der ikke sådan noget offentligt xml http request halløj til den slags?
Gravatar #15 - Windcape
21. apr. 2011 22:12
#14

Det lader det ikke til. DMI benyttede en noget generaliseret løsning, som vist i #1.

Hvilket også blev den løsning jeg implementede. Men et mere grafisk korrekt index ville være en god ide til i fremtiden.

Gravatar #16 - onetreehell
22. apr. 2011 08:52
#15
Det offentlige har (havde) en hjemmeside hvor man kunne lave http-requests med xml i og få xml tilbage, hvor man f. eks. kunne få at vide hvad det nærmeste busstoppested er! Jeg kan desværre ikke husker hvad det hedder, men jeg kunne forestille mig at de nemt kunne klare postnumre, også.

tror muligvis det var dette: http://en.wikipedia.org/wiki/OIOXML
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login