Архив метеоданных со станций за год

Вопросы по нескольким пакетам сразу, или вопросы, которые непонятно к какой ГИС отнести
Аватара пользователя
gimran
Гуру
Сообщения: 1902
Зарегистрирован: 07 июл 2010, 15:43
Репутация: 242
Откуда: Уфа

Re: Архив метеоданных со станций за год

Сообщение gimran » 02 май 2014, 07:21

Данные с метео.ру подходят для простейших графиков, скажем, колебаний температур, но не для расчета гидротермического коэффициента Селянинова, используемого для прогнозов в сельском и лесном хозяйствах.

Цитирую:
СЕЛЯНИНОВА ГИДРОТЕРМИЧЕСКИЙ КОЭФФИЦИЕНТ (ГТК) , показатель увлажнённости территории; установлен сов. климатологом Г. Т. Селяниновым. Определяется отношением суммы осадков (r) в мм за период со среднесуточными темп-рами воздуха выше 10 °С к сумме темп-р (∑t) за это же время, уменьшенной в 10 раз, т. е. ГТК = Чем ниже ГТК, тем засушливее местность.
Изолиния ГТК,равная 1, близка к сев. границе степной зоны. ГТК используют при с.-х. оценке климата для выделения зон разл. влагообеспе-ченности с.-х. культур

Вычисляется для каждого месяца отдельно.

Формулы наизусть не вспомню, но при наличии температуры и суммы осадков или точки росы, все вычисляется по формулам и таблицам.

Касательно картографии, получаются такие карты: http://www.agroatlas.ru/ru/content/climatic_maps/GTK/
То есть простейшая интерполяция.
Как понимаете, чем больше станций, тем выше точность, а для корректного расчета требуются ежедневные данные, таккак надо знать, в какой день температура >=10 градусам, а когда нет.

[ Сообщение с мобильного устройства ]

Аватара пользователя
gimran
Гуру
Сообщения: 1902
Зарегистрирован: 07 июл 2010, 15:43
Репутация: 242
Откуда: Уфа

Re: Архив метеоданных со станций за год

Сообщение gimran » 02 май 2014, 07:31

Хотя за метео.ру спасибо, надо через центральный офис попытаться договориться, чтобы они вычисляли данные на всю Россию и предоставляли данные.

[ Сообщение с мобильного устройства ]

udav
Завсегдатай
Сообщения: 257
Зарегистрирован: 06 фев 2006, 20:16
Репутация: 39

Re: Архив метеоданных со станций за год

Сообщение udav » 08 май 2014, 01:32

Кроме перечисленного, какие-то архивы когда-то я брал еще с этих сайтов:
http://cliware.meteo.ru/egfd_catalog_exp/
http://meteo.infospace.ru/win/wcarch/html/r_index.sht
http://meteo.infospace.ru/win/cities/html/r_index.ssi
http://www.meteocenter.net/
http://www.weatheronline.co.uk/weather/ ... ukuk&R=150
http://thermo.karelia.ru/weather/w_history.php
http://www.hmn.ru:8101/index1.php?code=3

Впрочем, сюда могло что-то затесаться и без архивов, я не помню.

ecolog
Активный участник
Сообщения: 137
Зарегистрирован: 16 сен 2011, 17:38
Репутация: 11

Re: Архив метеоданных со станций за год

Сообщение ecolog » 12 авг 2014, 15:14

На метео.ру (http://aisori.meteo.ru/ClimateR) есть только реперные станции, Их мало, т.к. у реперным относятся станции с длительным рядом 100 лет и более. Например в Пермском крае есть 25 метеостанций, из них реперных три (Чердынь, Бисер, Пермь). ПО ним есть данные за весь период наблюдений.
А на РП5 есть 19 из 25 станций, что ИМХО очень неплохо. Но архив полный только с 2009 г.
Также архив на сайте ИКИ РАН http://meteo.infospace.ru/win/wcarch/ht ... ountry=176 жил 4 года, затем скончался.

dime1
Гуру
Сообщения: 939
Зарегистрирован: 29 май 2011, 19:41
Репутация: 94
Откуда: Киев

Re: Архив метеоданных со станций за год

Сообщение dime1 » 05 мар 2015, 18:21

Помогите пожалуйста решить как лучше подготовить метеоданные NOAA GSOD (Global Summary of the Day) к использованию в ГИС (.shp)? А то вручную в Экселе плохая перспектива... они у меня в .txt с пробелом в роле разделителя колонок.
1. Данные в фаренгейтах и дюймах, нужно перевести в метрическую систему. А в колонке Осадков (PRCP) еще и отделить сами осадки от символа погодных условий.
2. В некоторых колонках есть значения "нет данных" ("9999.9", "999.9" и т.д., описано в записке GSOD_DESC.txt). Нужно переводить эти значения в пустую ячейку, а не в "0" по метрической шкале (только в таком случае данные с этой метеостанции не будут учитываться при интерполяции).
3. По WMOid привязать метеостанцию к координатам, но это я уже смогу сделать.
Пример данных для одной из метеостанций выкладываю.

Я находил еще некие Питоновские скрипты вроде как именно под эти задачи, но осилить их не могу (даже не знаю куда там вписывать пути хранения и формат данных).
Спойлер

Код: Выделить всё

Convert between different units
# ------------------------------------------------------------------ 
# Conversions.py 
# Description: Methods to convert between imperial and metric units 
# ------------------------------------------------------------------ 
def Fahrenheit_to_Celsius(value): 
"""Convert fahrenheit value to celsius degrees"""
iftype(value)!=type(0.0): 
raise "Not Float"
return 1
return(value-32.0)*5/9
def Inch_to_mm(value): 
"""Convert inch value to mm"""
iftype(value)!=type(0.0): 
raise "Not Float"
return 1
returnvalue/0.0393700787402

Код: Выделить всё

Extract data from .op files
# --------------------------------------------------------------------------- 
# ReadFiles.py 
# Description: Module used for extracting data from NCDC .op files 
# Uses: Extracting lines for a given date, period or year from all files in a folder 
# --------------------------------------------------------------------------- 
importos, re, datetime, time, arcpy 
def checkDate(date): 
#date is considered correct between 1920 (first year for NCDC data is 1928) 
and 2019. 
#Maybe regex can be improved?
 data = re.search('19[2-9]|20[0-1][0-9]([0][0-9])|([1][0-2])[0-3][0-9]', date) 
ifdata == None:    print 'Date format incorrect'    return False
return True
def GetFileList(folder, recursive): 
""" Extracts list of .op files from folder and subfolders"""
try: 
  theList = []    Files = os.listdir(folder)    foraFile inFiles: 
   fullPath = folder + '\\'+ aFile     #Enter all subdirectory tree recursive     ifos.path.isdir(fullPath) andrecursive: 
    theList += GetFileList(fullPath, recursive)     else:      #If it's an .op file, should add to list      iffullPath.endswith('.op'): 
     theList.append(fullPath)    except:    print "Error in Getting File List from the folder"
  arcpy.AddError("Error in Getting File List from the folder") 
  arcpy.AddMessage("Error: "+ str(arcpy.GetMessages(2)))    return-1
returntheList 
def ExtractDate(path, date): 
"""Extracts line which corresponds to given date from .op File"""
"""Returns tuple with line elements"""
#Try to convert date to datetime
try:    #dateT = datetime.datetime(*time.strptime(date,"%d/%m/%Y")[0:6]) 
 - 253 - 
  dateT2 = datetime.datetime.strptime(date, "%d/%m/%Y") 
exceptValueError:    raise "Date value not correct"
#Date is ok, open file for reading and start searching for line with date
try: 
  opFile = open(path, 'r') 
  line = opFile.readline()    whileline.find(dateT2.strftime("%Y%m%d")) == -1: 
   line = opFile.readline()     ifline == '':      break    else:     #if loop not interrupted with break (= EOF) then line was found
   opFile.close()     delopFile 
   fields = tuple(line.split())     returnfields    #if line was not found return -1 and do nothing else
  opFile.close()    delopFile    return-1
except:    raise "Error in Extract Date"
def ExtractPeriod(path, dateStart, dateEnd): 
"""extracts all lines for a given period to a list"""
"""!!the period must lie within the same year because the function only 
processes a opFile at a time"""
#datestart and dateend in format YYYYmmdd
#create datetime objects from both dates
try:    #dates are ok, iterate dates
  dateSt = datetime.datetime(*time.strptime(dateStart, "%m/%d/%Y")[0:5]) 
  dateEn = datetime.datetime(*time.strptime(dateEnd, "%m/%d/%Y")[0:5])    #verify that dateSt is before dateEn    ifdateSt > dateEn:     print "Dates are in incorrect order"
   arcpy.AddError("Dates are in incorrect order")     return-1
except:    raise "Error in Date Values for Period"
try: 
  d = dateSt    delta = datetime.timedelta(days=1) 
  lineList = []    #Open opFile for reading and start searching for line with start date
  opFile = open(path, 'r') 
  line = opFile.readline()    #First search for date start    whileline.find(d.strftime("%Y%m%d")) == -1 andline != "": 
   line = opFile.readline()    ifline != '':    #if loop not finished at EOF then line was found    #start going through days until you get to dateend     whiled <= dateEn andline != '':      #If I find date, I add the tuple with data from line      #and pass to the next day until I get to end date or EOF 
ifline.find(d.strftime("%Y%m%d")) != -1: 
     lineList.append(tuple(line.split()))      line = opFile.readline()      d += delta    else:     #if EOF reached and line was not found
   opFile.close()     delopFile     return-1     #all lines read, clean after me
  opFile.close()    delopFile    iflineList != []:     returnlineList    return-1
except:    raise "Error in Extract Period"
def ExtractYear(path): 
try: 
  lineList = []    #Open opFile for reading and get all lines into memory
  opFile = open(path, 'r')    #first line are tabel headers, we only need the values
  line = opFile.readline()    line = opFile.readline()    whileline != '': 
   lineList.append(tuple(line.split()))     line = opFile.readline()    #all lines read, clean after me
  opFile.close()    delopFile    iflineList != []:     returnlineList    return-1
except: 
raise "Error in Extract Year"

Код: Выделить всё

Scripts for shapefile manipulation
# --------------------------------------------------------------------------- 
# ShapefileOps.py 
# Description: Module containing methods for all the needed shapefile operations 
# Uses: shapefile creation, adding points for each station, assigning attributes from 
a field or all fields 
# ---------------------------------------------------------------------------importarcpy, re, os 
importConversions 
def getStationLocation(StationList, station): 
"""Get location for station with the code given"""
try:    #check code, 4 to 6 numbers
  data = re.search('[0-9]{3,6}', str(station))    ifdata == None:     print "Station format incorrect"
   arcpy.AddMessage("Station format incorrect")     return 0, 0    #open station lines and search for station
  lines = open(StationList, 'r') 
  line = lines.readline()    whileline.find(str(station)) == -1: 
   line = lines.readline()     ifline == '':      break    else:     #if loop not interrupted with break (= EOF) then line was found
   lines.close()     atribute = re.split(',', line) 
   lat = atribute[6] 
   lon = atribute[7]     ifisinstance(lat, str) andisinstance(lon, str): 
    latitude = float(lat)      longitude = float(lon)     else:      return 0, 0     iflatitude != -99.999:      returnlatitude, longitude    #interrupted with break (line not found    #or latitude not correct)    return 0, 0
except:    print "Error in getlocation, Lat/Lon"    print "Error"+ str(arcpy.GetMessages(2)) 
  arcpy.AddMessage("Error in getlocation, Lat/Lon") 
  arcpy.AddMessage("Error"+ arcpy.GetMessages(2))    if notlines.closed: 
   lines.close()    return 0, 0
def CreateShapefile_Field(lines, shapefile, Field): 
"""Create a shapefile with required field"""
try:    print "Creating point feature class. Field: "+ Field 
  arcpy.AddMessage("Creating point feature class. Field: "+ Field)        #first create shapefile if list has more than 0 elements    iflen(lines) == 0:     return-1    else:     #Check if shapefile exists and delete if needed     ifos.path.exists(shapefile): 
    os.remove(shapefile)      arcpy.AddMessage("Path already exists, overwrite"+ 
shapefile)      print "Path already exists, overwrite"+ shapefile 
   folder = os.path.dirname(shapefile)     filename = os.path.basename(shapefile)     #Spatial reference will be WGS84. 
   sr = arcpy.SpatialReference()     sr.factoryCode = 4326
   sr.create()     #Create shapefile at defined location
   arcpy.CreateFeatureclass_management(folder, filename, "POINT", 
'', '', '', sr) 
except: 
  arcpy.AddMessage("Error in Create Shapefile") 
  arcpy.AddMessage("Error"+ str(arcpy.GetMessages(2))) 
#try to add fields
try: 
  arcpy.AddField_management(shapefile, "Stn", "long", "9")    ifField == "TEMP": 
   arcpy.AddField_management(shapefile, "Temp", "float")    elifField == "DEWP": 
   arcpy.AddField_management(shapefile, "Dewp", "float")    elifField == "MAXTEMP": 
   arcpy.AddField_management(shapefile, "maxTemp", "float")    elifField == "MINTEMP": 
   arcpy.AddField_management(shapefile, "minTemp", "float")    elifField == "PRCP": 
   arcpy.AddField_management(shapefile, "Prcp", "float")    elifField == "SNDP": 
   arcpy.AddField_management(shapefile, "Sndp", "float") 
except:    print "Error in Add Field"    print "Error"+ str(arcpy.GetMessages(2)) 
  arcpy.AddMessage("Error in Add Field") 
  arcpy.AddMessage("Error"+ str(arcpy.GetMessages(2))) 
def CreateShapefile(lines, shapefile): 
"""Create shapefile to store points in"""
try:    #first create shapefile if list has more than 0 elements    iflen(lines) == 0:     return-1    else:     #Only create feature class if list has items     print "Creating point feature class"
   arcpy.AddMessage("Creating point feature class") 
   arcpy.AddMessage("Number of elements: "+ str(len(lines)))     print "Number of elements: "+ str(len(lines)) 
ifos.path.exists(shapefile): 
    arcpy.Delete_management(shapefile)      arcpy.AddMessage("Path already exists, overwrite"+ 
shapefile) 
   folder = os.path.dirname(shapefile)     filename = os.path.basename(shapefile)     #Spatial reference will be WGS84. Probably will allow user to 
choose spatial reference?
   sr = arcpy.SpatialReference()     sr.factoryCode = 4326
   sr.create()     #Create shapefile at defined location
   arcpy.CreateFeatureclass_management(folder, filename, "POINT", 
'', '', '', sr) 
except: 
  arcpy.AddMessage("Error in Create Shapefile") 
  arcpy.AddMessage("Error"+ str(arcpy.GetMessages(2))) 
#try to add fields
try: 
  arcpy.AddField_management(shapefile, "Stn", "long", "9") 
  arcpy.AddField_management(shapefile, "Data", "long", "9") 
  arcpy.AddField_management(shapefile, "Temp", "float") 
  arcpy.AddField_management(shapefile, "Dewp", "float") 
  arcpy.AddField_management(shapefile, "maxTemp", "float") 
  arcpy.AddField_management(shapefile, "minTemp", "float") 
  arcpy.AddField_management(shapefile, "Prcp", "float") 
  arcpy.AddField_management(shapefile, "Sndp", "float") 
except:    print "Field already exists or could not be created"    print "Error"+ str(arcpy.GetMessages(2)) 
  arcpy.AddMessage("Field already exists or could not be created") 
  arcpy.AddMessage("Error"+ str(arcpy.GetMessages(2))) 
def getDataField(line, field): 
"""Extract all data from line and return to caller"""
try:     #line is a tuple so I just iterate it.
  arcpy.AddMessage(str(line))    Date = int(line[2]) 
  Stn = int(line[0])    iffield == "TEMP":      ifline[3] != '9999.9':     #On days with no measurements Temp remains null.
    Value = Conversions.Fahrenheit_to_Celsius(float(line[3]))     else: 
    Value = -1.0    eliffield == "DEWP":     ifline[5] != '9999.9':     #On days with no measurements Dewp remains null.
    Value = float(line[5])     else: 
    Value = -1.0    eliffield == "MAXTEMP":     ifline[17] != '9999.9':     #On days with no measurements maxTemp remains null.      ifline[17][-1:] == '*': 
     Value =  Conversions.Fahrenheit_to_Celsius(float(line[17][:-1]))      else: 
     Value =  Conversions.Fahrenheit_to_Celsius(float(line[17]))     else: 
    Value = -1.0    eliffield == "MINTEMP":     ifline[18] != '9999.9':     #On days with no measurements minTemp remains null.      ifline[18][-1:] == '*': 
     Value =  Conversions.Fahrenheit_to_Celsius(float(line[18][:-1]))      else: 
     Value =  Conversions.Fahrenheit_to_Celsius(float(line[18]))     else: 
    Value = -1.0    eliffield == "PRCP":     ifline[19] != '99.99':     #On days with no measurements precipitaton remains null.      ifre.match('[A-Z]', line[19][-1:]) == None: 
     Value = Conversions.Inch_to_mm(float(line[19]))      else: 
     Value = Conversions.Inch_to_mm(float(line[19][:-1]))     else: 
    Value = -1.0    eliffield == "SNDP":     iffloat(line[20]) != '999.9': 
    Value = Conversions.Inch_to_mm(float(line[20]))     else: 
    Value = -1.0    else: 
   Value = -1.0    returnDate, Stn, Value   
except:    print "Error in Getting Data from line"    print "Error"+ str(arcpy.GetMessages(2)) 
  arcpy.AddMessage("Error in Getting Data from line") 
  arcpy.AddMessage("Error"+ str(arcpy.GetMessages(2))) 
def getData(line, Stn, Date, Temp, Dewp, maxTemp, minTemp, Prcp, Sndp): 
"""Extract all data from line and return to caller"""
try:  
  Stn = int(line[0]) 
  Date = int(line[2])    ifline[3] != '9999.9':    #On days with no measurements Temp remains null.
   Temp = Conversions.Fahrenheit_to_Celsius(float(line[3]))    else: 
   Temp = -1.0    ifline[5] != '9999.9':    #On days with no measurements Dewp remains null.
   Dewp = float(line[5])    else: 
   Dewp = -1.0    ifline[17] != '9999.9': 
#On days with no measurements maxTemp remains null.     ifline[17][-1:] == '*': 
    maxTemp =  Conversions.Fahrenheit_to_Celsius(float(line[17][:-1]))     else: 
    maxTemp =  Conversions.Fahrenheit_to_Celsius(float(line[17]))    else: 
   maxTemp = -1.0    ifline[18] != '9999.9':    #On days with no measurements minTemp remains null.     ifline[18][-1:] == '*': 
    minTemp =  Conversions.Fahrenheit_to_Celsius(float(line[18][:-1]))     else: 
    minTemp =  Conversions.Fahrenheit_to_Celsius(float(line[18]))    else: 
   minTemp = -1.0    ifline[19] != '99.99':    #On days with no measurements precipitaton remains null. Any other idea?     ifre.match('[A-Z]', line[19][-1:]) == None: 
    Prcp = Conversions.Inch_to_mm(float(line[19]))     else: 
    Prcp = Conversions.Inch_to_mm(float(line[19][:-1]))    else: 
   Prcp = -1.0    iffloat(line[20]) != 999.9: 
   Sndp = Conversions.Inch_to_mm(float(line[20]))    else: 
   Sndp = -1.0    #return tuple with values    returnStn, Date, Temp, Dewp, maxTemp, minTemp, Prcp, Sndp 
except:    print "Error in Getting Data from line"    print "Error"+ str(arcpy.GetMessages(2)) 
  arcpy.AddMessage("Error in Getting Data from line") 
  arcpy.AddMessage("Error"+ str(arcpy.GetMessages(2))) 
def AddPointsField(lines, StationList, shapefile, Field): 
"""Adds points with only one field to shapefile.
 Elems contains list of lines with data to be added""" try:    #Insert Cursor    print "Inserting points in feature class"
  arcpy.AddMessage("Inserting points in feature class") 
  Point_Cursor = arcpy.InsertCursor(shapefile)    #Create point to add to list
  arcpy.AddMessage("Point Object") 
  Point_Object = arcpy.CreateObject('Point') 
except:    print "Error in CreateShapefile, insert cursor and point object"    print "Error"+ str(arcpy.GetMessages(2)) 
  arcpy.AddMessage("Error in CreateShapefile, insert cursor and point 
object") 
  arcpy.AddMessage("Error"+ str(arcpy.GetMessages(2))) 
try: 
forlinie inlines:     #A line from that date.      #Must find station location
   station = linie[0] 
   lat, lon = getStationLocation(StationList, station)     #if function returned 0,0 station was not found     if notlat == 0.0 and notlon == 0.0:      #Create and insert point in shapefile
    arcpy.AddMessage("Point: "+ str(lat) + " ; "+ str(lon)) 
    Point_Object.X = lon      Point_Object.Y = lat      theValue = linie[1]      #if all fields have data.       iftheValue != -1.0:       #Create New point to add to shapefile
     NewPoint = Point_Cursor.newRow()       NewPoint.Shape = Point_Object       #populate fields
     arcpy.AddMessage("Value: "+ str(theValue)) 
     NewPoint.Stn = long(station)       ifField == "TEMP": 
      NewPoint.Temp = float(theValue)       elifField == "DEWP": 
      NewPoint.Dewp = float(theValue)       elifField == "MAXTEMP": 
      NewPoint.maxTemp = float(theValue)       elifField == "MINTEMP": 
      NewPoint.minTemp = float(theValue)       elifField == "PRCP": 
      NewPoint.Prcp = float(theValue)       elifField == "SNDP": 
      NewPoint.Sndp = float(theValue)       #Add point to shapefile
     Point_Cursor.insertRow(NewPoint)    #clean up    delPoint_Cursor    delPoint_Object 
except:    print "Error in CreateShapefile, add points"    print "Error"+ str(arcpy.GetMessages(2)) 
  arcpy.AddMessage("Error in CreateShapefile, add points") 
  arcpy.AddMessage("Error"+ str(arcpy.GetMessages(2))) 
def AddPoints(lines, StationList, shapefile): 
"""Adds all points in lines set to shapefile"""      print "Inserting points in feature class"
 arcpy.AddMessage("Inserting points in feature class") 
 Stn, Date = 0, 0
 Temp, Dewp, maxTemp, minTemp, Prcp, Sndp = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
try:    #Insert Cursor
  arcpy.AddMessage("Insert Cursor") 
  Point_Cursor = arcpy.InsertCursor(shapefile)    #Create point to add to list
  arcpy.AddMessage("Point Object") 
  Point_Object = arcpy.CreateObject('Point') 
except:    print "Error in CreateShapefile, insert cursor and point object"    print "Error"+ str(arcpy.GetMessages(2)) 
  arcpy.AddMessage("Error in CreateShapefile insert cursor and point 
object") 
  arcpy.AddMessage("Error"+ str(arcpy.GetMessages(2))) 
try:    forlinie inlines:     #A line from that date.      #Must find station location
   station = linie[0] 
   arcpy.AddMessage("Find lat lon for "+ str(station)) 
   lat, lon = getStationLocation(StationList, station)     #if function returned 0,0 station was not found     if notlat == 0.0 and notlon == 0.0:      #Create and insert point in shapefile
    arcpy.AddMessage("Point: "+ str(lat) + str(lon)) 
    Point_Object.X = lon      Point_Object.Y = lat      Stn, Date, Temp, Dewp, maxTemp, minTemp, Prcp, Sndp =  getData(linie, Stn, Date, Temp, Dewp, maxTemp, minTemp, Prcp, Sndp)      #if all fields have data.       ifTemp != -1.0 orDewp != -1.0 ormaxTemp != -1.0 orPrcp 
!= -1.0 orminTemp != -1.0 orSndp != -1.0:       #Create New point to add to shapefile
     NewPoint = Point_Cursor.newRow()       NewPoint.Shape = Point_Object       #populate fields
     arcpy.AddMessage(str(Stn) + " "+ str(Date) + " "+ 
str(Temp) + " "+ str(Dewp) + " "+ str(maxTemp) + " "+ str(minTemp) + " "+ 
str(Prcp) + " "+ str(Sndp)) 
     NewPoint.Data = long(Date)       NewPoint.Stn = long(Stn)       NewPoint.Temp = float(Temp)       NewPoint.Dewp = float(Dewp)       NewPoint.maxTemp = float(maxTemp)       NewPoint.minTemp = float(minTemp)       NewPoint.Prcp = float(Prcp)       NewPoint.Sndp = float(Sndp)       #Add point to shapefile
     Point_Cursor.insertRow(NewPoint)    #clean up    delPoint_Cursor    delPoint_Object 
except:    print "Error in CreateShapefile, add points"    print "Error"+ str(arcpy.GetMessages(2)) 
  arcpy.AddMessage("Error in CreateShapefile, add points") 
  arcpy.AddMessage("Error"+ str(arcpy.GetMessages(2)))
Вложения
GSOD_DESC.txt
(14.55 КБ) 683 скачивания
Курск.txt
(158.05 КБ) 905 скачиваний

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2229
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1501
Откуда: Казань

Re: Архив метеоданных со станций за год

Сообщение Игорь Белов » 06 мар 2015, 09:01

Электронные таблицы не такая уж плохая перспектива, если уметь ими пользоваться.
Курск.7z
(156.7 КБ) 396 скачиваний
The purpose of computing is insight, not numbers

dime1
Гуру
Сообщения: 939
Зарегистрирован: 29 май 2011, 19:41
Репутация: 94
Откуда: Киев

Re: Архив метеоданных со станций за год

Сообщение dime1 » 06 мар 2015, 12:55

ErnieBoyd, пошёл теперь разбираться с Экселем по формульной заготовке :)
Спасибо :wink:

dime1
Гуру
Сообщения: 939
Зарегистрирован: 29 май 2011, 19:41
Репутация: 94
Откуда: Киев

Re: Архив метеоданных со станций за год

Сообщение dime1 » 06 мар 2015, 20:11

ErnieBoyd, разбирался и у меня появилось еще пару вопросов:
1. Можно ли как-то в формулу расчёта количества осадков добавить дополнительное условие, что при значении 0,00 (как и 99,99), тоже возвращало пустую ячейку? (Чтоб станцию где не зафиксированы осадки в этот день не брать в интерполяцию).

Код: Выделить всё

=ЕСЛИ(data1!M2=99,99;"";ЗНАЧЕН(ПСТР(data1!M2;1;ДЛСТР(data1!M2)-1))*25,4)
Знаю, что тут где-то надо вставить функцию И, ИЛИ, или еще одно ЕСЛИ, но не пойму где :?

2. И формулы расчёта минимальных и максимальных температур мне выдают какие-то странные значения 23446,7 и ошибку #ЗНАЧ!.

Код: Выделить всё

=ЕСЛИ(data1!R2=9999,9;"";(ЗНАЧЕН(ПСТР(data1!R2;1;ДЛСТР(data1!R2)-ЕСЛИ(ПРАВСИМВ(data1!R2;1)="*";1;0)))-32)/1,8)

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2229
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1501
Откуда: Казань

Re: Архив метеоданных со станций за год

Сообщение Игорь Белов » 06 мар 2015, 21:14

dime1 писал(а):Можно ли как-то в формулу расчёта количества осадков добавить дополнительное условие, что при значении 0,00 (как и 99,99), тоже возвращало пустую ячейку? … Знаю, что тут где-то надо вставить функцию И, ИЛИ, или еще одно ЕСЛИ, но не пойму где :?
Элементарно, Ватсон. Используйте вложенные условия:

Код: Выделить всё

=ЕСЛИ(data1!M2=99,99;"";ЕСЛИ(data1!M2=0;"";ЗНАЧЕН(ПСТР(data1!M2;1;ДЛСТР(data1!M2)-1))*25,4))
dime1 писал(а):2. И формулы расчёта минимальных и максимальных температур мне выдают какие-то странные значения 23446,7 и ошибку #ЗНАЧ!.
Это тот "Курск" или другие данные? Если другие, хочется посмотреть на исходный текстовый файл и как Вы его импортировали.
The purpose of computing is insight, not numbers

dime1
Гуру
Сообщения: 939
Зарегистрирован: 29 май 2011, 19:41
Репутация: 94
Откуда: Киев

Re: Архив метеоданных со станций за год

Сообщение dime1 » 06 мар 2015, 21:29

Вложенное условие попробовал, в формуле можно вписать =0 (но нельзя =0,00 как в данных), потому оно и не делает ячейки с отсутствием осадков пустыми :? Хм

Да, тот Курск у меня так открывается.
Вложения
Курск.png
Курск.png (4.72 КБ) 14609 просмотров

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2229
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1501
Откуда: Казань

Re: Архив метеоданных со станций за год

Сообщение Игорь Белов » 07 мар 2015, 23:04

dime1 писал(а):Вложенное условие попробовал, в формуле можно вписать =0 (но нельзя =0,00 как в данных), потому оно и не делает ячейки с отсутствием осадков пустыми :? Хм
Проблема в символе после числа. Пишем так

Код: Выделить всё

=ЕСЛИ(data1!T2=99.99,"",ЕСЛИ(ЛЕВСИМВ(data1!T2,ДЛСТР(data1!T2)-1)="0.00","",ЗНАЧЕН(ПСТР(data1!T2,1,ДЛСТР(data1!T2)-1))*25.4))
или так

Код: Выделить всё

=ЕСЛИ(data1!T2=99.99,"",ЕСЛИ(ЗНАЧЕН(ЛЕВСИМВ(data1!T2,ДЛСТР(data1!T2)-1))=0,"",ЗНАЧЕН(ПСТР(data1!T2,1,ДЛСТР(data1!T2)-1))*25.4))
dime1 писал(а):тот Курск у меня так открывается.
Причина очевидна: неверные настройки форматов языка и региональных стандартов в системе.
Исправьте разделитель целой и дробной части чисел с запятой на точку.

Тот же фрагмент в Excel 2007 под Windows-XP:
Курск.png
Курск.png (5.31 КБ) 14550 просмотров
в Excel 2010 под Windows 7:
Курск_2.png
Курск_2.png (5.31 КБ) 14536 просмотров
в LibreOffice 4.2 под Xubuntu:
Курск_3.png
Курск_3.png (12.55 КБ) 14535 просмотров
The purpose of computing is insight, not numbers

dime1
Гуру
Сообщения: 939
Зарегистрирован: 29 май 2011, 19:41
Репутация: 94
Откуда: Киев

Re: Архив метеоданных со станций за год

Сообщение dime1 » 11 мар 2015, 19:41

Добавлю пример разработанный ErnieBoyd для GSOD для тех, кому понадобиться.
1. Чтоб значения отображались корректно, нужно в Панели управления/Языки и региональные стандарты/Дополнительные параметры/Разделитель целой и дробной части изменить с запятой на точку.
2. Исходные данные скачанные в формате .txt импортируются в Excel (Данные/(Получение внешних данных)/Из текста), сразу можно нажимать Готово. Они в data1
3. Ну и "протягиваем" формулы в низ до последних значений в data2.
Вложения
GSOD_Formula.rar
(15.6 КБ) 419 скачиваний

Аватара пользователя
nadiopt
Гуру
Сообщения: 4744
Зарегистрирован: 29 янв 2009, 13:27
Репутация: 495
Ваше звание: хрюкало
Откуда: Санкт-Петербург
Контактная информация:

Re: Архив метеоданных со станций за год

Сообщение nadiopt » 24 сен 2015, 20:44

товарищи, а где на метео.ру собственно данные посмотреть/скачать можно?
ин гроссен фамилен нихт клювен клац клац

Аватара пользователя
Institor
Активный участник
Сообщения: 243
Зарегистрирован: 22 апр 2011, 08:10
Репутация: 27
Откуда: Хабаровск

Re: Архив метеоданных со станций за год

Сообщение Institor » 30 сен 2015, 07:14

Там все очень криво. http://aisori.meteo.ru/ClimateR

listok
Новоприбывший
Сообщения: 1
Зарегистрирован: 21 апр 2018, 20:46
Репутация: 0
Откуда: Новосибирск

Re: Архив метеоданных со станций за год

Сообщение listok » 21 апр 2018, 20:55

на сайте https://hydrobase.ru представлены метеостанции России, правда без климатических характеристик, а только с характеристиками самих метеостанций, но можно глянуть, вдруг поможет

Ответить

Вернуться в «Общий - ПО»

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и 7 гостей