Архив метеоданных со станций за год
- gimran
- Гуру
- Сообщения: 1902
- Зарегистрирован: 07 июл 2010, 15:43
- Репутация: 242
- Откуда: Уфа
Re: Архив метеоданных со станций за год
Данные с метео.ру подходят для простейших графиков, скажем, колебаний температур, но не для расчета гидротермического коэффициента Селянинова, используемого для прогнозов в сельском и лесном хозяйствах.
Цитирую:
СЕЛЯНИНОВА ГИДРОТЕРМИЧЕСКИЙ КОЭФФИЦИЕНТ (ГТК) , показатель увлажнённости территории; установлен сов. климатологом Г. Т. Селяниновым. Определяется отношением суммы осадков (r) в мм за период со среднесуточными темп-рами воздуха выше 10 °С к сумме темп-р (∑t) за это же время, уменьшенной в 10 раз, т. е. ГТК = Чем ниже ГТК, тем засушливее местность.
Изолиния ГТК,равная 1, близка к сев. границе степной зоны. ГТК используют при с.-х. оценке климата для выделения зон разл. влагообеспе-ченности с.-х. культур
Вычисляется для каждого месяца отдельно.
Формулы наизусть не вспомню, но при наличии температуры и суммы осадков или точки росы, все вычисляется по формулам и таблицам.
Касательно картографии, получаются такие карты: http://www.agroatlas.ru/ru/content/climatic_maps/GTK/
То есть простейшая интерполяция.
Как понимаете, чем больше станций, тем выше точность, а для корректного расчета требуются ежедневные данные, таккак надо знать, в какой день температура >=10 градусам, а когда нет.
[ Сообщение с мобильного устройства ]
Цитирую:
СЕЛЯНИНОВА ГИДРОТЕРМИЧЕСКИЙ КОЭФФИЦИЕНТ (ГТК) , показатель увлажнённости территории; установлен сов. климатологом Г. Т. Селяниновым. Определяется отношением суммы осадков (r) в мм за период со среднесуточными темп-рами воздуха выше 10 °С к сумме темп-р (∑t) за это же время, уменьшенной в 10 раз, т. е. ГТК = Чем ниже ГТК, тем засушливее местность.
Изолиния ГТК,равная 1, близка к сев. границе степной зоны. ГТК используют при с.-х. оценке климата для выделения зон разл. влагообеспе-ченности с.-х. культур
Вычисляется для каждого месяца отдельно.
Формулы наизусть не вспомню, но при наличии температуры и суммы осадков или точки росы, все вычисляется по формулам и таблицам.
Касательно картографии, получаются такие карты: http://www.agroatlas.ru/ru/content/climatic_maps/GTK/
То есть простейшая интерполяция.
Как понимаете, чем больше станций, тем выше точность, а для корректного расчета требуются ежедневные данные, таккак надо знать, в какой день температура >=10 градусам, а когда нет.
[ Сообщение с мобильного устройства ]
- gimran
- Гуру
- Сообщения: 1902
- Зарегистрирован: 07 июл 2010, 15:43
- Репутация: 242
- Откуда: Уфа
Re: Архив метеоданных со станций за год
Хотя за метео.ру спасибо, надо через центральный офис попытаться договориться, чтобы они вычисляли данные на всю Россию и предоставляли данные.
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
-
- Завсегдатай
- Сообщения: 257
- Зарегистрирован: 06 фев 2006, 20:16
- Репутация: 39
Re: Архив метеоданных со станций за год
Кроме перечисленного, какие-то архивы когда-то я брал еще с этих сайтов:
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
Впрочем, сюда могло что-то затесаться и без архивов, я не помню.
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
Впрочем, сюда могло что-то затесаться и без архивов, я не помню.
-
- Активный участник
- Сообщения: 137
- Зарегистрирован: 16 сен 2011, 17:38
- Репутация: 11
Re: Архив метеоданных со станций за год
На метео.ру (http://aisori.meteo.ru/ClimateR) есть только реперные станции, Их мало, т.к. у реперным относятся станции с длительным рядом 100 лет и более. Например в Пермском крае есть 25 метеостанций, из них реперных три (Чердынь, Бисер, Пермь). ПО ним есть данные за весь период наблюдений.
А на РП5 есть 19 из 25 станций, что ИМХО очень неплохо. Но архив полный только с 2009 г.
Также архив на сайте ИКИ РАН http://meteo.infospace.ru/win/wcarch/ht ... ountry=176 жил 4 года, затем скончался.
А на РП5 есть 19 из 25 станций, что ИМХО очень неплохо. Но архив полный только с 2009 г.
Также архив на сайте ИКИ РАН http://meteo.infospace.ru/win/wcarch/ht ... ountry=176 жил 4 года, затем скончался.
-
- Гуру
- Сообщения: 939
- Зарегистрирован: 29 май 2011, 19:41
- Репутация: 94
- Откуда: Киев
Re: Архив метеоданных со станций за год
Помогите пожалуйста решить как лучше подготовить метеоданные NOAA GSOD (Global Summary of the Day) к использованию в ГИС (.shp)? А то вручную в Экселе плохая перспектива... они у меня в .txt с пробелом в роле разделителя колонок.
1. Данные в фаренгейтах и дюймах, нужно перевести в метрическую систему. А в колонке Осадков (PRCP) еще и отделить сами осадки от символа погодных условий.
2. В некоторых колонках есть значения "нет данных" ("9999.9", "999.9" и т.д., описано в записке GSOD_DESC.txt). Нужно переводить эти значения в пустую ячейку, а не в "0" по метрической шкале (только в таком случае данные с этой метеостанции не будут учитываться при интерполяции).
3. По WMOid привязать метеостанцию к координатам, но это я уже смогу сделать.
Пример данных для одной из метеостанций выкладываю.
Я находил еще некие Питоновские скрипты вроде как именно под эти задачи, но осилить их не могу (даже не знаю куда там вписывать пути хранения и формат данных).
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 КБ) 684 скачивания
-
- Курск.txt
- (158.05 КБ) 905 скачиваний
- Игорь Белов
- Гуру
- Сообщения: 2230
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1503
- Откуда: Казань
Re: Архив метеоданных со станций за год
Электронные таблицы не такая уж плохая перспектива, если уметь ими пользоваться.
The purpose of computing is insight, not numbers
-
- Гуру
- Сообщения: 939
- Зарегистрирован: 29 май 2011, 19:41
- Репутация: 94
- Откуда: Киев
Re: Архив метеоданных со станций за год
ErnieBoyd, пошёл теперь разбираться с Экселем по формульной заготовке
Спасибо
Спасибо
-
- Гуру
- Сообщения: 939
- Зарегистрирован: 29 май 2011, 19:41
- Репутация: 94
- Откуда: Киев
Re: Архив метеоданных со станций за год
ErnieBoyd, разбирался и у меня появилось еще пару вопросов:
1. Можно ли как-то в формулу расчёта количества осадков добавить дополнительное условие, что при значении 0,00 (как и 99,99), тоже возвращало пустую ячейку? (Чтоб станцию где не зафиксированы осадки в этот день не брать в интерполяцию).
Знаю, что тут где-то надо вставить функцию И, ИЛИ, или еще одно ЕСЛИ, но не пойму где
2. И формулы расчёта минимальных и максимальных температур мне выдают какие-то странные значения 23446,7 и ошибку #ЗНАЧ!.
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)
- Игорь Белов
- Гуру
- Сообщения: 2230
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1503
- Откуда: Казань
Re: Архив метеоданных со станций за год
Элементарно, Ватсон. Используйте вложенные условия: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
-
- Гуру
- Сообщения: 939
- Зарегистрирован: 29 май 2011, 19:41
- Репутация: 94
- Откуда: Киев
Re: Архив метеоданных со станций за год
Вложенное условие попробовал, в формуле можно вписать =0 (но нельзя =0,00 как в данных), потому оно и не делает ячейки с отсутствием осадков пустыми Хм
Да, тот Курск у меня так открывается.
Да, тот Курск у меня так открывается.
- Вложения
-
- Курск.png (4.72 КБ) 14665 просмотров
- Игорь Белов
- Гуру
- Сообщения: 2230
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1503
- Откуда: Казань
Re: Архив метеоданных со станций за год
Проблема в символе после числа. Пишем так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: в Excel 2010 под Windows 7: в LibreOffice 4.2 под Xubuntu:
The purpose of computing is insight, not numbers
-
- Гуру
- Сообщения: 939
- Зарегистрирован: 29 май 2011, 19:41
- Репутация: 94
- Откуда: Киев
Re: Архив метеоданных со станций за год
Добавлю пример разработанный ErnieBoyd для GSOD для тех, кому понадобиться.
1. Чтоб значения отображались корректно, нужно в Панели управления/Языки и региональные стандарты/Дополнительные параметры/Разделитель целой и дробной части изменить с запятой на точку.
2. Исходные данные скачанные в формате .txt импортируются в Excel (Данные/(Получение внешних данных)/Из текста), сразу можно нажимать Готово. Они в data1
3. Ну и "протягиваем" формулы в низ до последних значений в data2.
1. Чтоб значения отображались корректно, нужно в Панели управления/Языки и региональные стандарты/Дополнительные параметры/Разделитель целой и дробной части изменить с запятой на точку.
2. Исходные данные скачанные в формате .txt импортируются в Excel (Данные/(Получение внешних данных)/Из текста), сразу можно нажимать Готово. Они в data1
3. Ну и "протягиваем" формулы в низ до последних значений в data2.
- Вложения
-
- GSOD_Formula.rar
- (15.6 КБ) 419 скачиваний
- nadiopt
- Гуру
- Сообщения: 4744
- Зарегистрирован: 29 янв 2009, 13:27
- Репутация: 495
- Ваше звание: хрюкало
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Архив метеоданных со станций за год
товарищи, а где на метео.ру собственно данные посмотреть/скачать можно?
ин гроссен фамилен нихт клювен клац клац
- Institor
- Активный участник
- Сообщения: 243
- Зарегистрирован: 22 апр 2011, 08:10
- Репутация: 27
- Откуда: Хабаровск
Re: Архив метеоданных со станций за год
Там все очень криво. http://aisori.meteo.ru/ClimateR
-
- Новоприбывший
- Сообщения: 1
- Зарегистрирован: 21 апр 2018, 20:46
- Репутация: 0
- Откуда: Новосибирск
Re: Архив метеоданных со станций за год
на сайте https://hydrobase.ru представлены метеостанции России, правда без климатических характеристик, а только с характеристиками самих метеостанций, но можно глянуть, вдруг поможет
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей