Gebruiker:Michiel1972/Navigatie nabijgelegen locaties
Uiterlijk
Voor een locatie (plaats) A met bekende geografische coördinaten kan een cirkel worden getoond met een zekere straal r rond middelpunt A waarin maximaal k (circa 24) andere wikilinks naar nabijgelegen artikelen met coördinaten worden geplaatst in de juiste verhoudingen.
Aanpak
[bewerken | brontekst bewerken]- Lijst met artikelen met coördinaten
- Start met straal van r km (8 km gebruikt voor Amerikaanse plaatseen)
- Herhaal voor elk artikel
latitude:= strtoint(latdeg) + (strtoint(latmin)/60) + (strtoint(latsec)/3600); longitude:= -1*(strtoint(londeg) + (strtoint(lonmin)/60) + (strtoint(lonsec)/3600)); graadlat:= 1852*60; //afst per graad in m latdist:= 8000/graadlat; //zoekafst k uitgedrukt in graden Z en N radlatitude:=latitude/57.29578; radlongitude:=longitude/57.29578; graadlon:=abs((3.1415/180)*cos(radlatitude)*6378000); londist:=8000/graadlon; N1:=latitude+(zoekfactor*latdist); //Grenzen vierkant Z1:=latitude-(zoekfactor*latdist); E1:=longitude+(zoekfactor*londist); W1:=longitude-(zoekfactor*londist);
- Zoek nu de k plaatsen die binnen het vierkant valt; ga de gehele lijst af
latitude2:= strtoint(latdeg2) + (strtoint(latmin2)/60) + (strtoint(latsec2)/3600); longitude2:= -1*(strtoint(londeg2) + (strtoint(lonmin2)/60) + (strtoint(lonsec2)/3600)); radlatitude2:=latitude2/57.29578; radlongitude2:=longitude2/57.29578; if (latitude2>Z1) and (latitude2<N1) and (longitude2<E1) and (longitude2>W1) and (strtitel<>strtitel2) //niet hetzelfde artikel opnemen then begin afstand:=round((arccos(cos(radlatitude)*cos(radlongitude)*cos(radlatitude2)*cos(radlongitude2) + cos(radlatitude)*sin(radlongitude)*cos(radlatitude2)*sin(radlongitude2) + sin(radlatitude)*sin(radlatitude2)) * 6378000)/1000); if afstand <= 8*zoekfactor then //valt in circelvorm van 8km x factor begin found:=true; inc(foundnr); //bewaar gevonden plaats .. =... if foundnr=24 then begin //stop maar, max bereikt break; //einde van loop end; end;
- Indien gevonden plaatsen in opgegeven schaal, bereken x en y op scherm.
- Foundnrgrens is minimaal aantal plaatsen dat is gevonden en op scherm kan worden getoond (circa 5 als minimum.)
if (found=true) and (foundnr>foundnrgrens) then begin for teller:=1 to foundnr do //voor alle gevonden plaatsen berekenx en y begin xplaats[teller]:=0.05 -0.9*((longitude-(zoekfactor*londist)-lonplaats[teller]) /(zoekfactor*londist*2)); yplaats[teller]:=0.05 +0.9*((latitude+(zoekfactor*latdist)-latplaats[teller]) /(zoekfactor*latdist*2)); end;
- Indien niets gevonden, of te weinig plaatsen, vergroot straal r met een factor.
foundnr:=0; inc(zoekfactor); //dubbele afstand. Doe net zo vaak tot je wel wat vind if zoekfactor=20 then //20x8km=160km, maximale range begin //stop maar , forget this one inc(loopi); //next line in mainloop zoekfactor:=1; end;
Symbolen
[bewerken | brontekst bewerken]Stel dat ik dit voor locaties in Amsterdam ga doen. En als kernwoorden de categorienaam gebruik ( bouwwerk, metro, brug, tunnel, weg, straat, gracht). Zie [1]
type | symbool | opm |
---|---|---|
plaats<20.000 | omvang afh van inwoners | |
plaats>20.000 | ||
landmark (object) | ||
opp. water |