Användare:Lsjbot/AlgoritmerLsjbot använder i skapandet av geografiartiklar ett antal olika algoritmer för att räkna ut olika aspekter av hur landskapet ser ut på den plats den skriver om. På den här sidan beskrivs dessa algoritmer i mer detalj än vad som är rimligt att göra i varje artikel. Frågor och synpunkter kring algoritmerna är hjärtligt välkomna på projektsidan: Användardiskussion:Lsjbot/Projekt alla platser. Boten kombinerar data från två olika källor i sina beräkningar, dels platsdata från GeoNames, och dels höjddata från Viewfinder Panoramas. Beräkningarna faller under det undantag som finns i WP:Ingen originalforskning#Undantag: "icke-kontroversiella artiklar där icke-kontroversiella beräkningar, sammanfattningar och sammanställningar görs som logisk följd av redovisat källmaterial". Man kan också se det så här: En människa som skriver en geografiartikel kan mycket väl skriva in i artikeln sådant som en människa kan se vid en snabb blick på en karta, utan att bli anklagad för egen forskning, t.ex. "Kungshamn är beläget på en halvö på västkusten strax norr om Lysekil." (ur artikeln Kungshamn). Det boten gör är i grund och botten samma sak, fast "en snabb blick på en karta" sker med andra metoder. Botkoden i sin helhet finns här: Wikipedia:Projekt DotNetWikiBot Framework/Lsjbot/Make-Geonames. I de olika avsnitten nedan hänvisas till "nyckelmetoder"; detta syftar på den metod i botkoden där kärnan i algoritmen beräknas. Avstånd mellan platserBygger på latitud och longitud för de båda platserna. För avstånd under 1000 km räknas avståndet ut med plangeometri; för större avstånd beräknas storcirkelavstånd. Nyckelmetod: Riktning från en plats till en annanAvstånden i rent nord-sydlig riktning (dlat) och rent öst-västlig riktning (dlong) räknas ut var för sig. Om abs(dlat) är minst 4 ggr större än abs(dlon) kallas riktningen nordlig eller sydlig, beroende på tecken. Motsvarande för öst/väst (dlong > 4*dlat). Övriga värden ger riktning nordost/sydost/sydväst/nordväst beroende på vilka tecken dlat och dlong har. Nyckelmetod: Avstånd och riktning till huvudstadenAvstånd beräknas enligt #Avstånd mellan platser, och riktning enligt #Riktning från en plats till en annan. Om avståndet i km är mindre än 1.5 + 0.004*huvudstadsbefolkning betraktas platsen som liggande inom huvudstaden. Nyckelmetod: Allmänt om höjddata från Viewfinder PanoramasHöjddata finns för i princip all fast mark på jorden. Upplösningen horisontellt är 3", vilket är ungefär 90 meter vid ekvatorn. Den höjd som anges kan ses som ett medelvärde inom en sådan 90-meters pixel. Det betyder att höjden för t.ex. en vass bergstopp inte blir höjden för den absolut högsta punkten, utan blir snitthöjden inom den pixel som innefattar bergstoppens koordinater. Den länk som anges i varje artikel går till sajtens huvudsida. Därifrån kan man klicka på länken 3" upptill i mitten. Den leder till en karta, och i kartan klickar man på den plats vars höjddata man vill ha. Det man då får är en zip-fil med ett antal filer i hgt-format som innehåller själva data. Filformatet finns beskrivet långt ner på huvudsidan. Nyckelmetod för att packa upp hgt-filer: När boten använder kartdata, så laddar den in ett "kartblad" på 3x3 grader (ca 300x300 km vid ekvatorn, smalare på högre breddgrader) kring den aktuella platsen. Alla beräkningar utförs inom det kartbladet, och leder beräkningen utanför kartan så avbryts den. Det betyder att landformer större än 300x300 km inte kan identifieras. Detta är dock sällan ett problem, det betyder att den hanterar t.ex. sjöar upp till ungefär Vänerns storlek, och större sjöar än så har vi normalt redan artiklar om. Nyckelmetod: Att identifiera öar, sjöar, och bergskedjorI princip samma algoritm används för dessa tre. Höjddata från Viewfinder Panoramas används. Boten börjar med en "såddpunkt" i den pixel som innehåller platsens koordinater. Sedan söker den intilliggande pixlar som uppfyller ett visst villkor, och fortsätter rekursivt tills den inte hittar fler (eller når kartans kant). Resultatet är en markering på kartan som i princip täcker öns eller sjöns form. För öar är villkoret att höjden ska vara större än noll, för sjöar att höjden ska vara lika med såddpunktens höjd (som bör vara sjöns ytnivå). För bergskedjor är det mer komplicerat; boten utgår från en basnivå som sätts i relation både till bergskedjans höjd och till genomsnittshöjden inom kartan. Boten fyller sedan pixlar på samma sätt som för öar, men med villkoret att höjden i en pixel är högre än basnivån. Om det resulterar i en "ö" som håller sig inom kartan och inte innehåller någon annan bergskedja, så är boten nöjd. Annars höjs basnivån och proceduren upprepas. Detta fortsätter tills proceduren lyckas eller basnivån blir högre än bergskedjans höjd. Därefter är det rättframt att leta igenom GeoNames efter platser inom det markerade området. Den platslistan används sedan för att skriva saker som "X ligger på ön Y" i artiklarna. För sjöar letar boten också efter platser som ligger strax utanför det markerade området, för att skriva att "X ligger vid sjön Y". Att leta sjöar, öar och bergskedjor på det här sättet tar mycket datortid. Därför görs det i separata körningar i förväg, och boten sparar datafiler med data för alla öar/sjöar/bergskedjor som sedan används i artikelskapandet. Algoritmen fungerar överlag bra för öar och sjöar. Den har dock några svagheter:
För bergskedjor fungerar algoritmen för bergsmassiv som är någorlunda fristående och inte alltför stora. För en delkedja i en större bergskedja fungerar metoden dåligt, och ger oftast inget resultat alls. Nyckelmetoder: Ett bergs primärfaktorPrimärfaktorn för ett berg beräknas med en algoritm där boten utgår från en "såddpunkt" vid bergets koordinater, och markerar den pixel som innehåller såddpunkten. Boten söker sedan igenom alla grannar till den markerade pixeln, och markerar den högsta av dem. Sedan fortsätter den så, markerar den högsta grannen till de dittills markerade pixlarna, tills den stöter på en pixel som är högre än startpunkten. Den lägsta pixel som passerats på vägen är en hyfsad approximation av höjden på den lägsta höjdkurva inom vilken toppen är den högsta, varifrån primärfaktorn beräknas. Nyckelmetod: Ett bergs bredd vid basenEfter att primärfaktorberäkningen (se ovan) har identifierat den lägsta höjdkurva inom vilken toppen är den högsta, mäter boten det längsta avståndet mellan två punkter på den höjdkurvan, och kallar detta för bergets bredd vid basen. Nyckelmetod: Terrängen i ett områdeHöjddata från Viewfinder Panoramas används. Boten går igenom alla pixlar inom området, och beräknar dels höjdernas medelvärde, och dels deras varians (och därmed standardavvikelse). Därefter klassificeras terrängen i första hand utifrån variansen. Om variansen är mycket liten kallas området "mycket platt", etc.
Höjdernas medelvärde används för att identifiera högplatåer (platt terräng på hög höjd). Hav ignoreras i beräkningen. Nyckelmetoder: Terrängen runt en platsBoten beaktar terrängen inom en cirkel med 10 km radie kring platsens koordinater. Den cirkeln delas in i nio delar: en central del inom 2.5 km radie, och åtta "tårtbitar" i den yttre delen. Terrängen i varje del klassificeras enligt #Terrängen i ett område ovan. Om alla nio delarna har samma huvudklassning (platt/kuperad/bergig) får terrängen runt platsen denna klassning. Om det är stor variation i klassningen, eller krånglig fördelning av terrängtyper, kallas terrängen "varierad". Om nästan alla delarna har samma terrängtyp skrivs i artikeln t.ex. "Terrängen runt X är i huvudsak platt, men åt norr är den kuperad." Om det är den centrala delen som är avvikande blir det istället: "...men den allra närmaste omgivningen är kuperad." Om det istället är två terrängtyper som väger jämnt skrivs: "Terrängen runt X är platt åt söder, men åt norr är den kuperad." (den terrängtyp som har flest tårtbitar nämns först). Nyckelmetoder: Terrängen på en öDet område som ön upptar räknas fram enligt #Att identifiera öar, sjöar, och bergskedjor. Därefter beräknas terrängen i det området enligt #Terrängen i ett område. Terrängen i en administrativ enhetBeräknas på samma sätt som terrängen runt en plats, men med skillnaden att radien inte är 10 km, utan istället radien på den cirkel som har samma area som den administrativa enheten. För administrativa enheter med någorlunda samlad form (Örebro län) är detta en god approximation, men den kan bli missvisande för enheter som är mycket avlånga eller oregelbundna (Hallands län, Västernorrlands län) och har avvikande terräng utanför gränsen. Hitta den bergstopp som en plats hänger ihop medHöjddata från Viewfinder Panoramas används. Boten börjar med en "såddpunkt" i den pixel som innehåller platsens koordinater. Sedan söker den igenom alla grannar till den markerade pixeln, och markerar den högsta av dem. Sedan fortsätter den så, markerar den högsta grannen till de dittills markerade pixlarna, tills den antingen stöter på en pixel som innehåller en namngiven bergstopp, eller högsta grannpixeln är mer än 10 meter lägre än startpunkten. Den här beräkningen används på två sätt:
Nyckelmetoder: Justera koordinaterDet är vanligt att avrundningsfel i koordinaterna för ett berg gör att positionen hamnar en bit ifrån högsta punkten. Avrundningen är ofta till hela bågminuter. Boten åtgärdar detta genom att leta efter den topografiskt högsta punkten på ett berg med samma grundalgoritm som i #Hitta den bergstopp som en plats hänger ihop med, söker sig uppåt i terrängen tills den hittar en topp. Om toppen inte är en annan namngiven bergstopp, och ligger högst en nautisk mil från koordinatpunkten utan mellanliggande svackor, flyttas koordinaterna dit. Lsj (diskussion) 17 november 2015 kl. 08.43 (CET) Närmaste större samhälleVad som är "närmaste större samhälle" operationaliseras så här:
|