MediaWiki-diskussion:Gadget-WikidataCoords.js

Senaste kommentaren: för 5 år sedan av Larske i ämnet Månkratrar och liknande

Några buggar

redigera

@Nirmos:

  • Funktionen decToDms fungerar inte på södra halvklotet. I och med att "Floor" avrundar nedåt och inte "mot 0". Se till exempel Camiri (kommun) som har koordinaterna 20°1′39″S,63°31′20″W, men finessen anger gradtalen till 20S respektive 64S istället för 19S respektive 63S.
Larske: Tack! Jag övervägde att mata in decimala koordinater och låta Modul:Coordinates göra konverteringen. Tyvärr bli då även utdatat med decimala koordinater, vilket jag tror många tycker är fult, eller åtminstone svårförståeligt. Din lösning är mycket bättre. Nu är väl även det andra felet löst? Jag ser inget konstigt längre. Sorry, gjorde ju på annat sätt i min JS. Jag ser felet oinloggad. Nirmos (diskussion) 3 mars 2019 kl. 11.50 (CET)Svara
Det finns inget sätt att tvinga Mall:Coord att spotta ut DMS-koordinater, oavsett vad som anges? Det skulle lösa många problem. Nirmos (diskussion) 3 mars 2019 kl. 11.59 (CET)Svara
Att JavaScript tolkar värdet 0, som ibland förekommer som minut eller sekund i koordinaterna, som "false" gjorde att finessen ibland spottade ur sig ett format i coord som hade olika antal av D,M och S för latitud och longitud, något som tolkas som ett ogiltigt format. Jag såg det i Bora-Bora men hjälp av spårningsutskriften. Nu är koden ändrat så att det alltid blir D, M och S och därmed hoppas jag att felmeddelandena om ogiltigt format ska ha försvunnit.
--Larske (diskussion) 3 mars 2019 kl. 12.15 (CET)Svara
Ja, jag gjorde så med flit för att inte skriva ut värdet om det var noll, men mallen gillade uppenbarligen inte det :D Tack så mycket! Nirmos (diskussion) 3 mars 2019 kl. 12.32 (CET)Svara
Man kan förfina det hela och låta värdet på "wikibase:geoPrecision" avgöra om man ska ange koordinaten med bara D, med D och M, eller med D, M och S, men det måste alltså vara samma "format" för latitud och longitud.
--Larske (diskussion) 3 mars 2019 kl. 12.50 (CET)Svara

Månkratrar och liknande

redigera

Tyvärr finns det över 7 000 objekt i Wikidata som har geografiska koordinater (P625) angivna trots att objektet inte finns på Jorden utan på någon annan himlakropp. Dessa geografiska koordinater (P625) borde egentligen tas bort i Wikidata, men risken är alltid att någon stoppar in dem igen. De objekt som definitivt är fel har ett värde på placering på astronomisk plats (P376) som inte är lika med jorden (Q2). Av dessa är det drygt 200 som har en artikel i svwp. De fick med denna finess en koordinat uppe till höger på sidan. Jag har gjort ett försök att undertrycka sådana koordinater. Det kan fortfarande dyka upp felaktiga koordinater för objekt där placering på astronomisk plats (P376) saknas, men förhoppningsvis är de inte så många. --Larske (diskussion) 3 mars 2019 kl. 16.26 (CET)Svara

Larske: Jag ser flera problem med de här ändringarna:
  1. valueobject är inte deklarerad.
  2. valueobject.numeric-id tolkas som valueobject[ 'numeric' ] - id, vilket troligtvis inte är vad du vill. Det här gör i sin tur att id inte är deklarerad. Du vill troligtvis ha valueobject[ 'numeric-id' ].
  3. Du återanvänder snakobj och datavalueobj, vilket inte nödvändigtvis är ett problem, men det är oväntat och gör att när koden kommer ned till den andra if-satsen (P376ok && Array.isArray( geoarr )), så har de här variablerna redan blivit tilldelade värden. Jag skulle helst se att helt olika variabler används.
  4. Det är inte uppenbart för mig att att koordinater på andra himlakroppar bör undertryckas. Modul:Coordinates verkar acceptera en globe-parameter, och i beskrivningen för d:Property:P625 som du länkar till står det "geocoordinates of the subject. For Earth, please note that only WGS84 coordinating system is supported at the moment" vilket jag tycker implicerar att koordinater för andra himlakroppar är tillåtna.
  5. Om man vill undertrycka koordinater på andra himlakroppar så finns det en egenskap som heter globe i valueobj. Det ska alltså räcka med en if-sats, ungefär så här:
    if ( valueobj.globe === 'http://www.wikidata.org/entity/Q2' ) {
    	//Kod här kommer bara utföras om koordinaterna är på jorden
    }
    
Nirmos (diskussion) 4 mars 2019 kl. 23.58 (CET)Svara
@Nirmos: Jag tror inte att "coordinates" klarar andra himlakroppar än jorden. Om den gör det Men då behöver värdet på "valuobject.globe" skickas med till den i "tpl". Som det är nu kommer man till en karta över jorden när man klickar på koordinaterna uppe till höger i någon av de 219 artiklarna enligt länken ovan. Det var det jag försökte undvika, men att gå via P376 var ju sämre än att direkt titta på "valueobject.globe".
--Larske (diskussion) 5 mars 2019 kl. 00.24 (CET)Svara
Förtydligande: Jo, "coordinates" klarar nog av globe, och när jag tittar så verkar även "geohack" (kartapplikationen) klara av åtminstone några himlakroppar. Men det behövs en översättning från till exempel http://www.wikidata.org/entity/Q405 i "valueobj.globe" till globe:moon i "tpl-strängen" så att man för Abetti (månkrater) hamnar här i stället för här. --Larske (diskussion) 5 mars 2019 kl. 00.52 (CET)Svara
Tillägg: Här är en lista på vilka himlakroppar som supportas av kartapplikationen. --Larske (diskussion) 5 mars 2019 kl. 00.57 (CET)Svara
@Nirmos: Såg att du nu har fixat koordinater även för alla månkratrar, och ytterligare några himlakroppar.
Främst Venus, Mars och Merkurius har mängder av koordinatsatta objekt i Wikidata. De flesta av dessa har inga artiklar i svwp. De har dock artiklar i enwp så det är väl bara en tidsfråga tills någon astronomiintresserad lägger in dem även i svwp.
När det blir många himlakroppar att ta hand om blir det en himla massa "else if" i koden. Själv är jag lite förtjust i tabellslagning i sådana fall. Se exempel nedan.
Med många "else if" Med en "tabellslagning"
if ( valueobj.globe === 'http://www.wikidata.org/entity/Q111' ) {
   globe = 'mars';
} else if ( valueobj.globe === 'http://www.wikidata.org/entity/Q308' ) {
   globe = 'mercury';
} else if ( valueobj.globe === 'http://www.wikidata.org/entity/Q313' ) {
   globe = 'venus';
} else if ( valueobj.globe === 'http://www.wikidata.org/entity/Q405' ) {
   globe = 'moon';
} else if ( valueobj.globe === 'http://www.wikidata.org/entity/Q596' ) {
   globe = 'ceres';
} else if ( valueobj.globe === 'http://www.wikidata.org/entity/Q3030' ) {
   globe = 'vesta';
} else if ( valueobj.globe === 'http://www.wikidata.org/entity/Q3134' ) {
  globe = 'callisto';
} else if ( valueobj.globe === 'http://www.wikidata.org/entity/Q3322' ) {
  globe = 'titania';
} else if ( valueobj.globe === 'http://www.wikidata.org/entity/Q7547' ) {
  globe = 'phobos';
} else if ( valueobj.globe === 'http://www.wikidata.org/entity/Q15034' ) {
  globe = 'mimas';
} else if ( valueobj.globe === 'http://www.wikidata.org/entity/Q15047' ) {
  globe = 'tethys';
} else if ( valueobj.globe === 'http://www.wikidata.org/entity/Q15050' ) {
  globe = 'rhea';
}
var globenames = {
    'Q111'      : 'mars', 
    'Q308'      : 'mercury', 
    'Q313'      : 'venus', 
    'Q405'      : 'moon', 
    'Q596'      : 'ceres',
    'Q3030'     : 'vesta',
    'Q3134'     : 'callisto',
    'Q3322'     : 'titania',
    'Q7547'     : 'phobos',
    'Q15034'    : 'mimas',
    'Q15047'    : 'tethys',
    'Q15050'    : 'rhea'
    };
globe = globenames[valueobject.globe.match(/Q[0-9]+$/)];
--Larske (diskussion) 6 mars 2019 kl. 22.02 (CET)Svara