Кажется, что sel
, использующий срез времени в сочетании с method='nearest'
, просто не поддерживается:
не может использовать аргумент
blockquote>method
, если любые индексы являются объектами срезаЭто как-то имеет смысл, поскольку выбор
nearest
для фрагмента кажется немного странным.Вы можете обойти это, выполнив
sel
в два шага, то есть сначала выберите временной срез, и с этого временного фрагмента выберите местоположение (или наоборот). Я не уверен, что это лучшее решение, но по крайней мере оно работает.Быстрый пример с некоторыми данными ERA5:
import xarray as xr ds1 = xr.open_dataset('20160502_cabauw_model_fc.nc') # Works: dsloc1 = ds1.sel(time='2016-05-02 10:00', longitude=4.9, latitude=51.2, method='nearest') # Doesn't work: #dsloc2 = ds1.sel(time=slice('2016-05-02 10:00', '2016-05-02 12:00'), longitude=4.9, latitude=51.2, method='nearest') # Works: tmp = ds1.sel(time=slice('2016-05-02 10:00', '2016-05-02 12:00')) dsloc2 = tmp.sel(longitude=4.9, latitude=51.2, method='nearest')
Это приводит к чему-то вроде:
In [23]: dsloc2 Out[23]: <xarray.Dataset> Dimensions: (level: 137, time: 3) Coordinates: longitude float32 4.8 latitude float32 51.3 * level (level) int32 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... * time (time) datetime64[ns] 2016-05-02T10:00:00 2016-05-02T11:00:00 ... Data variables: z (time, level) float32 ...
Используйте ваш метод в UIThread
DispatchQueue.main.async() {
// your UI update code
}
Это предотвращает замерзание.
вы можете попробовать, что код может помочь вам
import Foundation
import UIKit
import AVKit
class CommonFunctions {
static let shared = CommonFunctions()
typealias ResponseBlock = (_ result: UIImage?) -> Void
func getVideoThumnail(URLString: String, responseBlock:@escaping ResponseBlock) {
DispatchQueue.global().async {
let url = URL(string: URLString)
let asset = AVAsset(url: url!)
let assetImgGenerate : AVAssetImageGenerator = AVAssetImageGenerator(asset: asset)
assetImgGenerate.appliesPreferredTrackTransform = true
let time = CMTimeMake(value: 1, timescale: 2)
let img = try? assetImgGenerate.copyCGImage(at: time, actualTime: nil)
if img != nil {
let frameImg = UIImage(cgImage: img!)
DispatchQueue.main.async(execute: {
responseBlock(frameImg)
})
}else {
responseBlock(nil)
}
}
}
}
использовать: -
CommonFunctions.shared.getVideoThumnail(URLString: downloadURL) { (image) in
if image != nil {
let thumbimage = image
}
}