mboost-dp1
Postnumre / tætteste match
- Forside
- ⟨
- Forum
- ⟨
- Tagwall
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:
Men hvis der en smartere metode, kunne det jo være meget interessant.
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.
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.
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
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
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)
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)
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...
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å.
:)
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å.
:)
lav det som et precalculated array for alle numre i rangen......de skal alligevel regnes ud mindst en gang for hvert hit.
#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
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
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.