Difference between revisions of "Lunarpedia talk:Autostub1 test 1"
(Added an erratum) |
m |
||
Line 175: | Line 175: | ||
if lat > 5: vert = "a northern" | if lat > 5: vert = "a northern" | ||
elif lat < 5: vert = "a southern" | elif lat < 5: vert = "a southern" | ||
− | else: vert = "an | + | else: vert = "an equatorial" |
if long_ <= 165 and long_ >= 15: side = "near side" | if long_ <= 165 and long_ >= 15: side = "near side" |
Revision as of 22:51, 9 November 2006
Erratum
- Category tag for 'Location' should have been 'Locations'
-- Strangelv 18:27, 4 November 2006 (PST)
Problems
- How to tie the satellite crater articles to the main crater articles when the USGS database doesn't link them?
- What is the area of each sector in km**2?
- How might the script determine if a given feature is in a given sector? If we treat each item as a perfect circle, how do we determine which sectors include portions of that circle?
- Can we automatically do maps for features near the poles?
-- Strangelv 18:13, 4 November 2006 (PST)
To Do
- Sector areas
- Match sectors and features (not just centers)
- Match sattelite craters with their central craters
- Border case handling for when feature center is on the boundary of two or four sectors
- Automatically load and parse tab delimited CSV
- Automatically output articles in XML for bulk import
- Automatically generate map files for suitably large features
- Automatically generate sector articles and maps
-- Strangelv 18:13, 4 November 2006 (PST)
Bonus Points
- Is there a public domain database of rille?
- Are there other public domain databases of use that we might be able to merge into this to add details to sectors and features (such as surface samples)?
-- Strangelv 18:13, 4 November 2006 (PST)
Source Code
Warning: this was getting mauled in a few places. I've tinkered with the formatting to make it work.
And yes, the code is really rough in a few places (like where reinventing the wheel is faster than rembering where the wheel is). The language is Python. 2.4 and later should work; earlier may require replacing my '//' division with integer coersion.
#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%# # # # Feature Autostub Generator # # # # Licence pending # # # #%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#
def dostub(thisentry): """Create stub article from database """ # # Set up variables to generate article stub # #%#%#%#%#%#%#%#%#%#%#%#%#%#%%#%#%#%#%# # name = thisentry[2] # name of feature mapname = makemapname(name, None) # filename for this feature's # automatically generated # map from Clementine data Lat = float(thisentry[3]) # USGS latitude lat = do_lat(Lat) # string with proper latitude me_long = poslong(thisentry[4]) # longitude (Mean Earth) mo_long = me2mo(me_long) # longitude (Mare Orientale) me_coord = coordstr(me_long, lat) # Mean Earth coordinate string mo_coord = coordstr(mo_long, lat) # Mare Orientale coordinate string origin = thisentry[24] # 'Origin' column in database # warning: this seems to # be almost anything featuretype = thisentry[23] # Is this a mare, a crater, other? dia = thisentry[10] # feature diameter, if applicable approvalStat = thisentry[18] # year approval information approvalYear = thisentry[19] # year of approval (if approved) reference = thisentry[21] # 'reference' column in database inSector = isinsector(mo_long, Lat) # what sector is this feature # centered in? sectors = sectorlist(mo_long, lat, dia) # -----what sectors include it? typecat = dotypecat(featuretype) # simplified category type domap(mapname, mo_long, lat, dia) # create the map localeDescr = descrlocale(mo_long, Lat, typecat) # -----text description of location approvalStr = doapproval(approvalStat, approvalYear) # -----text description of approval, # if approved. #%#%#%#%#%#%#%#%#%#%#%#%#%#%%#%#%#%#%# # # start generating the article here: # to_out = [] to_out += ["{{Circular Feature "] to_out += ["name = "+name] to_out += ["featuretype = "+typecat] to_out += ["origin = "+origin] to_out += ["map = 240px"] to_out += ["mo_coord = "+mo_coord] to_out += ["me_coord = "+me_coord] to_out += ["dia = "+dia] to_out += ["approval = "+approvalStr] # Tidily install pipes for the table to_out = tidypipes(to_out) to_out += ["}}"] to_out += ["'''"+name+"''' "+localeDescr] to_out += ["<BR/><BR/>\n\n"] # if inSector !="AAAAAAAAA!": to_out += ["The center of "+name+" is in sector Sector_"+inSector+""] # else: # inSectors = something() to_out += ["<BR/><BR/>\n\n"] to_out += ["==See Also=="]
for q in sectors: to_out += [""+q+""] to_out += ["<BR/><BR/>\n\n"] to_out += ["==References=="] to_out += [refbreak(reference)] to_out += ["{{Autostub}}"] to_out += ["[[Category:Location]]"] to_out += ["[[Category:"+typecat+"]]"] to_out += [""]
return to_out
# def main(): # # load database # didxml = templatetop() # for q in database: didxml += dostub(q) + templatemid(); print ".", # didxml += templatefin() # # save didxml
def makemapname(name, other): """ """ name2="" for q in name: if q == " ": name2 += "_" else: name2 += q if other: name2 += "_"+other name2 += ".png" return name2
def poslong(long_): """convert string of possibly noncompliant Mean Earth longitude into float or fixed of compliant Mean Earth longitude """ long_ = float(long_) if long_ < 0 : long_ += 360 return long_
def me2mo(me_long): """ """ mo_long=float(me_long)-267.2 if mo_long <0: mo_long += 360.0 #print "me_long == "+str(me_long) return mo_long
def coordstr(long_,lat): """ temporary implementation """ return str(lat)+" "+str(long_)
def descrlocale(long_, lat, what): """quickie hack """ if lat > 5: vert = "a northern" elif lat < 5: vert = "a southern" else: vert = "an equatorial"
if long_ <= 165 and long_ >= 15: side = "near side" elif long_ <= 195 and long_ >= 345: side = "far side" elif long_ >= 165 and long_ <= 195: side = "east edge" else: side = "west edge" return "is "+vert+" "+what+" on the "+side+" of Luna."
def isinsector(long_,lat): """can we determinewhat sector you're in? """ # special case handling? def AAAAAAAAA(): # border case handling return "AAAAAAAAA!" # find latitude part or bust if lat == 0.0: LT="E" # this is equatorial else: if lat > 0: LTH = "N" else: lat = -lat LTH = "S" if ((lat+7.5)//15) == ((lat+7.5)/15.0): return AAAAAAAAA() LT = str(int(((lat+7.5)//15)*15)) + LTH if LT == "90": return LTH # this is a polar sector # find longitude part or bust if long_ < 7.5 or long_ > 352.5: LG = "000" # prime meridian sector else: if ((long_+7.5)//15) == ((long_+7.5)/15.0): return AAAAAAAAA() LG = str(int(((long_+7.5)//15)*15)) if len(LG)<3: LG = "0"+LG # return the result! return LT+LG
def dotypecat(stringie): """ """ if stringie == "Rima, rimae": return "rima" # Most definitely need to list the complete set return stringie
def sectorlist(long_,lat,dia): """ """ return ["sectorlist() not implemented"]
def domap(mapname,long_,lat,dia): """ """ return "domap() not implemented"
def doapproval(approvalStat, approvalYear): """temporary hack; needs to acconut for unapproved """ return approvalStat+" in "+approvalYear
def tidypipes(table): """takes a list oy strings, finds the longest one, and tidily adds pipes to the right of each line.
maxlen: maximum length table: input list of strings table2: output list of strings """ maxlen = 0 for q in table: if len(q)>maxlen: maxlen = len(q) table2 = [] for q in table: qq = q while (len(qq)<maxlen): qq += " " table2 += [qq+" |"] return table2
def do_lat(lat): """returns string for latitude """ if lat > 0: return str(lat)+"N" if lat == 0: return "E" return str(-lat)+"S"
def replacer(stringie, old, new): """ """ name2="" for q in stringie: if q == old: name2 += new else: name2 += q return name2
def refbreak(ref): """ """ return replacer(ref,";",";<BR/>")
##def (): ## """ ## """ ## return "() not implemented" ## ##def (): ## """ ## """ ## return "() not implemented"
#Item = ["Earth","Moon","Rima Diophantus","29.0","-33.0"," "," "," "," ","east","150.0","EU","Europe","GR","Greek","LTO39B2","LTO-39B2","5","Adopted by IAU","1985","0","null","RI","Rima, rimae","Named from nearby crater."] Item = ["Earth","Moon","Rima Cardanus","11.4","-71.5"," "," "," "," ","east","175.0","EU","Europe","IT","Italy","LOC-1","LOC-1","5","Adopted by IAU","1964","67","The System of Lunar Craters, Quadrants I, II, III, IV; by D. W. G. Arthur and others; Communications of the Lunar and Planetary Laboratory, vol. 2, no. 30, 1963; vol. 3, no. 40, 1964; vol. 3, no. 50, 1965; vol. 5, no. 70, 1966.","RI","Rima, rimae","Named from nearby crater."]
What=dostub(Item) for q in What: print q