修改GF3干涉模块配准错误导致干涉图出现条纹的问题
parent
3648f0e7f8
commit
d9651dd991
|
@ -407,7 +407,7 @@ class Orbit(Component):
|
|||
"Orbit interpolation type %s, is not implemented" % method
|
||||
)
|
||||
|
||||
interpolateOrbit = interpolate
|
||||
# interpolateOrbit = interpolate
|
||||
|
||||
def _linearOrbitInterpolation(self,time):
|
||||
"""
|
||||
|
@ -1020,12 +1020,11 @@ class Orbit(Component):
|
|||
delta = (self.maxTime - self.minTime).total_seconds() * 0.5
|
||||
tguess = self.minTime + datetime.timedelta(seconds = delta)
|
||||
outOfBounds = False
|
||||
# Start the previous guess tracking with dummy value
|
||||
t_prev_guess = tguess + datetime.timedelta(seconds=10)
|
||||
for ii in range(51):
|
||||
try:
|
||||
sv = self.interpolateOrbit(tguess, method='hermite')
|
||||
except:
|
||||
except Exception as e:
|
||||
print(e)
|
||||
outOfBounds = True
|
||||
break
|
||||
|
||||
|
@ -1044,12 +1043,9 @@ class Orbit(Component):
|
|||
c2 = (fdop/rng + fdopder)
|
||||
|
||||
fnprime = c1 + c2 * dopfact
|
||||
|
||||
tguess = tguess - datetime.timedelta(seconds = fn/fnprime)
|
||||
if abs(tguess - t_prev_guess).total_seconds() < 5e-9:
|
||||
if abs(fn/fnprime) < 1e-6:
|
||||
break
|
||||
else:
|
||||
t_prev_guess = tguess
|
||||
|
||||
if outOfBounds:
|
||||
raise Exception('Interpolation time out of bounds')
|
||||
|
|
|
@ -27,9 +27,13 @@
|
|||
# Author: Walter Szeliga
|
||||
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
|
||||
|
||||
from xml.etree.ElementTree import ElementTree
|
||||
import datetime
|
||||
import isceobj
|
||||
import copy
|
||||
from isceobj.Scene.Frame import Frame
|
||||
from isceobj.Planet.Planet import Planet
|
||||
from isceobj.Orbit.Orbit import StateVector, Orbit
|
||||
|
@ -38,16 +42,8 @@ from isceobj.Planet.AstronomicalHandbook import Const
|
|||
from iscesys.Component.Component import Component
|
||||
from iscesys.DateTimeUtil.DateTimeUtil import DateTimeUtil as DTUtil
|
||||
import os
|
||||
import copy
|
||||
import scipy.sparse as ss
|
||||
from concurrent.futures._base import as_completed, wait
|
||||
from concurrent.futures.thread import ThreadPoolExecutor
|
||||
from multiprocessing import Pool
|
||||
import math
|
||||
import datetime
|
||||
from math import sin,cos
|
||||
from scipy.optimize import leastsq
|
||||
import numpy as np
|
||||
|
||||
sep = "\n"
|
||||
tab = " "
|
||||
lookMap = { 'R': -1,
|
||||
|
@ -59,7 +55,7 @@ TIFF = Component.Parameter(
|
|||
default='',
|
||||
type=str,
|
||||
mandatory=True,
|
||||
doc='GF3 tiff imagery file'
|
||||
doc='GF3_SLC tiff imagery file'
|
||||
)
|
||||
|
||||
XML = Component.Parameter(
|
||||
|
@ -68,7 +64,7 @@ XML = Component.Parameter(
|
|||
default='',
|
||||
type=str,
|
||||
mandatory=True,
|
||||
doc='GF3 xml metadata file'
|
||||
doc='GF3_SLC xml metadata file'
|
||||
)
|
||||
|
||||
ORBIT_DIRECTORY = Component.Parameter(
|
||||
|
@ -77,7 +73,7 @@ ORBIT_DIRECTORY = Component.Parameter(
|
|||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='Directory with GF3 precise orbits')
|
||||
doc='Directory with GF3_SLC precise orbits')
|
||||
|
||||
ORBIT_FILE = Component.Parameter(
|
||||
'orbitFile',
|
||||
|
@ -95,40 +91,87 @@ from .Sensor import Sensor
|
|||
# 这里采用《Insar原理和应用 》(刘国祥著)中基于空间定位的轨道参数计算方法一章中的内容(Gabriel and Goldstein)
|
||||
# 注意为了方便计算,采用基准时间的方法
|
||||
######################################################
|
||||
import math
|
||||
import datetime
|
||||
import time
|
||||
import scipy as sp
|
||||
from math import sin,cos
|
||||
from scipy.optimize import leastsq
|
||||
import numpy as np
|
||||
|
||||
|
||||
def FindInfomationFromJson(HeaderFile_dom_json, node_path_list):
|
||||
"""
|
||||
在Json文件中,按照指定路径解析出制定节点
|
||||
"""
|
||||
result_node = HeaderFile_dom_json
|
||||
for nodename in node_path_list:
|
||||
result_node = result_node[nodename]
|
||||
return result_node
|
||||
########
|
||||
# 函数列表
|
||||
########
|
||||
def poly1dfunc(p,x): # 一次函数
|
||||
k,b=p
|
||||
return k*x+b
|
||||
|
||||
def poly2dfunc(p,x): # 二次函数
|
||||
k1,k2,b=p
|
||||
return b+k1*x+k2*x*x
|
||||
|
||||
def GetVectorNorm(Vecter):
|
||||
"""
|
||||
得到向量的模
|
||||
"""
|
||||
Vecter = Vecter.reshape(-1,1)
|
||||
Vecter_Norm_pow = np.matmul(Vecter.T,Vecter)
|
||||
return np.sqrt(Vecter_Norm_pow)
|
||||
def poly3dfunc(p,x):
|
||||
k1,k2,k3,b=p
|
||||
return b+k1*x+k2*x*x+k3*x*x*x
|
||||
|
||||
def poly4dfunc(p,x):
|
||||
k1,k2,k3,k4,b=p
|
||||
return b+k1*x+k2*x**2+k3*x**3+k4*x**4
|
||||
|
||||
def XYZOuterM2(A, B):
|
||||
"""
|
||||
外积(叉乘),日后版本换成可以任意维度的外积运算方程
|
||||
args:
|
||||
A:nx3
|
||||
B:nx3
|
||||
"""
|
||||
cnt = A.shape[0]
|
||||
C = np.zeros((cnt, 3))
|
||||
C[:, 0] = A[:, 1] * B[:, 2] - A[:, 2] * B[:, 1]
|
||||
C[:, 1] = A[:, 2] * B[:, 0] - A[:, 0] * B[:, 2]
|
||||
C[:, 2] = A[:, 0] * B[:, 1] - A[:, 1] * B[:, 0]
|
||||
return C
|
||||
def poly5dfunc(p,x):
|
||||
k1,k2,k3,k4,k5,b=p
|
||||
return b+k1*x+k2*x**2+k3*x**3+k4*x**4+k5*x**5
|
||||
|
||||
def poly1derror(p,x,y):
|
||||
return poly1dfunc(p,x)-y
|
||||
|
||||
def poly2derror(p,x,y):
|
||||
return poly2dfunc(p,x)-y
|
||||
|
||||
def poly3derror(p,x,y):
|
||||
return poly3dfunc(p,x)-y
|
||||
|
||||
def poly4derror(p,x,y):
|
||||
return poly4dfunc(p,x)-y
|
||||
|
||||
def poly5derror(p,x,y):
|
||||
return poly5dfunc(p,x)-y
|
||||
|
||||
class orbitVector:
|
||||
def __init__(self,UTCTimes,vx,vy,vz,px,py,pz,dateformat="%Y-%m-%dT%H:%M:%S.%fZ"):
|
||||
self.UTCTime=datetime.datetime.strptime(UTCTimes,dateformat) # 字符串转UTC时间
|
||||
self.time_stamp=self.UTCTime.timestamp() # 时间戳
|
||||
self.vx=vx
|
||||
self.vy=vy
|
||||
self.vz=vz
|
||||
self.px=px
|
||||
self.py=py
|
||||
self.pz=pz
|
||||
self.orbitVector2GG() # 将坐标进行变换
|
||||
self.Check()
|
||||
pass
|
||||
|
||||
def orbitVector2GG(self):
|
||||
Cx=self.py*self.vz-self.pz*self.vy
|
||||
Cy=self.pz*self.vx-self.px*self.vz
|
||||
Cz=self.px*self.vy-self.py*self.vx
|
||||
C=(Cx**2+Cy**2+Cz**2)**0.5
|
||||
self.rho=(self.px**2+self.py**2+self.pz**2)**0.5
|
||||
self.I=math.acos(Cz/C)
|
||||
self.omega=math.asin(self.pz/(self.rho*math.sin(self.I)))
|
||||
self.Omega=math.atan(-Cx/Cy)
|
||||
return [self.rho,self.I,self.omega,self.Omega]
|
||||
|
||||
def Check(self):
|
||||
rho=self.rho
|
||||
I=self.I
|
||||
omega=self.omega
|
||||
Omega=self.Omega
|
||||
Xp=-rho*(cos(omega)*cos(Omega)-sin(omega)*sin(Omega)*cos(I))
|
||||
Yp=-rho*(cos(omega)*sin(Omega)+sin(omega)*cos(Omega)*cos(I))
|
||||
Zp=rho*sin(omega)*sin(I)
|
||||
print("计算插值:",self.UTCTime,self.px,self.py,self.pz,self.vx,self.vy,self.vz,"|",Xp-self.px,Yp-self.py,Zp-self.pz)
|
||||
|
||||
|
||||
class SatelliteOrbit(object):
|
||||
|
@ -260,11 +303,53 @@ class SatelliteOrbitFitPoly(SatelliteOrbit):
|
|||
result_arr=np.zeros((1,7))
|
||||
|
||||
time_float = time_float - self.starttime
|
||||
result_arr[0,0]=time_float
|
||||
#time_arr[0, 4] = time_arr[0, 3] * time_float ** 4
|
||||
time_float=np.array([1,time_float,time_float**2,time_float**3,time_float**4]).reshape(1,5)
|
||||
result_arr=np.matmul(time_float,self.A_arr)
|
||||
return [time_float,result_arr]
|
||||
|
||||
#
|
||||
px=0
|
||||
py=0
|
||||
pz=0
|
||||
vx=0
|
||||
vy=0
|
||||
vz=0
|
||||
for ii in range(self.polynum):
|
||||
px+=self.A_arr[ii,0]*time_float**ii
|
||||
py+=self.A_arr[ii,1]*time_float**ii
|
||||
pz+=self.A_arr[ii,2]*time_float**ii
|
||||
vx+=self.A_arr[ii,3]*time_float**ii
|
||||
vy+=self.A_arr[ii,4]*time_float**ii
|
||||
vz+=self.A_arr[ii,5]*time_float**ii
|
||||
|
||||
return [time_float,[px,py,pz,vx,vy,vz]]
|
||||
|
||||
def getTimeOrbitStamp(self,UTCStartTime_float):
|
||||
sv=_StateVector()
|
||||
temp_sv=self.SatelliteSpaceState(UTCStartTime_float)
|
||||
sv.timeStamp=datetime.datetime.fromtimestamp(UTCStartTime_float)
|
||||
sv.xPosition = temp_sv[1][0,0]
|
||||
sv.yPosition = temp_sv[1][0,1]
|
||||
sv.zPosition = temp_sv[1][0,2]
|
||||
sv.xVelocity = temp_sv[1][0,3]
|
||||
sv.yVelocity = temp_sv[1][0,4]
|
||||
sv.zVelocity = temp_sv[1][0,5]
|
||||
return sv
|
||||
|
||||
def getTimeOrbits(self,UTCStartTime,UTCEndTime,orbitnum=1000):
|
||||
#
|
||||
startTime_stamp=datetime.datetime.strptime(UTCStartTime,"%Y-%m-%dT%H:%M:%S.%f").timestamp()-10
|
||||
endTime_stamp=datetime.datetime.strptime(UTCEndTime,"%Y-%m-%dT%H:%M:%S.%f").timestamp()+10
|
||||
if startTime_stamp>endTime_stamp:
|
||||
raise
|
||||
delta_t=(endTime_stamp-startTime_stamp)/orbitnum
|
||||
extractOrbits=[]
|
||||
#
|
||||
temptime=startTime_stamp
|
||||
while temptime<endTime_stamp:
|
||||
temptime=temptime+delta_t
|
||||
newOrbit=self.getTimeOrbitStamp(temptime)
|
||||
extractOrbits.append(newOrbit)
|
||||
newOrbit=self.getTimeOrbitStamp(endTime_stamp)
|
||||
extractOrbits.append(newOrbit)
|
||||
return extractOrbits # 扩展的轨道节点
|
||||
|
||||
def getSatelliteSpaceState(self, time_array):
|
||||
'''
|
||||
|
@ -303,97 +388,40 @@ class SatelliteOrbitFitPoly(SatelliteOrbit):
|
|||
#result_arr=result_arr_
|
||||
return result_arr_ # 位置矩阵
|
||||
|
||||
|
||||
def ReconstructionSatelliteOrbit(GPSPoints_list, starttime):
|
||||
def ReconstructionSatelliteOrbit(stateVectors, starttime):
|
||||
'''
|
||||
构建卫星轨道
|
||||
args:
|
||||
GPSPoints_list:卫星轨道点
|
||||
starttime:起算时间
|
||||
'''
|
||||
|
||||
# GPSPoint_list=[]
|
||||
# for sv in stateVectors:
|
||||
# GPSPoint=[sv.timeStamp.timestamp(),
|
||||
# sv.xPosition,
|
||||
# sv.yPosition,
|
||||
# sv.zPosition,
|
||||
# sv.xVelocity,
|
||||
# sv.yVelocity,
|
||||
# sv.zVelocity
|
||||
# ]
|
||||
# GPSPoint_list.append(GPSPoint)
|
||||
SatelliteOrbitModel = SatelliteOrbitFitPoly()
|
||||
if SatelliteOrbitModel.ReconstructionSatelliteOrbit(GPSPoints_list, starttime=starttime) is None:
|
||||
if SatelliteOrbitModel.ReconstructionSatelliteOrbit(stateVectors, starttime=starttime) is None:
|
||||
return None
|
||||
|
||||
print("orbit test")
|
||||
distance=[]
|
||||
for gpsPoint in stateVectors:
|
||||
temp_sv=SatelliteOrbitModel.SatelliteSpaceState(gpsPoint[0])
|
||||
sv=np.array(temp_sv[1])
|
||||
temp_distance=sv-gpsPoint[1:]
|
||||
distance.append(temp_distance)
|
||||
distance=np.array(distance)
|
||||
print("orbit max:",np.max(distance))
|
||||
print("orbit min:",np.min(distance))
|
||||
return SatelliteOrbitModel
|
||||
|
||||
|
||||
|
||||
########
|
||||
# 函数列表
|
||||
########
|
||||
def poly1dfunc(p,x): # 一次函数
|
||||
k,b=p
|
||||
return k*x+b
|
||||
|
||||
def poly2dfunc(p,x): # 二次函数
|
||||
k1,k2,b=p
|
||||
return b+k1*x+k2*x*x
|
||||
|
||||
def poly3dfunc(p,x):
|
||||
k1,k2,k3,b=p
|
||||
return b+k1*x+k2*x*x+k3*x*x*x
|
||||
|
||||
def poly4dfunc(p,x):
|
||||
k1,k2,k3,k4,b=p
|
||||
return b+k1*x+k2*x**2+k3*x**3+k4*x**4
|
||||
|
||||
def poly5dfunc(p,x):
|
||||
k1,k2,k3,k4,k5,b=p
|
||||
return b+k1*x+k2*x**2+k3*x**3+k4*x**4+k5*x**5
|
||||
|
||||
def poly1derror(p,x,y):
|
||||
return poly1dfunc(p,x)-y
|
||||
|
||||
def poly2derror(p,x,y):
|
||||
return poly2dfunc(p,x)-y
|
||||
|
||||
def poly3derror(p,x,y):
|
||||
return poly3dfunc(p,x)-y
|
||||
|
||||
def poly4derror(p,x,y):
|
||||
return poly4dfunc(p,x)-y
|
||||
|
||||
def poly5derror(p,x,y):
|
||||
return poly5dfunc(p,x)-y
|
||||
|
||||
class orbitVector:
|
||||
def __init__(self,UTCTimes,vx,vy,vz,px,py,pz,dateformat="%Y-%m-%dT%H:%M:%S.%f"):
|
||||
self.UTCTime=datetime.datetime.strptime(UTCTimes,dateformat) # 字符串转UTC时间
|
||||
self.time_stamp=self.UTCTime.timestamp() # 时间戳
|
||||
self.vx=vx
|
||||
self.vy=vy
|
||||
self.vz=vz
|
||||
self.px=px
|
||||
self.py=py
|
||||
self.pz=pz
|
||||
self.orbitVector2GG() # 将坐标进行变换
|
||||
self.Check()
|
||||
pass
|
||||
|
||||
def orbitVector2GG(self):
|
||||
Cx=self.py*self.vz-self.pz*self.vy # 叉乘
|
||||
Cy=self.pz*self.vx-self.px*self.vz
|
||||
Cz=self.px*self.vy-self.py*self.vx
|
||||
C=(Cx**2+Cy**2+Cz**2)**0.5
|
||||
self.rho=(self.px**2+self.py**2+self.pz**2)**0.5
|
||||
self.I=math.acos(Cz/C)
|
||||
self.omega=math.asin(self.pz/(self.rho*math.sin(self.I)))
|
||||
self.Omega=math.atan(Cx*(-1)/Cy)
|
||||
|
||||
return [self.rho,self.I,self.omega,self.Omega]
|
||||
|
||||
def Check(self):
|
||||
rho=self.rho
|
||||
I=self.I
|
||||
omega=self.omega
|
||||
Omega=self.Omega
|
||||
Xp=rho*(cos(omega)*cos(Omega)-sin(omega)*sin(Omega)*cos(I))
|
||||
Yp=rho*(cos(omega)*sin(Omega)+sin(omega)*cos(Omega)*cos(I))
|
||||
Zp=rho*sin(Omega)*sin(I)
|
||||
print("计算插值:",self.UTCTime,self.px,self.py,self.pz,self.vx,self.vy,self.vz,"|",abs(Xp)-abs(self.px),abs(Yp)-abs(self.py),abs(Zp)-abs(self.pz))
|
||||
|
||||
|
||||
class SARorbit(object):
|
||||
# 作为自定义轨道计算基类
|
||||
# 定义几个基本方法:addvector(),createOrbit(),getTime(),getTimes()
|
||||
|
@ -417,13 +445,13 @@ class SARorbit(object):
|
|||
return None
|
||||
|
||||
def getTimeOrbitStamp(self,StampTime):
|
||||
utcStr=datetime.datetime.fromtimestamp(StampTime).strftime("%Y-%m-%dT%H:%M:%S.%f")
|
||||
utcStr=datetime.datetime.fromtimestamp(StampTime).strftime("%Y-%m-%dT%H:%M:%S.%fZ")
|
||||
return self.getTimeOrbit(utcStr)
|
||||
|
||||
def getTimeOrbits(self,UTCStartTime,UTCEndTime,orbitnum=100):
|
||||
#
|
||||
startTime_stamp=datetime.datetime.strptime(UTCStartTime,"%Y-%m-%dT%H:%M:%S.%f").timestamp()-0.2
|
||||
endTime_stamp=datetime.datetime.strptime(UTCEndTime,"%Y-%m-%dT%H:%M:%S.%f").timestamp()+0.2
|
||||
startTime_stamp=datetime.datetime.strptime(UTCStartTime,"%Y-%m-%dT%H:%M:%S.%fZ").timestamp()-10
|
||||
endTime_stamp=datetime.datetime.strptime(UTCEndTime,"%Y-%m-%dT%H:%M:%S.%fZ").timestamp()+10
|
||||
if startTime_stamp>endTime_stamp:
|
||||
raise
|
||||
delta_t=(endTime_stamp-startTime_stamp)*1000/orbitnum
|
||||
|
@ -490,7 +518,7 @@ class GGorbit(SARorbit):
|
|||
|
||||
# 获取计算结果
|
||||
def getTimeOrbit(self,UTCTime):
|
||||
staptime=datetime.datetime.strptime(UTCTime,"%Y-%m-%dT%H:%M:%S.%f").timestamp()
|
||||
staptime=datetime.datetime.strptime(UTCTime,"%Y-%m-%dT%H:%M:%S.%fZ").timestamp()
|
||||
dtime=0.0001
|
||||
[Xp,Yp,Zp]=self.getXYZ(staptime)
|
||||
[Xp_temp,Yp_temp,Zp_temp]=self.getXYZ(staptime+dtime)
|
||||
|
@ -548,7 +576,7 @@ class polyorbit(SARorbit):
|
|||
|
||||
class GF3_SLC(Sensor):
|
||||
"""
|
||||
A Class representing GF3 data
|
||||
A Class representing GF3_SLC data
|
||||
"""
|
||||
|
||||
family='GF3_SLC'
|
||||
|
@ -600,12 +628,15 @@ class GF3_SLC(Sensor):
|
|||
# azimuthPixelSize = self.product.imageAttributes.rasterAttributes.sampledLineSpacing # ground spacing in meters
|
||||
totalProcessedAzimuthBandwidth = self.product.imageInfo.eqvPRF
|
||||
prf = self.product.imageInfo.eqvPRF # effective PRF can be double original, suggested by Piyush
|
||||
prf_s = ori_prf * np.ceil(totalProcessedAzimuthBandwidth / ori_prf) # effective PRF can be double original, suggested by Piyush
|
||||
# print("effective PRF %f, original PRF %f" % (prf, orig_prf) )
|
||||
print('----------------------------------------------------')
|
||||
print("mission",mission)
|
||||
print("swath",swath)
|
||||
print("frequency",frequency)
|
||||
print("ori_prf",ori_prf)
|
||||
print("prf",prf)
|
||||
print("prf_s",prf_s)
|
||||
print("rangePixelSize",rangePixelSize)
|
||||
print("rangeSamplingRate",rangeSamplingRate)
|
||||
print("pulseLength",pulseLength)
|
||||
|
@ -638,7 +669,7 @@ class GF3_SLC(Sensor):
|
|||
####Populate instrument
|
||||
instrument = self.frame.getInstrument()
|
||||
instrument.setRadarFrequency(frequency)
|
||||
instrument.setPulseRepetitionFrequency(prf)
|
||||
instrument.setPulseRepetitionFrequency(prf_s)
|
||||
instrument.setPulseLength(pulseLength)
|
||||
instrument.setChirpSlope(pulseBandwidth/pulseLength)
|
||||
instrument.setIncidenceAngle(incidenceAngle)
|
||||
|
@ -648,7 +679,6 @@ class GF3_SLC(Sensor):
|
|||
instrument.setBeamNumber(swath)
|
||||
instrument.setPulseLength(pulseLength)
|
||||
|
||||
|
||||
#Populate Frame
|
||||
#self.frame.setSatelliteHeight(height)
|
||||
self.frame.setSensingStart(dataStartTime) # Date time object for UTC of first line
|
||||
|
@ -667,19 +697,15 @@ class GF3_SLC(Sensor):
|
|||
|
||||
|
||||
self.frame.getOrbit().setOrbitSource('EOF')
|
||||
# self.frame.getOrbit().setOrbitSource(self.product.sourceAttributes.orbitAndAttitude.orbitInformation.orbitDataFile)
|
||||
|
||||
print("======= 修改轨道代码部分: =================")
|
||||
if (self.orbitFile is None) and (self.orbitDirectory is None):
|
||||
print('orbitFile and orbitDirectory are None')
|
||||
self.extractOrbit()
|
||||
|
||||
elif (self.orbitDirectory is not None):
|
||||
print('orbitDirectory is None')
|
||||
self.orbitFile = findPreciseOrbit(self.orbitDirectory, self.frame.getOrbit().getOrbitSource(), self.frame.sensingStart.year)
|
||||
|
||||
if self.orbitFile is not None:
|
||||
print('orbitFile is None')
|
||||
self.extractPreciseOrbit(self.orbitFile, self.frame.sensingStart, self.frame.sensingStop)
|
||||
|
||||
|
||||
|
@ -689,15 +715,10 @@ class GF3_SLC(Sensor):
|
|||
# note that RS2 Doppler values are estimated at time dc.dopplerCentroidReferenceTime,
|
||||
# so the values might need to be adjusted for ISCE usage
|
||||
# added EJF 2015/08/17
|
||||
|
||||
# dc = self.product.imageGenerationParameters.dopplerCentroid
|
||||
# poly = dc.dopplerCentroidCoefficients
|
||||
poly = self.product.processInfo.DopplerCentroidCoefficients
|
||||
# need to convert units
|
||||
poly[1] = poly[1]/rangeSamplingRate
|
||||
poly[2] = poly[2]/rangeSamplingRate**2
|
||||
poly[3] = poly[3]/rangeSamplingRate**3
|
||||
poly[4] = poly[4]/rangeSamplingRate**4
|
||||
self.doppler_coeff = poly
|
||||
|
||||
# similarly save Doppler azimuth fm rate values, converting units
|
||||
|
@ -706,22 +727,12 @@ class GF3_SLC(Sensor):
|
|||
# note that RS2 Doppler values are estimated at time dc.dopplerRateReferenceTime,
|
||||
# so the values might need to be adjusted for ISCE usage
|
||||
# added EJF 2015/08/17
|
||||
|
||||
# dr = self.product.imageGenerationParameters.dopplerRateValues
|
||||
# fmpoly = dr.dopplerRateValuesCoefficients
|
||||
|
||||
fmpoly = self.product.processInfo.DopplerRateValuesCoefficients
|
||||
# need to convert units
|
||||
fmpoly[1] = fmpoly[1]/rangeSamplingRate
|
||||
fmpoly[2] = fmpoly[2]/rangeSamplingRate**2
|
||||
fmpoly[3] = fmpoly[3]/rangeSamplingRate**3
|
||||
fmpoly[4] = fmpoly[4]/rangeSamplingRate**4
|
||||
self.azfmrate_coeff = fmpoly
|
||||
|
||||
# print("poly",poly)
|
||||
# print("fmpoly",fmpoly)
|
||||
# print('------------------------------------------------------')
|
||||
|
||||
# now calculate effective PRF from the azimuth line spacing after we have the orbit info EJF 2015/08/15
|
||||
# this does not work because azimuth spacing is on ground. Instead use bandwidth ratio calculated above EJF
|
||||
# SCHvelocity = self.frame.getSchVelocity()
|
||||
|
@ -740,85 +751,46 @@ class GF3_SLC(Sensor):
|
|||
print("构建新的轨道程序代码:")
|
||||
tempOrbit = GGorbit()
|
||||
|
||||
self.frame.getOrbit().setOrbitSource('Header: ' + self.frame.getOrbit().getOrbitSource())
|
||||
# stateVectors = self.product.sourceAttributes.orbitAndAttitude.orbitInformation.stateVectors
|
||||
stateVectors = self.product.GPS.gpsParam
|
||||
|
||||
dataStartTime = self.product.imageInfo.imagingStartTime
|
||||
dataStopTime = self.product.imageInfo.imagingEndTime
|
||||
dataCenterTime = self.product.platform.CenterTime
|
||||
|
||||
startTime_s = dataStartTime.timestamp()
|
||||
stopTime_s = dataStopTime.timestamp()
|
||||
centerTime_s = dataCenterTime.timestamp()
|
||||
|
||||
num = 0
|
||||
dataStartTime = self.frame.sensingStart.timestamp()
|
||||
dataStopTime = self.frame.sensingStop.timestamp()
|
||||
time_list = []
|
||||
self.frame.getOrbit().setOrbitSource('Header: ' + self.frame.getOrbit().getOrbitSource())
|
||||
stateVectors = self.product.GPS.gpsParam
|
||||
for i in range(len(stateVectors)):
|
||||
# print(i,stateVectors[i].timeStamp)
|
||||
# tempOrbit.addvector(stateVectors[i].timeStamp.strftime("%Y-%m-%dT%H:%M:%S.%f"),
|
||||
# tempOrbit.addvector(stateVectors[i].timeStamp.strftime("%Y-%m-%dT%H:%M:%S.%fZ"),
|
||||
# stateVectors[i].xVelocity, stateVectors[i].yVelocity, stateVectors[i].zVelocity,
|
||||
# stateVectors[i].xPosition, stateVectors[i].yPosition, stateVectors[i].zPosition)
|
||||
if stateVectors[i].timeStamp>dataStartTime and stateVectors[i].timeStamp < dataStopTime:
|
||||
# tempOrbit.addvector(stateVectors[i].timeStamp.strftime("%Y-%m-%dT%H:%M:%S.%f"),
|
||||
# stateVectors[i].xVelocity, stateVectors[i].yVelocity, stateVectors[i].zVelocity,
|
||||
# stateVectors[i].xPosition, stateVectors[i].yPosition, stateVectors[i].zPosition)
|
||||
# time_list.append(stateVectors[i].timeStamp)
|
||||
time_list.append([stateVectors[i].timeStamp.timestamp(),
|
||||
stateVectors[i].xPosition, stateVectors[i].yPosition, stateVectors[i].zPosition,
|
||||
stateVectors[i].xVelocity, stateVectors[i].yVelocity, stateVectors[i].zVelocity])
|
||||
num += 1
|
||||
# sv= StateVector()
|
||||
# sv.setTime(stateVectors[i].timeStamp)
|
||||
# sv.setPosition([stateVectors[i].xPosition, stateVectors[i].yPosition, stateVectors[i].zPosition])
|
||||
# sv.setVelocity([stateVectors[i].xVelocity, stateVectors[i].yVelocity, stateVectors[i].zVelocity])
|
||||
# self.frame.getOrbit().addStateVector(sv) # 插值结果写进了轨道模型中
|
||||
# num+=1
|
||||
|
||||
model = ReconstructionSatelliteOrbit(time_list, starttime=centerTime_s)
|
||||
time_dif = ((stopTime_s + 30) - (startTime_s - 30)) / 1000
|
||||
model = ReconstructionSatelliteOrbit(time_list, starttime=dataStartTime)
|
||||
time_dif = ((dataStopTime + 10) - (dataStartTime - 10)) / 1000
|
||||
time = np.zeros((1000, 1))
|
||||
for i in range(1000):
|
||||
time[i,:]=((startTime_s - 10) + time_dif * i)
|
||||
time[i,:]=((dataStartTime - 10) + time_dif * i)
|
||||
t = time.reshape(-1)
|
||||
|
||||
statepoints = model.getSatelliteSpaceState(t)
|
||||
|
||||
# print("初始插值-----------------------------------------------------")
|
||||
# self.frame.setSensingStart(datetime.datetime.fromtimestamp(t[2]))
|
||||
# self.frame.setSensingStop(datetime.datetime.fromtimestamp(t[len(t)-3]))
|
||||
|
||||
self.frame.setSensingStart(dataStartTime)
|
||||
self.frame.setSensingStop(dataStopTime)
|
||||
|
||||
diffTime = DTUtil.timeDeltaToSeconds(self.frame.sensingStop-self.frame.sensingStart)/2.0
|
||||
sensingMid = self.frame.sensingStart + datetime.timedelta(microseconds=int(diffTime*1e6))
|
||||
self.frame.setSensingMid(sensingMid)
|
||||
|
||||
# planet = self.frame.instrument.platform.planet
|
||||
# orbExt = OrbitExtender(planet=planet)
|
||||
# orbExt.configure()
|
||||
# newOrb = orbExt.extendOrbit(tempOrbit)
|
||||
# tempOrbit.createOrbit() # 构建轨道模型
|
||||
|
||||
# newOrb=tempOrbit.getTimeOrbits(self.frame.sensingStart.strftime("%Y-%m-%dT%H:%M:%S.%f"),
|
||||
# self.frame.sensingStop.strftime("%Y-%m-%dT%H:%M:%S.%f"),
|
||||
# orbitnum=500)
|
||||
# for svect in newOrb:
|
||||
# sv= StateVector()
|
||||
# sv.setTime(svect.UTCTime)
|
||||
# sv.setPosition([svect.px,svect.py,svect.pz])
|
||||
# sv.setVelocity([svect.vx,svect.vy,svect.vz])
|
||||
# self.frame.getOrbit().addStateVector(sv) # 插值结果写进了轨道模型中
|
||||
|
||||
for i, value in zip(range(len(statepoints)), statepoints):
|
||||
sv= StateVector()
|
||||
sv.setTime(datetime.datetime.fromtimestamp(t[i]))
|
||||
sv.setPosition([value[0],value[1],value[2]])
|
||||
sv.setVelocity([value[3],value[4],value[5]])
|
||||
self.frame.getOrbit().addStateVector(sv) # 插值结果写进了轨道模型中
|
||||
# print("插值后的gps点", datetime.datetime.fromtimestamp(t[i]),value[0],value[1],value[2],value[3],value[4],value[5])
|
||||
print('Orbits list len is %d' %num)
|
||||
|
||||
# tempOrbit.createOrbit() # 构建轨道模型
|
||||
|
||||
# newOrb=tempOrbit.getTimeOrbits(self.frame.sensingStart.strftime("%Y-%m-%dT%H:%M:%S.%fZ"),
|
||||
# self.frame.sensingStop.strftime("%Y-%m-%dT%H:%M:%S.%fZ"),
|
||||
# orbitnum=500)
|
||||
# for svect in newOrb:
|
||||
# sv= StateVector()
|
||||
# sv.setTime(svect.UTCTime)
|
||||
# sv.setPosition([svect.px,svect.py,svect.pz])
|
||||
# sv.setVelocity([svect.vx,svect.vy,svect.vz])
|
||||
# self.frame.getOrbit().addStateVector(sv)
|
||||
|
||||
print('Successfully read state vectors from product XML')
|
||||
|
||||
def extractPreciseOrbit(self, orbitfile, tstart, tend):
|
||||
|
@ -877,7 +849,7 @@ class GF3_SLC(Sensor):
|
|||
lgth = self.frame.getNumberOfLines()
|
||||
# lineFlip = (self.product.imageAttributes.rasterAttributes.lineTimeOrdering.upper() == 'DECREASING')
|
||||
# pixFlip = (self.product.imageAttributes.rasterAttributes.pixelTimeOrdering.upper() == 'DECREASING')
|
||||
lineFlip = True
|
||||
lineFlip = False
|
||||
pixFlip = False
|
||||
|
||||
src = gdal.Open(self.tiff.strip(), gdal.GA_ReadOnly)
|
||||
|
@ -888,7 +860,7 @@ class GF3_SLC(Sensor):
|
|||
imag = src.GetRasterBand(2).ReadAsArray(0,0,width,lgth)
|
||||
|
||||
if (real is None) or (imag is None):
|
||||
raise Exception('Input GF3 SLC seems to not be a 2 band Int16 image.')
|
||||
raise Exception('Input GF3_SLC SLC seems to not be a 2 band Int16 image.')
|
||||
|
||||
data = real+cJ*imag
|
||||
|
||||
|
@ -938,7 +910,6 @@ class GF3_SLC(Sensor):
|
|||
t0 = self.product.processInfo.DopplerParametersReferenceTime
|
||||
poly = self.product.processInfo.DopplerCentroidCoefficients
|
||||
|
||||
|
||||
fd_mid = 0.0
|
||||
for kk in range(len(poly)):
|
||||
fd_mid += poly[kk] * (tMid - t0)**kk
|
||||
|
@ -952,10 +923,10 @@ class GF3_SLC(Sensor):
|
|||
####For roiApp
|
||||
####More accurate
|
||||
from isceobj.Util import Poly1D
|
||||
|
||||
coeffs = poly
|
||||
dr = self.frame.getInstrument().getRangePixelSize()
|
||||
rref = 0.5 * Const.c * t0
|
||||
# rref = Const.c * t0
|
||||
r0 = self.frame.getStartingRange()
|
||||
norm = 0.5*Const.c/dr
|
||||
|
||||
|
@ -963,44 +934,18 @@ class GF3_SLC(Sensor):
|
|||
for ind, val in enumerate(coeffs):
|
||||
dcoeffs.append( val / (norm**ind))
|
||||
|
||||
|
||||
poly = Poly1D.Poly1D()
|
||||
poly.initPoly(order=len(coeffs)-1)
|
||||
poly.setMean( (rref - r0)/dr - 1.0)
|
||||
poly.setCoeffs(dcoeffs)
|
||||
|
||||
# print("****" * 10)
|
||||
# print(Const.c)
|
||||
# print(rref)
|
||||
# print(dr)
|
||||
# print(dcoeffs)
|
||||
# print(r0)
|
||||
# print("****" * 10)
|
||||
poly = Poly1D.Poly1D()
|
||||
poly.initPoly(order=len(coeffs)-1)
|
||||
poly.setMean( (rref - r0)/dr - 1.0)
|
||||
poly.setCoeffs(dcoeffs)
|
||||
|
||||
print('getNumberOfSamples', self.frame.getNumberOfSamples())
|
||||
pix = np.linspace(0, self.frame.getNumberOfSamples(), num=len(coeffs)+1)
|
||||
|
||||
evals = poly(pix)
|
||||
fit = np.polyfit(pix,evals, len(coeffs)-1)
|
||||
self.frame._dopplerVsPixel = list(fit[::-1])
|
||||
# print("---- radar ------------------------------------------print")
|
||||
# print("t0",t0)
|
||||
# print("****" * 10)
|
||||
# print('lightspeed',Const.c)
|
||||
# print('rref',rref)
|
||||
# print('dr',dr)
|
||||
# print('dcoeff',dcoeffs)
|
||||
# print('r0',r0)
|
||||
# print("****" * 10)
|
||||
# print('pix',pix)
|
||||
# print('evals',evals)
|
||||
# print('fit',fit)
|
||||
# print('Doppler Fit: ', fit[::-1])
|
||||
# print('---------------------------------------------------')
|
||||
|
||||
|
||||
return quadratic
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,30 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
|
||||
<assemblyIdentity type="win32" name="AtmosphericDelayMain" processorArchitecture="amd64" version="1.0.0.0"/>
|
||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<security>
|
||||
<requestedPrivileges>
|
||||
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
|
||||
</requestedPrivileges>
|
||||
</security>
|
||||
</trustInfo>
|
||||
<dependency>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" language="*" processorArchitecture="*" version="6.0.0.0" publicKeyToken="6595b64144ccf1df"/>
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
<application>
|
||||
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
|
||||
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
|
||||
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
|
||||
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
|
||||
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
|
||||
</application>
|
||||
</compatibility>
|
||||
<application xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<windowsSettings>
|
||||
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
|
||||
</windowsSettings>
|
||||
</application>
|
||||
</assembly>
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,249 +0,0 @@
|
|||
('D:\\Anaconda\\envs\\micro\\tcl\\tk8.6',
|
||||
'tk',
|
||||
['demos', '*.lib', 'tkConfig.sh'],
|
||||
'DATA',
|
||||
[('tk\\bgerror.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\bgerror.tcl',
|
||||
'DATA'),
|
||||
('tk\\button.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\button.tcl',
|
||||
'DATA'),
|
||||
('tk\\choosedir.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\choosedir.tcl',
|
||||
'DATA'),
|
||||
('tk\\clrpick.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\clrpick.tcl',
|
||||
'DATA'),
|
||||
('tk\\comdlg.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\comdlg.tcl',
|
||||
'DATA'),
|
||||
('tk\\console.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\console.tcl',
|
||||
'DATA'),
|
||||
('tk\\dialog.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\dialog.tcl',
|
||||
'DATA'),
|
||||
('tk\\entry.tcl', 'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\entry.tcl', 'DATA'),
|
||||
('tk\\focus.tcl', 'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\focus.tcl', 'DATA'),
|
||||
('tk\\fontchooser.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\fontchooser.tcl',
|
||||
'DATA'),
|
||||
('tk\\iconlist.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\iconlist.tcl',
|
||||
'DATA'),
|
||||
('tk\\icons.tcl', 'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\icons.tcl', 'DATA'),
|
||||
('tk\\license.terms',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\license.terms',
|
||||
'DATA'),
|
||||
('tk\\listbox.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\listbox.tcl',
|
||||
'DATA'),
|
||||
('tk\\megawidget.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\megawidget.tcl',
|
||||
'DATA'),
|
||||
('tk\\menu.tcl', 'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\menu.tcl', 'DATA'),
|
||||
('tk\\mkpsenc.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\mkpsenc.tcl',
|
||||
'DATA'),
|
||||
('tk\\msgbox.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\msgbox.tcl',
|
||||
'DATA'),
|
||||
('tk\\obsolete.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\obsolete.tcl',
|
||||
'DATA'),
|
||||
('tk\\optMenu.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\optMenu.tcl',
|
||||
'DATA'),
|
||||
('tk\\palette.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\palette.tcl',
|
||||
'DATA'),
|
||||
('tk\\panedwindow.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\panedwindow.tcl',
|
||||
'DATA'),
|
||||
('tk\\pkgIndex.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\pkgIndex.tcl',
|
||||
'DATA'),
|
||||
('tk\\safetk.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\safetk.tcl',
|
||||
'DATA'),
|
||||
('tk\\scale.tcl', 'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\scale.tcl', 'DATA'),
|
||||
('tk\\scrlbar.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\scrlbar.tcl',
|
||||
'DATA'),
|
||||
('tk\\spinbox.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\spinbox.tcl',
|
||||
'DATA'),
|
||||
('tk\\tclIndex', 'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\tclIndex', 'DATA'),
|
||||
('tk\\tearoff.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\tearoff.tcl',
|
||||
'DATA'),
|
||||
('tk\\text.tcl', 'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\text.tcl', 'DATA'),
|
||||
('tk\\tk.tcl', 'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\tk.tcl', 'DATA'),
|
||||
('tk\\tkfbox.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\tkfbox.tcl',
|
||||
'DATA'),
|
||||
('tk\\unsupported.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\unsupported.tcl',
|
||||
'DATA'),
|
||||
('tk\\xmfbox.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\xmfbox.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\altTheme.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\altTheme.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\aquaTheme.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\aquaTheme.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\button.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\button.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\clamTheme.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\clamTheme.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\classicTheme.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\classicTheme.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\combobox.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\combobox.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\cursors.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\cursors.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\defaults.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\defaults.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\entry.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\entry.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\fonts.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\fonts.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\menubutton.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\menubutton.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\notebook.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\notebook.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\panedwindow.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\panedwindow.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\progress.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\progress.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\scale.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\scale.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\scrollbar.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\scrollbar.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\sizegrip.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\sizegrip.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\spinbox.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\spinbox.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\treeview.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\treeview.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\ttk.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\ttk.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\utils.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\utils.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\vistaTheme.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\vistaTheme.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\winTheme.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\winTheme.tcl',
|
||||
'DATA'),
|
||||
('tk\\ttk\\xpTheme.tcl',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\ttk\\xpTheme.tcl',
|
||||
'DATA'),
|
||||
('tk\\msgs\\cs.msg',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\msgs\\cs.msg',
|
||||
'DATA'),
|
||||
('tk\\msgs\\da.msg',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\msgs\\da.msg',
|
||||
'DATA'),
|
||||
('tk\\msgs\\de.msg',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\msgs\\de.msg',
|
||||
'DATA'),
|
||||
('tk\\msgs\\el.msg',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\msgs\\el.msg',
|
||||
'DATA'),
|
||||
('tk\\msgs\\en.msg',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\msgs\\en.msg',
|
||||
'DATA'),
|
||||
('tk\\msgs\\en_gb.msg',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\msgs\\en_gb.msg',
|
||||
'DATA'),
|
||||
('tk\\msgs\\eo.msg',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\msgs\\eo.msg',
|
||||
'DATA'),
|
||||
('tk\\msgs\\es.msg',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\msgs\\es.msg',
|
||||
'DATA'),
|
||||
('tk\\msgs\\fr.msg',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\msgs\\fr.msg',
|
||||
'DATA'),
|
||||
('tk\\msgs\\hu.msg',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\msgs\\hu.msg',
|
||||
'DATA'),
|
||||
('tk\\msgs\\it.msg',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\msgs\\it.msg',
|
||||
'DATA'),
|
||||
('tk\\msgs\\nl.msg',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\msgs\\nl.msg',
|
||||
'DATA'),
|
||||
('tk\\msgs\\pl.msg',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\msgs\\pl.msg',
|
||||
'DATA'),
|
||||
('tk\\msgs\\pt.msg',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\msgs\\pt.msg',
|
||||
'DATA'),
|
||||
('tk\\msgs\\ru.msg',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\msgs\\ru.msg',
|
||||
'DATA'),
|
||||
('tk\\msgs\\sv.msg',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\msgs\\sv.msg',
|
||||
'DATA'),
|
||||
('tk\\images\\logo.eps',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\images\\logo.eps',
|
||||
'DATA'),
|
||||
('tk\\images\\logo100.gif',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\images\\logo100.gif',
|
||||
'DATA'),
|
||||
('tk\\images\\logo64.gif',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\images\\logo64.gif',
|
||||
'DATA'),
|
||||
('tk\\images\\logoLarge.gif',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\images\\logoLarge.gif',
|
||||
'DATA'),
|
||||
('tk\\images\\logoMed.gif',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\images\\logoMed.gif',
|
||||
'DATA'),
|
||||
('tk\\images\\pwrdLogo.eps',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\images\\pwrdLogo.eps',
|
||||
'DATA'),
|
||||
('tk\\images\\pwrdLogo100.gif',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\images\\pwrdLogo100.gif',
|
||||
'DATA'),
|
||||
('tk\\images\\pwrdLogo150.gif',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\images\\pwrdLogo150.gif',
|
||||
'DATA'),
|
||||
('tk\\images\\pwrdLogo175.gif',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\images\\pwrdLogo175.gif',
|
||||
'DATA'),
|
||||
('tk\\images\\pwrdLogo200.gif',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\images\\pwrdLogo200.gif',
|
||||
'DATA'),
|
||||
('tk\\images\\pwrdLogo75.gif',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\images\\pwrdLogo75.gif',
|
||||
'DATA'),
|
||||
('tk\\images\\README',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\images\\README',
|
||||
'DATA'),
|
||||
('tk\\images\\tai-ku.gif',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tk8.6\\images\\tai-ku.gif',
|
||||
'DATA')])
|
|
@ -1,19 +0,0 @@
|
|||
('D:\\Anaconda\\envs\\micro\\tcl\\tcl8.6\\..\\tcl8',
|
||||
'tcl8',
|
||||
[],
|
||||
'DATA',
|
||||
[('tcl8\\8.6\\http-2.9.0.tm',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tcl8.6\\..\\tcl8\\8.6\\http-2.9.0.tm',
|
||||
'DATA'),
|
||||
('tcl8\\8.5\\msgcat-1.6.1.tm',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tcl8.6\\..\\tcl8\\8.5\\msgcat-1.6.1.tm',
|
||||
'DATA'),
|
||||
('tcl8\\8.5\\tcltest-2.5.0.tm',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tcl8.6\\..\\tcl8\\8.5\\tcltest-2.5.0.tm',
|
||||
'DATA'),
|
||||
('tcl8\\8.4\\platform-1.0.14.tm',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tcl8.6\\..\\tcl8\\8.4\\platform-1.0.14.tm',
|
||||
'DATA'),
|
||||
('tcl8\\8.4\\platform\\shell-1.1.4.tm',
|
||||
'D:\\Anaconda\\envs\\micro\\tcl\\tcl8.6\\..\\tcl8\\8.4\\platform\\shell-1.1.4.tm',
|
||||
'DATA')])
|
|
@ -1,620 +0,0 @@
|
|||
|
||||
This file lists modules PyInstaller was not able to find. This does not
|
||||
necessarily mean this module is required for running you program. Python and
|
||||
Python 3rd-party packages include a lot of conditional or optional modules. For
|
||||
example the module 'ntpath' only exists on Windows, whereas the module
|
||||
'posixpath' only exists on Posix systems.
|
||||
|
||||
Types if import:
|
||||
* top-level: imported at the top-level - look at these first
|
||||
* conditional: imported within an if-statement
|
||||
* delayed: imported from within a function
|
||||
* optional: imported within a try-except-statement
|
||||
|
||||
IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for
|
||||
yourself tracking down the missing module. Thanks!
|
||||
|
||||
missing module named 'org.python' - imported by copy (optional), xml.sax (delayed, conditional), setuptools.sandbox (conditional)
|
||||
missing module named 'win32com.gen_py' - imported by win32com (conditional, optional), D:\ANACONDA\envs\micro\Lib\site-packages\PyInstaller\hooks\rthooks\pyi_rth_win32comgenpy.py (top-level)
|
||||
missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional), zipimport (top-level)
|
||||
excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional), zipimport (top-level), PyInstaller.loader.pyimod02_archive (delayed)
|
||||
missing module named grp - imported by shutil (optional), tarfile (optional), pathlib (delayed), distutils.archive_util (optional)
|
||||
missing module named pwd - imported by posixpath (delayed, conditional), shutil (optional), tarfile (optional), pathlib (delayed, conditional, optional), http.server (delayed, optional), webbrowser (delayed), netrc (delayed, conditional), getpass (delayed), distutils.util (delayed, conditional, optional), distutils.archive_util (optional), psutil (optional)
|
||||
missing module named urllib.urlretrieve - imported by urllib (conditional, optional), pygments.lexers._php_builtins (conditional, optional)
|
||||
missing module named urllib.FancyURLopener - imported by urllib (conditional, optional), pygments.lexers._sourcemod_builtins (conditional, optional)
|
||||
missing module named urllib.urlopen - imported by urllib (delayed, optional), lxml.html (delayed, optional), pygments.lexers._postgres_builtins (conditional, optional), pygments.lexers._lua_builtins (conditional, optional)
|
||||
missing module named urllib.getproxies_environment - imported by urllib (conditional), requests.compat (conditional)
|
||||
missing module named urllib.proxy_bypass_environment - imported by urllib (conditional), requests.compat (conditional)
|
||||
missing module named urllib.proxy_bypass - imported by urllib (conditional), requests.compat (conditional)
|
||||
missing module named urllib.getproxies - imported by urllib (conditional), requests.compat (conditional)
|
||||
missing module named urllib.unquote_plus - imported by urllib (conditional), requests.compat (conditional)
|
||||
missing module named urllib.quote_plus - imported by urllib (conditional), requests.compat (conditional), prometheus_client.exposition (optional)
|
||||
missing module named urllib.unquote - imported by urllib (conditional), requests.compat (conditional)
|
||||
missing module named urllib.quote - imported by urllib (conditional), requests.compat (conditional), send2trash.plat_other (optional)
|
||||
missing module named urllib.urlencode - imported by urllib (delayed, conditional, optional), IPython.lib.display (delayed, conditional, optional), requests.compat (conditional), lxml.html (delayed, optional)
|
||||
missing module named urllib.pathname2url - imported by urllib (conditional), PyInstaller.lib.modulegraph._compat (conditional)
|
||||
missing module named posix - imported by os (conditional, optional), shutil (conditional), importlib._bootstrap_external (conditional)
|
||||
missing module named resource - imported by posix (top-level), test.support (optional), psutil._pslinux (optional), IPython.utils.timing (optional), notebook.notebookapp (optional), prometheus_client.process_collector (optional), distributed.utils (optional), distributed.system (delayed, optional), fsspec.asyn (optional)
|
||||
missing module named _posixsubprocess - imported by subprocess (optional), multiprocessing.util (delayed)
|
||||
missing module named _posixshmem - imported by multiprocessing.resource_tracker (conditional), multiprocessing.shared_memory (conditional)
|
||||
missing module named multiprocessing.set_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
|
||||
missing module named multiprocessing.get_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
|
||||
missing module named multiprocessing.get_context - imported by multiprocessing (top-level), multiprocessing.pool (top-level), multiprocessing.managers (top-level), multiprocessing.sharedctypes (top-level)
|
||||
missing module named multiprocessing.TimeoutError - imported by multiprocessing (top-level), multiprocessing.pool (top-level)
|
||||
missing module named fcntl - imported by xmlrpc.server (optional), psutil._compat (delayed, optional), zmq.eventloop.minitornado.platform.posix (top-level), distributed.locket (optional), locket (optional), fasteners.process_lock (conditional)
|
||||
missing module named termios - imported by tty (top-level), getpass (optional), psutil._compat (delayed, optional), prompt_toolkit.input.vt100 (top-level), IPython.core.page (delayed, optional), click._termui_impl (conditional)
|
||||
missing module named vms_lib - imported by platform (delayed, conditional, optional)
|
||||
missing module named 'java.lang' - imported by platform (delayed, optional), xml.sax._exceptions (conditional)
|
||||
missing module named java - imported by platform (delayed)
|
||||
missing module named _winreg - imported by platform (delayed, optional), requests.utils (delayed, conditional, optional), nbconvert.preprocessors.svg2pdf (conditional, optional), qtpy.py3compat (conditional, optional), pkg_resources._vendor.appdirs (delayed, conditional), pygments.formatters.img (optional)
|
||||
missing module named _scproxy - imported by urllib.request (conditional)
|
||||
missing module named multiprocessing.BufferTooShort - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
|
||||
missing module named multiprocessing.AuthenticationError - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
|
||||
missing module named multiprocessing.Pool - imported by multiprocessing (delayed, conditional), scipy._lib._util (delayed, conditional)
|
||||
missing module named multiprocessing.Process - imported by multiprocessing (top-level), jupyter_client.ssh.tunnel (top-level), partd.zmq (top-level)
|
||||
missing module named asyncio.DefaultEventLoopPolicy - imported by asyncio (delayed, conditional), asyncio.events (delayed, conditional)
|
||||
missing module named console - imported by pyreadline.console.ansi (conditional)
|
||||
missing module named startup - imported by pyreadline.keysyms.common (conditional), pyreadline.keysyms.keysyms (conditional)
|
||||
missing module named sets - imported by pyreadline.keysyms.common (optional), pytz.tzinfo (optional)
|
||||
missing module named System - imported by pyreadline.clipboard.ironpython_clipboard (top-level), pyreadline.keysyms.ironpython_keysyms (top-level), pyreadline.console.ironpython_console (top-level), pyreadline.rlmain (conditional), IPython.utils._process_cli (top-level)
|
||||
missing module named StringIO - imported by pyreadline.py3k_compat (conditional), PyInstaller.lib.modulegraph._compat (conditional), PyInstaller.lib.modulegraph.zipio (conditional), urllib3.packages.six (conditional), requests.compat (conditional), six (conditional), qtpy.py3compat (conditional, optional), Cython.Compiler.Annotate (optional), partd.compatibility (conditional), xmltodict (optional)
|
||||
missing module named IronPythonConsole - imported by pyreadline.console.ironpython_console (top-level)
|
||||
missing module named clr - imported by pyreadline.clipboard.ironpython_clipboard (top-level), pyreadline.console.ironpython_console (top-level), IPython.utils._process_cli (top-level)
|
||||
missing module named org - imported by pickle (optional)
|
||||
missing module named pyimod03_importers - imported by D:\ANACONDA\envs\micro\Lib\site-packages\PyInstaller\hooks\rthooks\pyi_rth_pkgutil.py (top-level), D:\ANACONDA\envs\micro\Lib\site-packages\PyInstaller\hooks\rthooks\pyi_rth_pkgres.py (top-level)
|
||||
missing module named _manylinux - imported by pkg_resources._vendor.packaging.tags (delayed, optional), packaging._manylinux (delayed, optional), setuptools._vendor.packaging.tags (delayed, optional)
|
||||
missing module named tputil - imported by jinja2.debug (conditional, optional)
|
||||
missing module named railroad - imported by pyparsing.diagram (top-level)
|
||||
missing module named _uuid - imported by uuid (optional)
|
||||
missing module named __builtin__ - imported by osgeo.gdal (optional), osgeo.gdalconst (optional), osgeo.ogr (optional), osgeo.osr (optional), osgeo.gdal_array (optional), ipython_genutils.py3compat (conditional), debugpy.common.compat (conditional), qtpy.py3compat (conditional), Cython.Shadow (optional), Cython.Utils (optional), Cython.Compiler.Main (optional), Cython.Compiler.Errors (optional), Cython.Compiler.Symtab (optional), Cython.Compiler.Code (optional), Cython.Compiler.Optimize (optional), Cython.Compiler.ExprNodes (optional), Cython.Distutils.old_build_ext (optional), Cython.Build.Inline (delayed, optional), pkg_resources._vendor.pyparsing (conditional), setuptools._vendor.pyparsing (conditional)
|
||||
missing module named ordereddict - imported by pkg_resources._vendor.pyparsing (optional), setuptools._vendor.pyparsing (optional)
|
||||
missing module named 'pkg_resources.extern.pyparsing' - imported by pkg_resources._vendor.packaging.markers (top-level), pkg_resources._vendor.packaging.requirements (top-level)
|
||||
missing module named 'com.sun' - imported by pkg_resources._vendor.appdirs (delayed, conditional, optional)
|
||||
missing module named com - imported by pkg_resources._vendor.appdirs (delayed)
|
||||
missing module named pkg_resources.extern.packaging - imported by pkg_resources.extern (top-level), pkg_resources (top-level)
|
||||
missing module named pkg_resources.extern.appdirs - imported by pkg_resources.extern (top-level), pkg_resources (top-level)
|
||||
missing module named cStringIO - imported by cPickle (top-level), cffi.ffiplatform (optional), Cython.StringIOTree (optional), xmltodict (optional)
|
||||
missing module named copy_reg - imported by cPickle (top-level), cStringIO (top-level), tblib.pickling_support (conditional)
|
||||
missing module named defusedexpat - imported by xmltodict (optional)
|
||||
missing module named IPython.TryNext - imported by IPython (optional), h5py.ipy_completer (optional)
|
||||
missing module named IPython.generics - imported by IPython (optional), h5py.ipy_completer (optional)
|
||||
missing module named IPython.ipapi - imported by IPython (delayed, conditional, optional), h5py (delayed, conditional, optional), h5py.ipy_completer (optional)
|
||||
missing module named 'IPython.kernel.zmq' - imported by IPython (delayed)
|
||||
missing module named traitlets.config.Application - imported by traitlets.config (delayed, conditional), traitlets.log (delayed, conditional), ipykernel.kernelspec (top-level), notebook.base.handlers (top-level)
|
||||
missing module named IPython.utils.warn - imported by IPython.utils (delayed), IPython.testing.tools (delayed)
|
||||
missing module named _curses - imported by curses (top-level), curses.has_key (top-level)
|
||||
missing module named 'tornado.platform.select' - imported by zmq.eventloop.minitornado.ioloop (delayed)
|
||||
missing module named 'tornado.platform.kqueue' - imported by zmq.eventloop.minitornado.ioloop (delayed, conditional)
|
||||
missing module named 'tornado.platform.epoll' - imported by zmq.eventloop.minitornado.ioloop (delayed, conditional)
|
||||
missing module named monotime - imported by zmq.eventloop.minitornado.platform.auto (optional)
|
||||
missing module named thread - imported by cffi.lock (conditional, optional), cffi.cparser (conditional, optional), zmq.eventloop.minitornado.ioloop (optional), qtpy.py3compat (conditional), sortedcontainers.sortedlist (conditional, optional)
|
||||
missing module named 'tornado.stack_context' - imported by zmq.eventloop.zmqstream (optional)
|
||||
missing module named zmq.ETERM - imported by zmq (delayed), zmq.error (delayed, conditional), zmq.eventloop._deprecated (top-level)
|
||||
missing module named zmq.ZMQError - imported by zmq (delayed, optional), zmq.sugar.attrsettr (delayed, optional), zmq.eventloop._deprecated (top-level)
|
||||
missing module named 'gi.repository' - imported by ipykernel.gui.gtk3embed (top-level), send2trash.plat_gio (top-level)
|
||||
missing module named gi - imported by matplotlib.cbook (delayed, conditional), ipykernel.gui.gtk3embed (top-level)
|
||||
missing module named gtk - imported by ipykernel.gui.gtkembed (top-level)
|
||||
missing module named gobject - imported by ipykernel.gui.gtkembed (top-level)
|
||||
missing module named wx - imported by IPython.lib.guisupport (delayed), ipykernel.eventloops (delayed)
|
||||
missing module named PySide6 - imported by IPython.external.qt_loaders (delayed)
|
||||
missing module named PySide2 - imported by IPython.external.qt_loaders (delayed), qtpy (conditional, optional)
|
||||
missing module named PyQt6 - imported by IPython.external.qt_loaders (delayed)
|
||||
missing module named sip - imported by IPython.external.qt_loaders (delayed, optional), qtpy (conditional, optional)
|
||||
missing module named ipyparallel - imported by ipykernel.zmqshell (delayed, conditional)
|
||||
missing module named pexpect - imported by IPython.utils._process_posix (top-level), jupyter_client.ssh.tunnel (optional)
|
||||
missing module named pygments.formatters.HtmlFormatter - imported by pygments.formatters (delayed), IPython.lib.display (delayed), nbconvert.filters.highlight (delayed), nbconvert.filters.markdown_mistune (top-level), nbconvert.preprocessors.csshtmlheader (delayed), IPython.core.oinspect (top-level), Cython.Compiler.Annotate (delayed, optional)
|
||||
missing module named pygments.formatters.LatexFormatter - imported by pygments.formatters (delayed), IPython.lib.display (delayed), nbconvert.filters.highlight (delayed), nbconvert.preprocessors.latex (delayed)
|
||||
missing module named pygments.lexers.PythonLexer - imported by pygments.lexers (top-level), IPython.lib.lexers (top-level), IPython.core.oinspect (top-level)
|
||||
missing module named pygments.lexers.CythonLexer - imported by pygments.lexers (delayed, optional), Cython.Compiler.Annotate (delayed, optional)
|
||||
missing module named pygments.lexers.TexLexer - imported by pygments.lexers (top-level), IPython.lib.lexers (top-level)
|
||||
missing module named pygments.lexers.Python3Lexer - imported by pygments.lexers (top-level), IPython.lib.lexers (top-level)
|
||||
missing module named pygments.lexers.PerlLexer - imported by pygments.lexers (top-level), IPython.lib.lexers (top-level)
|
||||
missing module named pygments.lexers.RubyLexer - imported by pygments.lexers (top-level), IPython.lib.lexers (top-level)
|
||||
missing module named pygments.lexers.JavascriptLexer - imported by pygments.lexers (top-level), IPython.lib.lexers (top-level)
|
||||
missing module named pygments.lexers.HtmlLexer - imported by pygments.lexers (top-level), IPython.lib.lexers (top-level)
|
||||
missing module named pygments.lexers.BashLexer - imported by pygments.lexers (top-level), IPython.lib.lexers (top-level)
|
||||
missing module named chardet - imported by requests.compat (optional), requests (optional), requests.packages (optional), pygments.lexer (delayed, conditional, optional)
|
||||
missing module named ctags - imported by pygments.formatters.html (optional)
|
||||
missing module named PIL._imagingagg - imported by PIL (delayed, conditional, optional), PIL.ImageDraw (delayed, conditional, optional)
|
||||
missing module named trio - imported by ipykernel.trio_runner (top-level), IPython.core.async_helpers (delayed)
|
||||
missing module named repr - imported by IPython.core.debugger (delayed, optional), qtpy.py3compat (conditional)
|
||||
missing module named _subprocess - imported by jupyter_client.launcher (delayed, conditional, optional), ipykernel.parentpoller (delayed, optional)
|
||||
missing module named netifaces - imported by jupyter_client.localinterfaces (delayed)
|
||||
missing module named jupyter_client.write_connection_file - imported by jupyter_client (top-level), ipykernel.connect (top-level), ipykernel.kernelapp (top-level), distributed._ipython_utils (top-level)
|
||||
missing module named numpy.frombuffer - imported by numpy (delayed), ipykernel.pickleutil (delayed), numpy.ctypeslib (top-level), scipy.misc.common (top-level), scipy.io.netcdf (top-level)
|
||||
missing module named numpy.ascontiguousarray - imported by numpy (delayed), ipykernel.pickleutil (delayed)
|
||||
missing module named pickle5 - imported by numpy.compat.py3k (optional), cloudpickle.compat (conditional, optional), distributed.protocol.pickle (conditional, optional), distributed.scheduler (conditional, optional)
|
||||
missing module named dill - imported by ipykernel.pickleutil (delayed)
|
||||
missing module named 'ipyparallel.serialize' - imported by ipykernel.serialize (optional), ipykernel.pickleutil (top-level)
|
||||
missing module named ipykernel.connect_qtconsole - imported by ipykernel (top-level), ipykernel.zmqshell (top-level)
|
||||
missing module named ipykernel.get_connection_info - imported by ipykernel (top-level), ipykernel.zmqshell (top-level)
|
||||
missing module named ipykernel.get_connection_file - imported by ipykernel (top-level), ipykernel.zmqshell (top-level)
|
||||
missing module named appnope - imported by ipykernel.ipkernel (delayed, conditional)
|
||||
missing module named '_pydevd_bundle.pydevd_api' - imported by ipykernel.debugger (delayed)
|
||||
missing module named '_pydevd_bundle.pydevd_suspended_frames' - imported by ipykernel.debugger (top-level)
|
||||
missing module named _pydevd_bundle - imported by debugpy._vendored.force_pydevd (top-level), ipykernel.debugger (top-level)
|
||||
missing module named pydevd_file_utils - imported by debugpy.server.api (top-level)
|
||||
missing module named '_pydevd_bundle.pydevd_constants' - imported by debugpy.server.api (top-level)
|
||||
missing module named Queue - imported by urllib3.util.queue (conditional), debugpy.common.compat (conditional), partd.compatibility (conditional)
|
||||
missing module named pydevd - imported by debugpy._vendored.force_pydevd (top-level), debugpy.server.api (top-level)
|
||||
missing module named six.moves.range - imported by six.moves (top-level), dateutil.rrule (top-level)
|
||||
runtime module named six.moves - imported by dateutil.tz.tz (top-level), dateutil.tz._factories (top-level), dateutil.tz.win (top-level), dateutil.rrule (top-level), h5py._hl.selections (top-level), h5py._hl.dataset (top-level)
|
||||
missing module named six.moves.xrange - imported by six.moves (top-level), h5py._hl.selections (top-level), h5py._hl.dataset (top-level)
|
||||
missing module named dateutil.tz.tzfile - imported by dateutil.tz (top-level), dateutil.zoneinfo (top-level)
|
||||
missing module named backports.lzma - imported by backports (optional), numcodecs.lzma (optional)
|
||||
missing module named gevent - imported by zmq.green.poll (top-level), zmq.green.core (top-level)
|
||||
missing module named 'gevent.core' - imported by zmq.green.core (delayed, optional)
|
||||
missing module named 'gevent.hub' - imported by zmq.green.core (top-level)
|
||||
missing module named 'gevent.event' - imported by zmq.green.core (top-level)
|
||||
missing module named zmq.EVENTS - imported by zmq (top-level), zmq._future (top-level)
|
||||
missing module named zmq.backend.zmq_errno - imported by zmq.backend (delayed), zmq.error (delayed, conditional)
|
||||
missing module named zmq.backend.strerror - imported by zmq.backend (delayed), zmq.error (delayed)
|
||||
missing module named zmq.backend.zmq_version_info - imported by zmq.backend (top-level), zmq.sugar.version (top-level)
|
||||
missing module named zmq.backend.Frame - imported by zmq.backend (top-level), zmq.sugar.frame (top-level), zmq.sugar.tracker (top-level)
|
||||
missing module named zmq.backend.Socket - imported by zmq.backend (top-level), zmq.sugar.socket (top-level)
|
||||
missing module named zmq.backend.zmq_poll - imported by zmq.backend (top-level), zmq.sugar.poll (top-level)
|
||||
missing module named pyczmq - imported by zmq.sugar.context (delayed)
|
||||
missing module named zmq.backend.Context - imported by zmq.backend (top-level), zmq.sugar.context (top-level)
|
||||
missing module named zmq.backend.has - imported by zmq.backend (top-level), zmq.sugar.constants (top-level)
|
||||
missing module named zmq.backend.constants - imported by zmq.backend (top-level), zmq.sugar.constants (top-level)
|
||||
missing module named zmq.zmq_version_info - imported by zmq (delayed, conditional), zmq.error (delayed, conditional)
|
||||
missing module named zmq.zmq_version - imported by zmq (delayed, conditional), zmq.error (delayed, conditional)
|
||||
missing module named zmq.EAGAIN - imported by zmq (delayed), zmq.error (delayed, conditional)
|
||||
missing module named zmq.libzmq - imported by zmq (delayed, optional)
|
||||
missing module named paramiko - imported by jupyter_client.ssh.tunnel (optional), distributed.deploy.old_ssh (delayed)
|
||||
missing module named async_generator - imported by nbclient.client (optional)
|
||||
missing module named pysqlite2 - imported by IPython.core.history (optional), nbformat.sign (optional), notebook.services.sessions.sessionmanager (optional)
|
||||
missing module named fastjsonschema - imported by nbformat.json_compat (optional)
|
||||
missing module named Cookie - imported by requests.compat (conditional)
|
||||
missing module named cookielib - imported by requests.compat (conditional)
|
||||
missing module named urllib2 - imported by requests.compat (conditional), seaborn.miscplot (delayed, optional), prometheus_client.exposition (optional), cartopy.io (conditional), lxml.html.html5parser (optional), lxml.ElementInclude (optional)
|
||||
missing module named urlparse - imported by requests.compat (conditional), lxml.html (optional), prometheus_client.exposition (optional), terminado.websocket (optional), lxml.html.html5parser (optional), lxml.ElementInclude (optional)
|
||||
missing module named simplejson - imported by osgeo.ogr (delayed, optional), requests.compat (conditional, optional)
|
||||
missing module named brotli - imported by urllib3.util.request (optional), urllib3.response (optional), fontTools.ttLib.woff2 (optional)
|
||||
missing module named "'urllib3.packages.six.moves.urllib'.parse" - imported by urllib3.request (top-level), urllib3.poolmanager (top-level)
|
||||
runtime module named urllib3.packages.six.moves - imported by http.client (top-level), urllib3.util.response (top-level), urllib3.connectionpool (top-level), 'urllib3.packages.six.moves.urllib' (top-level), urllib3.util.queue (top-level)
|
||||
missing module named socks - imported by urllib3.contrib.socks (optional)
|
||||
missing module named _dummy_threading - imported by dummy_threading (optional)
|
||||
missing module named 'typing.io' - imported by importlib.resources (top-level)
|
||||
missing module named cryptography - imported by urllib3.contrib.pyopenssl (top-level), requests (conditional, optional), distributed.security (delayed, optional)
|
||||
missing module named 'OpenSSL.crypto' - imported by urllib3.contrib.pyopenssl (delayed)
|
||||
missing module named 'cryptography.x509' - imported by urllib3.contrib.pyopenssl (delayed, optional), distributed.security (delayed, optional)
|
||||
missing module named 'cryptography.hazmat' - imported by urllib3.contrib.pyopenssl (top-level), distributed.security (delayed, optional)
|
||||
missing module named OpenSSL - imported by urllib3.contrib.pyopenssl (top-level)
|
||||
missing module named unicodedata2 - imported by charset_normalizer.utils (optional), fontTools.unicode (delayed, optional)
|
||||
missing module named UserDict - imported by attr._compat (conditional), pytz.lazy (optional), qtpy.py3compat (conditional)
|
||||
missing module named isoduration - imported by jsonschema._format (top-level)
|
||||
missing module named uri_template - imported by jsonschema._format (top-level)
|
||||
missing module named jsonpointer - imported by jsonschema._format (top-level)
|
||||
missing module named webcolors - imported by jsonschema._format (top-level)
|
||||
missing module named rfc3339_validator - imported by jsonschema._format (top-level)
|
||||
missing module named rfc3986_validator - imported by jsonschema._format (optional)
|
||||
missing module named rfc3987 - imported by jsonschema._format (optional)
|
||||
missing module named fqdn - imported by jsonschema._format (top-level)
|
||||
missing module named SocketServer - imported by prometheus_client.exposition (optional)
|
||||
missing module named BaseHTTPServer - imported by prometheus_client.exposition (optional)
|
||||
missing module named json_logging - imported by notebook.notebookapp (delayed, conditional, optional)
|
||||
missing module named ptyprocess - imported by terminado.management (optional)
|
||||
missing module named Foundation - imported by pandas.io.clipboard (delayed, conditional, optional), send2trash.plat_osx_pyobjc (top-level)
|
||||
missing module named xmlrpclib - imported by defusedxml.xmlrpc (conditional)
|
||||
missing module named 'pyppeteer.util' - imported by nbconvert.exporters.webpdf (delayed, optional)
|
||||
missing module named pyppeteer - imported by nbconvert.exporters.webpdf (delayed, optional)
|
||||
missing module named pathlib2 - imported by pickleshare (optional), testpath.asserts (optional)
|
||||
missing module named _typeshed - imported by prompt_toolkit.eventloop.inputhook (conditional)
|
||||
missing module named 'backports.functools_lru_cache' - imported by wcwidth.wcwidth (optional)
|
||||
missing module named black - imported by IPython.terminal.interactiveshell (delayed)
|
||||
missing module named prompt_toolkit.filters.is_done - imported by prompt_toolkit.filters (top-level), prompt_toolkit.layout.menus (top-level), prompt_toolkit.widgets.base (top-level), prompt_toolkit.shortcuts.progress_bar.base (top-level), prompt_toolkit.shortcuts.prompt (top-level)
|
||||
missing module named 'prompt_toolkit.key_binding.key_bindings.vi' - imported by prompt_toolkit.key_binding.vi_state (conditional)
|
||||
missing module named prompt_toolkit.filters.is_searching - imported by prompt_toolkit.filters (top-level), prompt_toolkit.search (top-level), prompt_toolkit.key_binding.bindings.search (top-level), prompt_toolkit.key_binding.bindings.vi (top-level)
|
||||
missing module named prompt_toolkit.filters.vi_mode - imported by prompt_toolkit.filters (top-level), prompt_toolkit.document (top-level), prompt_toolkit.key_binding.bindings.page_navigation (top-level), prompt_toolkit.widgets.toolbars (top-level), IPython.terminal.shortcuts (top-level)
|
||||
missing module named prompt_toolkit.filters.has_completions - imported by prompt_toolkit.filters (top-level), prompt_toolkit.layout.menus (top-level), prompt_toolkit.widgets.toolbars (top-level), prompt_toolkit.widgets.dialogs (top-level), IPython.terminal.shortcuts (top-level)
|
||||
missing module named prompt_toolkit.filters.emacs_insert_mode - imported by prompt_toolkit.filters (top-level), prompt_toolkit.layout.containers (top-level), prompt_toolkit.key_binding.bindings.basic (top-level), prompt_toolkit.key_binding.bindings.emacs (top-level), IPython.terminal.shortcuts (top-level), IPython.terminal.debugger (top-level)
|
||||
missing module named prompt_toolkit.filters.vi_insert_mode - imported by prompt_toolkit.filters (top-level), prompt_toolkit.layout.containers (top-level), prompt_toolkit.key_binding.bindings.basic (top-level), IPython.terminal.shortcuts (top-level), IPython.terminal.debugger (top-level)
|
||||
missing module named prompt_toolkit.filters.vi_insert_multiple_mode - imported by prompt_toolkit.filters (top-level), prompt_toolkit.layout.processors (top-level)
|
||||
missing module named numpy.testing.knownfailureif - imported by numpy.testing (optional), IPython.external.decorators (optional)
|
||||
missing module named numpy.testing.KnownFailure - imported by numpy.testing (optional), IPython.external.decorators (optional)
|
||||
missing module named 'nose.plugins' - imported by IPython.testing.iptest (top-level), IPython.testing.plugin.ipdoctest (top-level), numpy.testing._private.noseclasses (top-level), numpy.testing._private.nosetester (delayed), IPython.external.decorators._numpy_testing_noseclasses (top-level)
|
||||
missing module named numpy.array - imported by numpy (top-level), numpy.ma.core (top-level), numpy.ma.extras (top-level), numpy.ma.mrecords (top-level), numpy.ctypeslib (top-level), scipy.linalg.decomp (top-level), scipy.linalg.decomp_schur (top-level), scipy.sparse.linalg.isolve.utils (top-level), scipy.interpolate.interpolate (top-level), scipy.interpolate._fitpack_impl (top-level), scipy.interpolate.fitpack2 (top-level), scipy.optimize.lbfgsb (top-level), scipy.optimize.tnc (top-level), scipy.optimize.slsqp (top-level), scipy.stats.stats (top-level), scipy.integrate._ode (top-level), scipy.misc.common (top-level), scipy.stats.morestats (top-level), numexpr.tests.test_numexpr (top-level), scipy.io.netcdf (top-level)
|
||||
missing module named numpy.recarray - imported by numpy (top-level), numpy.ma.mrecords (top-level)
|
||||
missing module named numpy.ndarray - imported by numpy (top-level), numpy.ma.core (top-level), numpy.ma.extras (top-level), IPython.core.magics.namespace (delayed, conditional, optional), numpy.ma.mrecords (top-level), numpy.ctypeslib (top-level), scipy.stats._distn_infrastructure (top-level), scipy.stats.mstats_basic (top-level), scipy.stats.mstats_extras (top-level), numpy.typing._array_like (top-level), pandas.compat.numpy.function (top-level), scipy.io.mmio (top-level), pyresample._compat (optional)
|
||||
missing module named numpy.dtype - imported by numpy (top-level), numpy.ma.mrecords (top-level), numpy.ctypeslib (top-level), scipy.optimize.minpack (top-level), numpy.typing._dtype_like (top-level), scipy.io.netcdf (top-level)
|
||||
missing module named numpy.bool_ - imported by numpy (top-level), numpy.ma.core (top-level), numpy.ma.mrecords (top-level)
|
||||
missing module named numpy.histogramdd - imported by numpy (delayed), numpy.lib.twodim_base (delayed)
|
||||
missing module named numpy.core.ufunc - imported by numpy.core (top-level), numpy.lib.utils (top-level)
|
||||
missing module named numpy.core.ones - imported by numpy.core (top-level), numpy.lib.polynomial (top-level)
|
||||
missing module named numpy.core.hstack - imported by numpy.core (top-level), numpy.lib.polynomial (top-level)
|
||||
missing module named numpy.core.atleast_1d - imported by numpy.core (top-level), numpy.lib.polynomial (top-level)
|
||||
missing module named numpy.core.atleast_3d - imported by numpy.core (top-level), numpy.lib.shape_base (top-level)
|
||||
missing module named numpy.core.vstack - imported by numpy.core (top-level), numpy.lib.shape_base (top-level)
|
||||
missing module named numpy.core.linspace - imported by numpy.core (top-level), numpy.lib.index_tricks (top-level)
|
||||
missing module named numpy.core.transpose - imported by numpy.core (top-level), numpy.lib.function_base (top-level)
|
||||
missing module named numpy.core.roll - imported by numpy.core (top-level), numpy.fft.helper (top-level)
|
||||
missing module named numpy.core.integer - imported by numpy.core (top-level), numpy.fft.helper (top-level)
|
||||
missing module named numpy.core.take - imported by numpy.core (top-level), numpy.fft._pocketfft (top-level)
|
||||
missing module named numpy.core.conjugate - imported by numpy.core (top-level), numpy.fft._pocketfft (top-level)
|
||||
missing module named numpy.core.result_type - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
|
||||
missing module named numpy.core.float_ - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
|
||||
missing module named numpy.core.number - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
|
||||
missing module named numpy.core.bool_ - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
|
||||
missing module named numpy.core.inf - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
|
||||
missing module named numpy.core.array2string - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
|
||||
missing module named numpy.core.signbit - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
|
||||
missing module named numpy.core.isscalar - imported by numpy.core (delayed), numpy.testing._private.utils (delayed), numpy.lib.polynomial (top-level)
|
||||
missing module named numpy.core.isinf - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
|
||||
missing module named numpy.core.isnat - imported by numpy.core (top-level), numpy.testing._private.utils (top-level)
|
||||
missing module named numpy.core.ndarray - imported by numpy.core (top-level), numpy.testing._private.utils (top-level), numpy.lib.utils (top-level)
|
||||
missing module named numpy.core.array_repr - imported by numpy.core (top-level), numpy.testing._private.utils (top-level)
|
||||
missing module named numpy.core.arange - imported by numpy.core (top-level), numpy.testing._private.utils (top-level), numpy.fft.helper (top-level)
|
||||
missing module named numpy.core.float32 - imported by numpy.core (top-level), numpy.testing._private.utils (top-level)
|
||||
missing module named numpy.core.iinfo - imported by numpy.core (top-level), numpy.lib.twodim_base (top-level)
|
||||
missing module named numpy.core.sort - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.argsort - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.sign - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.isnan - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (delayed)
|
||||
missing module named numpy.core.count_nonzero - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.divide - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.swapaxes - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.fft._pocketfft (top-level)
|
||||
missing module named numpy.core.matmul - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.object_ - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (delayed)
|
||||
missing module named numpy.core.asanyarray - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.intp - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (top-level)
|
||||
missing module named numpy.core.atleast_2d - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.product - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.amax - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.amin - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.moveaxis - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.geterrobj - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.errstate - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (delayed)
|
||||
missing module named numpy.core.finfo - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.lib.polynomial (top-level)
|
||||
missing module named numpy.core.isfinite - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (delayed)
|
||||
missing module named numpy.core.sum - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.fastCopyAndTranspose - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.sqrt - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.fft._pocketfft (top-level)
|
||||
missing module named numpy.core.multiply - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.add - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.dot - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.lib.polynomial (top-level)
|
||||
missing module named numpy.core.Inf - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.all - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (delayed)
|
||||
missing module named numpy.core.newaxis - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.complexfloating - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.inexact - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.cdouble - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.csingle - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.double - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.single - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.intc - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.empty_like - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
|
||||
missing module named numpy.core.empty - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (top-level), numpy.fft.helper (top-level)
|
||||
missing module named numpy.core.zeros - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.fft._pocketfft (top-level)
|
||||
missing module named numpy.core.asarray - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.fft._pocketfft (top-level), numpy.fft.helper (top-level), numpy.lib.utils (top-level)
|
||||
missing module named numpy.core.array - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (top-level), numpy.lib.polynomial (top-level)
|
||||
missing module named numpy.eye - imported by numpy (delayed), numpy.core.numeric (delayed), scipy.linalg.decomp (top-level), scipy.interpolate._pade (top-level), scipy.optimize.optimize (top-level), scipy.optimize.minpack (top-level)
|
||||
missing module named 'nose.util' - imported by IPython.testing.iptest (top-level), IPython.testing.plugin.ipdoctest (top-level), numpy.testing._private.noseclasses (top-level)
|
||||
missing module named psutil._psutil_aix - imported by psutil (top-level), psutil._psaix (top-level)
|
||||
missing module named psutil._psutil_sunos - imported by psutil (top-level), psutil._pssunos (top-level)
|
||||
missing module named psutil._psutil_bsd - imported by psutil (top-level), psutil._psbsd (top-level)
|
||||
missing module named psutil._psutil_osx - imported by psutil (top-level), psutil._psosx (top-level)
|
||||
missing module named psutil._psutil_linux - imported by psutil (top-level), psutil._pslinux (top-level)
|
||||
missing module named fontTools.ttLib.getSearchRange - imported by fontTools.ttLib (top-level), fontTools.ttLib.woff2 (top-level), fontTools.ttLib.tables.otConverters (top-level), fontTools.ttLib.tables._c_m_a_p (top-level), fontTools.ttLib.tables._k_e_r_n (top-level), fontTools.ttLib.sfnt (delayed, conditional)
|
||||
missing module named zopfli - imported by fontTools.ttLib.sfnt (delayed, conditional)
|
||||
missing module named xattr - imported by fontTools.misc.macCreatorType (optional)
|
||||
missing module named brotlicffi - imported by fontTools.ttLib.woff2 (optional)
|
||||
missing module named fontTools.ttLib.getClassTag - imported by fontTools.ttLib (top-level), fontTools.ttLib.tables.DefaultTable (top-level)
|
||||
missing module named fontTools.ttLib.getTableClass - imported by fontTools.ttLib (top-level), fontTools.ttLib.woff2 (top-level)
|
||||
missing module named fontTools.ttLib.getTableModule - imported by fontTools.ttLib (top-level), fontTools.ttLib.woff2 (top-level)
|
||||
missing module named fontTools.ttLib.TTFont - imported by fontTools.ttLib (top-level), fontTools.ttLib.woff2 (top-level), fontTools.cffLib (top-level), fontTools.varLib (top-level), fontTools.varLib.varStore (delayed), fontTools.otlLib.optimize (top-level), fontTools.otlLib.optimize.gpos (top-level), fontTools.ttx (top-level), fontTools.colorLib.unbuilder (conditional)
|
||||
missing module named __pypy__ - imported by tblib (optional), msgpack.fallback (conditional), fontTools.misc.etree (optional)
|
||||
missing module named 'html5lib.treebuilders' - imported by lxml.html.html5parser (top-level), lxml.html._html5builder (top-level)
|
||||
missing module named cssselect - imported by lxml.cssselect (optional)
|
||||
missing module named html5lib - imported by lxml.html.html5parser (top-level)
|
||||
missing module named htmlentitydefs - imported by lxml.html.soupparser (optional)
|
||||
missing module named BeautifulSoup - imported by lxml.html.soupparser (optional)
|
||||
missing module named bs4 - imported by pandas.io.html (delayed), lxml.html.soupparser (optional)
|
||||
missing module named UserList - imported by fontTools.ttLib.tables.otConverters (optional)
|
||||
missing module named fontTools.ttLib.newTable - imported by fontTools.ttLib (top-level), fontTools.ttLib.tables._n_a_m_e (top-level), fontTools.varLib (top-level), fontTools.varLib.featureVars (top-level), fontTools.varLib.cff (top-level)
|
||||
missing module named 'lz4.block' - imported by distributed.protocol.compression (optional), fontTools.ttLib.tables.grUtils (optional)
|
||||
missing module named lz4 - imported by distributed.protocol.compression (top-level), fontTools.ttLib.tables.grUtils (optional)
|
||||
missing module named 'IPython.kernel.comm' - imported by matplotlib.backends.backend_nbagg (optional)
|
||||
missing module named matplotlib.axes.Axes - imported by matplotlib.axes (delayed), matplotlib.legend (delayed), matplotlib.projections.geo (top-level), matplotlib.projections.polar (top-level), mpl_toolkits.mplot3d.axes3d (top-level), matplotlib.figure (top-level), matplotlib.pyplot (top-level), pandas.plotting._matplotlib.timeseries (conditional), pandas.plotting._matplotlib.tools (conditional), pandas.plotting._matplotlib.core (conditional), pandas.plotting._matplotlib.boxplot (conditional), pandas.plotting._matplotlib.hist (conditional), pandas.plotting._matplotlib.misc (conditional)
|
||||
missing module named matplotlib.tri.Triangulation - imported by matplotlib.tri (top-level), matplotlib.tri.trifinder (top-level), matplotlib.tri.tritools (top-level), matplotlib.tri.triinterpolate (top-level)
|
||||
missing module named numpy.expand_dims - imported by numpy (top-level), numpy.ma.core (top-level)
|
||||
missing module named numpy.iscomplexobj - imported by numpy (top-level), numpy.ma.core (top-level), scipy.linalg.decomp (top-level), scipy.linalg._decomp_ldl (top-level), scipy.fftpack.pseudo_diffs (top-level)
|
||||
missing module named numpy.amin - imported by numpy (top-level), numpy.ma.core (top-level), scipy.stats.morestats (top-level)
|
||||
missing module named numpy.amax - imported by numpy (top-level), numpy.ma.core (top-level), scipy.linalg.matfuncs (top-level), scipy.stats.morestats (top-level)
|
||||
missing module named pytest - imported by scipy._lib._testutils (delayed), matplotlib (delayed, optional), pandas._testing._io (delayed), pandas._testing (delayed), pandas.util._tester (delayed, optional), bottleneck._pytesttester (delayed), h5py.tests (delayed, optional)
|
||||
missing module named setuptools_scm - imported by matplotlib (delayed, conditional)
|
||||
missing module named numpydoc - imported by jedi.inference.docstrings (delayed)
|
||||
missing module named 'coverage.html' - imported by IPython.testing.iptestcontroller (delayed, conditional)
|
||||
missing module named coverage - imported by IPython.testing.iptestcontroller (delayed, conditional)
|
||||
missing module named 'nose.core' - imported by IPython.testing.iptest (top-level)
|
||||
missing module named nose - imported by IPython.testing.iptest (top-level), IPython.external.decorators._decorators (delayed), IPython.testing.decorators (delayed)
|
||||
missing module named 'nose.tools' - imported by IPython.testing.tools (delayed, optional), IPython.testing.decorators (delayed)
|
||||
missing module named curio - imported by IPython.core.async_helpers (delayed)
|
||||
missing module named docrepr - imported by IPython.core.interactiveshell (optional)
|
||||
missing module named cPickle - imported by pycparser.ply.yacc (delayed, optional), pickleshare (optional), qtpy.py3compat (conditional, optional), partd.compatibility (conditional)
|
||||
missing module named 'PySide2.QtGui' - imported by PIL.ImageQt (conditional, optional), qtpy.QtGui (conditional), qtpy.QtCore (conditional, optional)
|
||||
missing module named 'PyQt5.QtGui' - imported by PIL.ImageQt (conditional, optional), qtpy.QtGui (conditional)
|
||||
missing module named 'PySide6.QtGui' - imported by PIL.ImageQt (conditional, optional)
|
||||
missing module named 'PyQt6.QtGui' - imported by PIL.ImageQt (conditional, optional)
|
||||
missing module named dummy_thread - imported by cffi.lock (conditional, optional), sortedcontainers.sortedlist (conditional, optional)
|
||||
missing module named 'setuptools.extern.pyparsing' - imported by setuptools._vendor.packaging.markers (top-level), setuptools._vendor.packaging.requirements (top-level)
|
||||
missing module named 'setuptools.extern.packaging.version' - imported by setuptools.config (top-level), setuptools.msvc (top-level)
|
||||
missing module named 'setuptools.extern.packaging.utils' - imported by setuptools.wheel (top-level)
|
||||
missing module named 'setuptools.extern.packaging.tags' - imported by setuptools.wheel (top-level)
|
||||
missing module named 'setuptools.extern.packaging.specifiers' - imported by setuptools.config (top-level)
|
||||
missing module named setuptools.extern.ordered_set - imported by setuptools.extern (top-level), setuptools.dist (top-level), setuptools.command.sdist (top-level)
|
||||
missing module named setuptools.extern.packaging - imported by setuptools.extern (top-level), setuptools.dist (top-level), setuptools.command.egg_info (top-level)
|
||||
missing module named 'backports.ssl_match_hostname' - imported by setuptools.ssl_support (optional)
|
||||
missing module named cffi._pycparser - imported by cffi (optional), cffi.cparser (optional)
|
||||
missing module named netCDF4.Dataset - imported by netCDF4 (delayed), netCDF4.utils (delayed)
|
||||
missing module named numpy.arctanh - imported by numpy (top-level), numexpr.tests.test_numexpr (top-level)
|
||||
missing module named numpy.arccosh - imported by numpy (top-level), numexpr.tests.test_numexpr (top-level)
|
||||
missing module named numpy.arcsinh - imported by numpy (top-level), numexpr.tests.test_numexpr (top-level)
|
||||
missing module named numpy.arctan - imported by numpy (top-level), numexpr.tests.test_numexpr (top-level)
|
||||
missing module named numpy.tan - imported by numpy (top-level), numexpr.tests.test_numexpr (top-level)
|
||||
missing module named numpy.fmod - imported by numpy (top-level), numexpr.tests.test_numexpr (top-level)
|
||||
missing module named numpy.uint16 - imported by numpy (top-level), numexpr.tests.test_numexpr (top-level)
|
||||
missing module named numpy.power - imported by numpy (top-level), scipy.stats.kde (top-level)
|
||||
missing module named numpy.hypot - imported by numpy (top-level), scipy.stats.morestats (top-level)
|
||||
missing module named numpy.sinh - imported by numpy (top-level), scipy.stats._discrete_distns (top-level), numexpr.tests.test_numexpr (top-level), scipy.fftpack.pseudo_diffs (top-level)
|
||||
missing module named numpy.cosh - imported by numpy (top-level), scipy.stats._discrete_distns (top-level), numexpr.tests.test_numexpr (top-level), scipy.fftpack.pseudo_diffs (top-level)
|
||||
missing module named numpy.tanh - imported by numpy (top-level), scipy.stats._discrete_distns (top-level), numexpr.tests.test_numexpr (top-level), scipy.fftpack.pseudo_diffs (top-level)
|
||||
missing module named numpy.expm1 - imported by numpy (top-level), scipy.stats._discrete_distns (top-level), numexpr.tests.test_numexpr (top-level)
|
||||
missing module named numpy.log1p - imported by numpy (top-level), scipy.stats._discrete_distns (top-level), numexpr.tests.test_numexpr (top-level)
|
||||
missing module named numpy.NINF - imported by numpy (top-level), scipy.stats._distn_infrastructure (top-level)
|
||||
missing module named numpy.log - imported by numpy (top-level), scipy.stats._distn_infrastructure (top-level), scipy.stats._discrete_distns (top-level), scipy.stats.morestats (top-level), numexpr.tests.test_numexpr (top-level)
|
||||
missing module named numpy.logical_and - imported by numpy (top-level), scipy.stats._distn_infrastructure (top-level)
|
||||
missing module named numpy.double - imported by numpy (top-level), scipy.optimize._nnls (top-level)
|
||||
missing module named numpy.greater - imported by numpy (top-level), scipy.optimize.minpack (top-level)
|
||||
missing module named numpy.float64 - imported by numpy (top-level), scipy.optimize.lbfgsb (top-level), numexpr.tests.test_numexpr (top-level)
|
||||
missing module named numpy.sign - imported by numpy (top-level), scipy.linalg.matfuncs (top-level)
|
||||
missing module named numpy.conjugate - imported by numpy (top-level), scipy.linalg.matfuncs (top-level)
|
||||
missing module named numpy.logical_not - imported by numpy (top-level), scipy.linalg.matfuncs (top-level)
|
||||
missing module named numpy.single - imported by numpy (top-level), scipy.linalg.decomp_schur (top-level), scipy.linalg.matfuncs (top-level)
|
||||
missing module named numpy.arcsin - imported by numpy (top-level), scipy.linalg.decomp_svd (top-level), numexpr.tests.test_numexpr (top-level)
|
||||
missing module named numpy.arccos - imported by numpy (top-level), scipy.linalg.decomp_svd (top-level), scipy.special.orthogonal (top-level), numexpr.tests.test_numexpr (top-level)
|
||||
missing module named numpy.conj - imported by numpy (top-level), scipy.linalg.decomp (top-level), numexpr.tests.test_numexpr (top-level), scipy.io.mmio (top-level)
|
||||
missing module named numpy.inexact - imported by numpy (top-level), scipy.linalg.decomp (top-level), scipy.special._basic (top-level), scipy.optimize.minpack (top-level)
|
||||
missing module named numpy.random.randn - imported by numpy.random (top-level), scipy (top-level)
|
||||
missing module named numpy.random.rand - imported by numpy.random (top-level), scipy (top-level)
|
||||
missing module named scipy.sparse.coo_matrix - imported by scipy.sparse (delayed), scipy.sparse.data (delayed), scipy.optimize._numdiff (top-level), scipy.integrate._bvp (top-level), scipy.integrate._ivp.common (top-level), scipy.stats._crosstab (top-level), pandas.core.arrays.sparse.accessor (delayed), scipy.io.mmio (top-level)
|
||||
missing module named scipy.special.gammaln - imported by scipy.special (top-level), scipy.special.spfun_stats (top-level), scipy.integrate._quadrature (top-level), scipy.stats._discrete_distns (top-level), scipy.stats._hypotests (top-level), scipy.stats._multivariate (top-level), scipy.optimize._dual_annealing (top-level)
|
||||
missing module named scipy.special.ndtr - imported by scipy.special (top-level), scipy.stats._bootstrap (top-level)
|
||||
missing module named scipy.special.betaln - imported by scipy.special (top-level), scipy.stats._discrete_distns (top-level), scipy.stats._multivariate (top-level)
|
||||
missing module named scipy.special.beta - imported by scipy.special (top-level), scipy.stats._tukeylambda_stats (top-level)
|
||||
missing module named scipy.special.ive - imported by scipy.special (top-level), scipy.stats._distn_infrastructure (top-level)
|
||||
missing module named scipy.special.entr - imported by scipy.special (top-level), scipy.stats._distn_infrastructure (top-level), scipy.stats._discrete_distns (top-level), scipy.stats._multivariate (top-level)
|
||||
missing module named scipy.special.chndtr - imported by scipy.special (top-level), scipy.stats._distn_infrastructure (top-level)
|
||||
missing module named scipy.special.xlogy - imported by scipy.special (top-level), scipy.interpolate.rbf (top-level), scipy.stats._distn_infrastructure (top-level), scipy.stats._multivariate (top-level)
|
||||
missing module named scipy.special.rel_entr - imported by scipy.special (top-level), scipy.spatial.distance (top-level)
|
||||
missing module named scipy.special.loggamma - imported by scipy.special (top-level), scipy.fft._fftlog (top-level)
|
||||
missing module named scipy.special.airy - imported by scipy.special (top-level), scipy.special.orthogonal (top-level)
|
||||
missing module named scipy.linalg._flapack_64 - imported by scipy.linalg (optional), scipy.linalg.lapack (optional)
|
||||
missing module named scipy.linalg._clapack - imported by scipy.linalg (optional), scipy.linalg.lapack (optional)
|
||||
missing module named scipy.linalg._fblas_64 - imported by scipy.linalg (optional), scipy.linalg.blas (optional)
|
||||
missing module named scipy.linalg._cblas - imported by scipy.linalg (optional), scipy.linalg.blas (optional)
|
||||
missing module named scipy.stats.iqr - imported by scipy.stats (delayed), scipy.stats._hypotests (delayed)
|
||||
missing module named 'scikits.umfpack' - imported by scipy.optimize._linprog_ip (optional)
|
||||
missing module named 'sksparse.cholmod' - imported by scipy.optimize._linprog_ip (optional)
|
||||
missing module named sksparse - imported by scipy.optimize._trustregion_constr.projections (optional), scipy.optimize._linprog_ip (optional)
|
||||
missing module named sparse - imported by scipy.sparse.linalg._expm_multiply (delayed, conditional), scipy.sparse.linalg.matfuncs (delayed, conditional), distributed.protocol.sparse (top-level), dask.array.chunk_types (optional), dask.array.backends (delayed), xarray.core.dataset (delayed), xarray.core.variable (delayed, conditional), xarray.core.indexing (delayed, conditional), xarray.core.formatting (top-level)
|
||||
missing module named uarray - imported by scipy._lib.uarray (conditional, optional)
|
||||
missing module named scikits - imported by scipy.sparse.linalg.dsolve.linsolve (optional)
|
||||
missing module named scipy.linalg.qr_insert - imported by scipy.linalg (top-level), scipy.sparse.linalg.isolve._gcrotmk (top-level)
|
||||
missing module named pyepsg - imported by cartopy._epsg (delayed)
|
||||
missing module named 'owslib.wmts' - imported by cartopy.io.ogc_clients (optional)
|
||||
missing module named 'owslib.util' - imported by cartopy.io.ogc_clients (optional)
|
||||
missing module named 'owslib.wfs' - imported by cartopy.io.ogc_clients (optional)
|
||||
missing module named owslib - imported by cartopy.io.ogc_clients (optional)
|
||||
missing module named fiona - imported by cartopy.io.shapereader (optional)
|
||||
missing module named cartopy_userconfig - imported by cartopy (optional)
|
||||
missing module named 'cartopy.siteconfig' - imported by cartopy (optional)
|
||||
missing module named zstandard - imported by distributed.protocol.compression (top-level), fsspec.compression (optional)
|
||||
missing module named _snappy_cffi - imported by snappy.snappy_cffi (top-level)
|
||||
missing module named blosc - imported by distributed.protocol.compression (top-level), partd.compressed (top-level), partd.numpy (top-level)
|
||||
missing module named tlz.identity - imported by tlz (top-level), dask.base (top-level), distributed.protocol.compression (top-level)
|
||||
missing module named pandas.msgpack - imported by pandas (optional), partd.python (optional), partd.numpy (optional)
|
||||
missing module named pyarrow - imported by pandas.core.arrays.masked (delayed), pandas.core.arrays.numeric (delayed, conditional), pandas.core.arrays._arrow_utils (top-level), pandas.core.arrays.interval (delayed), pandas.core.arrays.period (delayed), pandas.core.arrays.boolean (delayed, conditional), pandas.io.feather_format (delayed), pandas.core.arrays.string_ (delayed, conditional), pandas.core.arrays.string_arrow (conditional), pandas.core.dtypes.dtypes (delayed, conditional), pandas.compat.pyarrow (optional), distributed.protocol.arrow (top-level), dask.sizeof (delayed), dask.dataframe.io.parquet.arrow (top-level), dask.dataframe.io.orc.core (delayed, conditional), dask.dataframe.io.orc.arrow (top-level)
|
||||
missing module named 'pyarrow.parquet' - imported by pandas.io.parquet (delayed), dask.dataframe.io.parquet.arrow (top-level)
|
||||
missing module named PyQt4 - imported by pandas.io.clipboard (delayed, conditional, optional)
|
||||
missing module named PyQt5 - imported by pandas.io.clipboard (delayed, conditional, optional)
|
||||
missing module named 'PySide2.QtDataVisualization' - imported by qtpy.QtDataVisualization (conditional)
|
||||
missing module named 'PyQt5.QtDataVisualization' - imported by qtpy.QtDataVisualization (conditional)
|
||||
missing module named 'PySide.QtCore' - imported by qtpy (conditional, optional), qtpy.QtCore (conditional)
|
||||
missing module named PySide - imported by qtpy (conditional, optional)
|
||||
missing module named 'PyQt4.QtCore' - imported by qtpy (conditional, optional), qtpy.QtCore (conditional)
|
||||
missing module named 'PyQt4.Qt' - imported by qtpy (conditional, optional), qtpy.QtGui (conditional, optional)
|
||||
missing module named 'PySide2.QtCore' - imported by qtpy (conditional, optional), qtpy.QtCore (conditional)
|
||||
missing module named 'PyQt5.QtCore' - imported by qtpy (conditional, optional), qtpy.QtCore (conditional)
|
||||
missing module named CStringIO - imported by qtpy.py3compat (conditional, optional)
|
||||
missing module named ConfigParser - imported by qtpy.py3compat (conditional)
|
||||
missing module named AppKit - imported by pandas.io.clipboard (delayed, conditional, optional)
|
||||
missing module named 'PyQt4.QtGui' - imported by qtpy.QtGui (conditional, optional), qtpy.QtCore (conditional), qtpy.QtWidgets (conditional), pandas.io.clipboard (delayed, optional)
|
||||
missing module named 'PyQt5.QtWidgets' - imported by qtpy.QtWidgets (conditional), pandas.io.clipboard (delayed, optional)
|
||||
missing module named 'PySide.QtGui' - imported by qtpy.QtGui (conditional), qtpy.QtCore (conditional), qtpy.QtWidgets (conditional)
|
||||
missing module named 'PySide2.QtWidgets' - imported by qtpy.QtWidgets (conditional)
|
||||
missing module named 'sqlalchemy.types' - imported by pandas.io.sql (delayed, conditional)
|
||||
missing module named 'sqlalchemy.schema' - imported by pandas.io.sql (delayed, conditional)
|
||||
missing module named sqlalchemy - imported by pandas.io.sql (delayed, conditional, optional), dask.dataframe.io.sql (delayed)
|
||||
missing module named tables - imported by pandas.io.pytables (delayed, conditional)
|
||||
missing module named xlwt - imported by pandas.io.excel._xlwt (delayed, conditional)
|
||||
missing module named xlsxwriter - imported by pandas.io.excel._xlsxwriter (delayed)
|
||||
missing module named 'openpyxl.cell' - imported by pandas.io.excel._openpyxl (delayed)
|
||||
missing module named 'openpyxl.styles' - imported by pandas.io.excel._openpyxl (delayed)
|
||||
missing module named 'openpyxl.workbook' - imported by pandas.io.excel._openpyxl (delayed)
|
||||
missing module named openpyxl - imported by pandas.io.excel._openpyxl (delayed, conditional)
|
||||
missing module named 'odf.config' - imported by pandas.io.excel._odswriter (delayed)
|
||||
missing module named 'odf.style' - imported by pandas.io.excel._odswriter (delayed)
|
||||
missing module named 'odf.text' - imported by pandas.io.excel._odfreader (delayed), pandas.io.excel._odswriter (delayed)
|
||||
missing module named 'odf.table' - imported by pandas.io.excel._odfreader (delayed), pandas.io.excel._odswriter (delayed)
|
||||
missing module named 'odf.opendocument' - imported by pandas.io.excel._odfreader (delayed), pandas.io.excel._odswriter (delayed)
|
||||
missing module named xlrd - imported by pandas.io.excel._xlrd (delayed), pandas.io.excel._base (delayed, conditional)
|
||||
missing module named pyxlsb - imported by pandas.io.excel._pyxlsb (delayed)
|
||||
missing module named 'odf.element' - imported by pandas.io.excel._odfreader (delayed)
|
||||
missing module named 'odf.namespaces' - imported by pandas.io.excel._odfreader (delayed)
|
||||
missing module named odf - imported by pandas.io.excel._odfreader (delayed)
|
||||
missing module named botocore - imported by pandas.io.common (delayed, conditional, optional)
|
||||
missing module named 'pyarrow.compute' - imported by pandas.core.arrays.string_arrow (conditional)
|
||||
missing module named hypothesis - imported by pandas.util._tester (delayed, optional)
|
||||
missing module named pandas.ExtensionArray - imported by pandas (conditional), pandas.core.construction (conditional)
|
||||
missing module named uvloop - imported by distributed (conditional)
|
||||
missing module named tlz.merge - imported by tlz (top-level), dask.base (top-level), distributed.client (top-level), dask.delayed (top-level), distributed.core (top-level), distributed.cfexecutor (top-level), distributed.utils_comm (top-level), distributed.worker (top-level), distributed.dashboard.components.worker (top-level), distributed.diagnostics.progress_stream (top-level), distributed.scheduler (top-level), distributed.variable (top-level), distributed.deploy.old_ssh (top-level), dask.array.percentile (top-level), dask.dataframe.core (top-level), dask.array.slicing (top-level), dask.dataframe.io.hdf (top-level), dask.dataframe.io.io (top-level), dask.bag.core (top-level), dask.dataframe.partitionquantiles (top-level), dask.array.gufunc (top-level)
|
||||
missing module named bokeh.models.Plot - imported by bokeh.models (top-level), bokeh.plotting.figure (top-level), bokeh.plotting._tools (top-level), bokeh.layouts (top-level), bokeh.events (delayed)
|
||||
missing module named bokeh.models.Widget - imported by bokeh.models (conditional), bokeh.layouts (conditional)
|
||||
missing module named bokeh.models.Toolbar - imported by bokeh.models (top-level), bokeh.plotting._tools (top-level), bokeh.layouts (conditional)
|
||||
missing module named bokeh.models.WidgetBox - imported by bokeh.models (top-level), bokeh.layouts (top-level)
|
||||
missing module named bokeh.models.ToolbarBox - imported by bokeh.models (top-level), bokeh.layouts (top-level)
|
||||
missing module named bokeh.models.Spacer - imported by bokeh.models (top-level), bokeh.layouts (top-level)
|
||||
missing module named bokeh.models.Row - imported by bokeh.models (top-level), bokeh.layouts (top-level)
|
||||
missing module named bokeh.models.ProxyToolbar - imported by bokeh.models (top-level), bokeh.layouts (top-level)
|
||||
missing module named bokeh.models.LayoutDOM - imported by bokeh.models (top-level), bokeh.layouts (top-level)
|
||||
missing module named bokeh.models.GridBox - imported by bokeh.models (top-level), bokeh.layouts (top-level)
|
||||
missing module named bokeh.models.Column - imported by bokeh.models (top-level), bokeh.layouts (top-level)
|
||||
missing module named bokeh.models.Box - imported by bokeh.models (top-level), bokeh.layouts (top-level)
|
||||
missing module named 'selenium.webdriver' - imported by bokeh.io.webdriver (top-level), bokeh.io.export (delayed)
|
||||
missing module named 'selenium.common' - imported by bokeh.io.export (delayed)
|
||||
missing module named selenium - imported by bokeh.io.export (conditional), bokeh.io.webdriver (top-level)
|
||||
missing module named bokeh.models.ColumnDataSource - imported by bokeh.models (top-level), bokeh.plotting.figure (top-level), bokeh.plotting._graph (top-level), bokeh.plotting._renderer (top-level), bokeh.plotting (top-level), distributed.dashboard.components.worker (top-level), distributed.dashboard.components.shared (top-level), distributed.dashboard.components.nvml (top-level), distributed.dashboard.components.scheduler (top-level)
|
||||
missing module named bokeh.models.LegendItem - imported by bokeh.models (top-level), bokeh.plotting._legends (top-level)
|
||||
missing module named bokeh.models.Legend - imported by bokeh.models (top-level), bokeh.plotting._legends (top-level)
|
||||
missing module named bokeh.models.GlyphRenderer - imported by bokeh.models (top-level), bokeh.plotting._graph (top-level), bokeh.plotting._renderer (top-level)
|
||||
missing module named bokeh.models.ColumnarDataSource - imported by bokeh.models (top-level), bokeh.plotting._graph (top-level), bokeh.plotting._renderer (top-level)
|
||||
missing module named bokeh.models.Marker - imported by bokeh.models (top-level), bokeh.plotting._docstring (top-level)
|
||||
missing module named bokeh.models.Tool - imported by bokeh.models (top-level), bokeh.plotting.figure (top-level), bokeh.plotting._tools (top-level), distributed.dashboard.export_tool (top-level)
|
||||
missing module named bokeh.models.HoverTool - imported by bokeh.models (top-level), bokeh.plotting._tools (top-level), distributed.profile (delayed), distributed.dashboard.components.worker (top-level), distributed.dashboard.components.shared (top-level), distributed.dashboard.components.nvml (top-level), distributed.dashboard.components.scheduler (top-level)
|
||||
missing module named bokeh.models.Range - imported by bokeh.models (top-level), bokeh.plotting.figure (top-level), bokeh.plotting._plot (top-level)
|
||||
missing module named bokeh.models.MercatorAxis - imported by bokeh.models (top-level), bokeh.plotting._plot (top-level)
|
||||
missing module named bokeh.models.LogScale - imported by bokeh.models (top-level), bokeh.plotting._plot (top-level)
|
||||
missing module named bokeh.models.LogAxis - imported by bokeh.models (top-level), bokeh.plotting._plot (top-level)
|
||||
missing module named bokeh.models.LinearScale - imported by bokeh.models (top-level), bokeh.plotting._plot (top-level)
|
||||
missing module named bokeh.models.Grid - imported by bokeh.models (top-level), bokeh.plotting._plot (top-level)
|
||||
missing module named bokeh.models.FactorRange - imported by bokeh.models (top-level), bokeh.plotting._plot (top-level)
|
||||
missing module named bokeh.models.DatetimeAxis - imported by bokeh.models (top-level), bokeh.plotting._plot (top-level)
|
||||
missing module named bokeh.models.DataRange1d - imported by bokeh.models (top-level), bokeh.plotting._plot (top-level), distributed.dashboard.components.worker (top-level), distributed.dashboard.components.shared (top-level), distributed.dashboard.components.scheduler (top-level)
|
||||
missing module named bokeh.models.ContinuousTicker - imported by bokeh.models (top-level), bokeh.plotting._plot (top-level)
|
||||
missing module named bokeh.models.CategoricalScale - imported by bokeh.models (top-level), bokeh.plotting._plot (top-level)
|
||||
missing module named bokeh.models.CategoricalAxis - imported by bokeh.models (top-level), bokeh.plotting._plot (top-level)
|
||||
missing module named bokeh.models.Range1d - imported by bokeh.models (top-level), bokeh.plotting._plot (top-level), bokeh.plotting.gmap (top-level), distributed.dashboard.components.shared (top-level), distributed.dashboard.components.scheduler (top-level)
|
||||
missing module named bokeh.models.MercatorTickFormatter - imported by bokeh.models (top-level), bokeh.plotting.gmap (top-level)
|
||||
missing module named bokeh.models.MercatorTicker - imported by bokeh.models (top-level), bokeh.plotting.gmap (top-level)
|
||||
missing module named bokeh.models.LinearAxis - imported by bokeh.models (top-level), bokeh.plotting._plot (top-level), bokeh.plotting.gmap (top-level)
|
||||
missing module named bokeh.models.GMapPlot - imported by bokeh.models (top-level), bokeh.plotting.gmap (top-level)
|
||||
missing module named bokeh.models.Scatter - imported by bokeh.models (top-level), bokeh.plotting._graph (top-level)
|
||||
missing module named bokeh.models.MultiLine - imported by bokeh.models (top-level), bokeh.plotting._graph (top-level)
|
||||
missing module named bokeh.models.Circle - imported by bokeh.models (top-level), bokeh.plotting._graph (top-level)
|
||||
missing module named bokeh.models.Scale - imported by bokeh.models (top-level), bokeh.plotting.figure (top-level)
|
||||
missing module named bokeh.models.GraphRenderer - imported by bokeh.models (top-level), bokeh.plotting.figure (top-level)
|
||||
missing module named bokeh.models.CoordinateMapping - imported by bokeh.models (top-level), bokeh.plotting.figure (top-level)
|
||||
missing module named 'tlz.curried' - imported by distributed.dashboard.utils (top-level), distributed.dashboard.components.scheduler (top-level), dask.array.core (top-level), dask.layers (top-level), dask.bag.core (delayed, conditional), dask.array.overlap (top-level)
|
||||
missing module named pynvml - imported by distributed.diagnostics.nvml (optional)
|
||||
missing module named tlz.pipe - imported by tlz (top-level), distributed.dashboard.components.scheduler (top-level)
|
||||
missing module named tlz.partition_all - imported by tlz (top-level), distributed.client (top-level), distributed.dashboard.components.worker (top-level), dask.dataframe.core (top-level), dask.dataframe.categorical (top-level), dask.array.reductions (top-level), dask.bag.core (top-level)
|
||||
missing module named dl - imported by setuptools.command.build_ext (conditional, optional)
|
||||
missing module named pythran - imported by Cython.Build.Dependencies (optional), Cython.Compiler.Pythran (optional)
|
||||
missing module named Cython.Tempita.sub - imported by Cython.Tempita (delayed), Cython.Compiler.Code (delayed)
|
||||
missing module named pyximport.test - imported by pyximport (conditional), pyximport.pyxbuild (conditional)
|
||||
missing module named md5 - imported by Cython.Compiler.Code (optional), Cython.Build.Inline (optional), Cython.Build.IpythonMagic (optional)
|
||||
missing module named Parser - imported by Cython.Compiler.Main (delayed, conditional, optional)
|
||||
missing module named tlz.topk - imported by tlz (top-level), distributed.stealing (top-level), dask.bag.core (top-level)
|
||||
missing module named setproctitle - imported by distributed.proctitle (optional)
|
||||
missing module named 'ucp.endpoint_reuse' - imported by distributed.comm.ucx (delayed, optional)
|
||||
missing module named rmm - imported by distributed.protocol.rmm (top-level), dask.sizeof (delayed), distributed.comm.ucx (delayed, optional)
|
||||
missing module named 'numba.cuda' - imported by distributed.protocol.rmm (top-level), distributed.protocol.numba (top-level), dask.sizeof (delayed), distributed.comm.ucx (delayed, conditional, optional)
|
||||
missing module named ucp - imported by distributed.comm.ucx (delayed, conditional, optional)
|
||||
missing module named tlz.sliding_window - imported by tlz (top-level), distributed.comm.tcp (top-level), dask.array.routines (top-level), dask.array.creation (top-level)
|
||||
missing module named cupy - imported by distributed.protocol.cupy (top-level), dask.sizeof (delayed), dask.array.routines (delayed, conditional), dask.array.chunk_types (optional), dask.array.backends (delayed), xarray.core.duck_array_ops (delayed, conditional)
|
||||
missing module named tlz.valmap - imported by tlz (top-level), distributed.client (top-level), distributed.diagnostics.progress_stream (top-level), distributed.scheduler (top-level), distributed.diagnostics.progress (top-level), distributed.diagnostics.progressbar (top-level), dask.bag.core (top-level)
|
||||
missing module named tlz.second - imported by tlz (top-level), distributed.scheduler (top-level), dask.bag.core (top-level)
|
||||
missing module named tlz.pluck - imported by tlz (top-level), distributed.worker (top-level), distributed.scheduler (top-level), dask.array.slicing (top-level), dask.array.reductions (top-level), dask.bag.core (top-level)
|
||||
missing module named tlz.merge_with - imported by tlz (top-level), distributed.scheduler (top-level), dask.bag.core (top-level)
|
||||
missing module named tlz.merge_sorted - imported by tlz (top-level), distributed.scheduler (top-level), dask.dataframe.multi (top-level), dask.dataframe.partitionquantiles (top-level)
|
||||
missing module named tlz.groupby - imported by tlz (top-level), dask.base (top-level), distributed.client (top-level), distributed.utils_comm (top-level), distributed.scheduler (top-level), distributed.diagnostics.progress (top-level), dask.array.core (top-level), dask.bag.core (top-level)
|
||||
missing module named tlz.first - imported by tlz (top-level), distributed.client (top-level), distributed.worker (top-level), distributed.scheduler (top-level), dask.array.core (top-level), dask.dataframe.core (top-level), dask.bag.core (top-level), dask.dataframe.multi (top-level)
|
||||
missing module named tlz.compose - imported by tlz (top-level), distributed.scheduler (top-level), dask.array.reductions (top-level), dask.bag.core (top-level)
|
||||
missing module named 'paramiko.ssh_exception' - imported by distributed.deploy.old_ssh (delayed)
|
||||
missing module named 'paramiko.buffered_pipe' - imported by distributed.deploy.old_ssh (delayed)
|
||||
missing module named asyncssh - imported by distributed.deploy.ssh (delayed)
|
||||
missing module named crick - imported by distributed.counter (optional), dask.array.percentile (delayed)
|
||||
missing module named stacktrace - imported by distributed.profile (delayed)
|
||||
missing module named cuml - imported by distributed.protocol (delayed)
|
||||
missing module named cudf - imported by distributed.protocol (delayed)
|
||||
missing module named numba - imported by distributed.protocol.rmm (top-level)
|
||||
missing module named cupyx - imported by distributed.protocol.cupy (optional)
|
||||
missing module named 'cupy.cusparse' - imported by distributed.protocol.cupy (optional)
|
||||
missing module named torch - imported by distributed.protocol.torch (top-level)
|
||||
missing module named 'keras.models' - imported by distributed.protocol.keras (delayed)
|
||||
missing module named keras - imported by distributed.protocol.keras (top-level)
|
||||
missing module named 'IPython.core.ipapi' - imported by h5py.ipy_completer (optional)
|
||||
missing module named mpi4py - imported by h5py._hl.files (delayed)
|
||||
missing module named '__pypy__.builders' - imported by msgpack.fallback (conditional, optional)
|
||||
missing module named lmdb - imported by zict.lmdb (delayed), zarr.storage (delayed)
|
||||
missing module named tlz.keymap - imported by tlz (top-level), distributed.client (top-level), distributed.worker (top-level)
|
||||
missing module named tlz.drop - imported by tlz (top-level), distributed.utils_comm (top-level), dask.array.reductions (top-level)
|
||||
missing module named tlz.concat - imported by tlz (top-level), dask.delayed (top-level), distributed.utils_comm (top-level), dask.array.core (top-level), dask.array.slicing (top-level), dask.array.chunk (top-level), dask.array.utils (top-level), dask.array.routines (top-level), dask.bag.text (top-level), dask.array.gufunc (top-level), dask.array.overlap (top-level)
|
||||
missing module named tlz.unique - imported by tlz (top-level), dask.delayed (top-level), dask.dataframe.core (top-level), dask.bag.core (top-level), dask.dataframe.multi (top-level), dask.array.gufunc (top-level)
|
||||
missing module named pandas_datareader - imported by dask.dataframe.io.demo (delayed)
|
||||
missing module named 'pyarrow.orc' - imported by dask.dataframe.io.orc.arrow (top-level)
|
||||
missing module named 'lz4.frame' - imported by fsspec.compression (optional)
|
||||
missing module named lzmaffi - imported by fsspec.compression (optional)
|
||||
missing module named isal - imported by fsspec.compression (optional)
|
||||
missing module named 'fastparquet.writer' - imported by dask.dataframe.io.parquet.fastparquet (optional)
|
||||
missing module named 'fastparquet.util' - imported by dask.dataframe.io.parquet.fastparquet (optional)
|
||||
missing module named fastparquet - imported by dask.dataframe.io.parquet.fastparquet (optional)
|
||||
missing module named 'sqlalchemy.sql' - imported by dask.dataframe.io.sql (delayed)
|
||||
missing module named fastavro - imported by dask.bag.avro (delayed)
|
||||
missing module named tlz.take - imported by tlz (top-level), dask.bag.core (top-level), dask.dataframe.partitionquantiles (top-level)
|
||||
missing module named tlz.remove - imported by tlz (top-level), dask.dataframe.core (top-level), dask.bag.core (top-level)
|
||||
missing module named tlz.reduceby - imported by tlz (top-level), dask.bag.core (top-level)
|
||||
missing module named tlz.peek - imported by tlz (top-level), dask.bag.core (top-level)
|
||||
missing module named tlz.join - imported by tlz (top-level), dask.bag.core (top-level)
|
||||
missing module named tlz.frequencies - imported by tlz (top-level), dask.array.core (top-level), dask.array.utils (top-level), dask.bag.core (top-level)
|
||||
missing module named tlz.count - imported by tlz (top-level), dask.bag.core (top-level)
|
||||
missing module named tlz.accumulate - imported by tlz (top-level), dask.array.core (top-level), dask.array.slicing (top-level), dask.array.reductions (top-level), dask.bag.core (top-level), dask.array.rechunk (top-level)
|
||||
missing module named bcolz - imported by dask.dataframe.io.io (delayed)
|
||||
missing module named tlz.memoize - imported by tlz (top-level), dask.array.slicing (top-level)
|
||||
missing module named dask_cudf - imported by dask.dataframe.backends (delayed)
|
||||
missing module named tlz.partition - imported by tlz (top-level), dask.array.core (top-level), dask.dataframe.methods (top-level)
|
||||
missing module named tlz.curry - imported by tlz (top-level), dask.base (top-level), dask.delayed (top-level), distributed.dashboard.components.scheduler (top-level), dask.array.wrap (top-level), dask.bag.core (top-level)
|
||||
missing module named tlz.partial - imported by tlz (top-level), dask.array.overlap (top-level)
|
||||
missing module named tlz.get - imported by tlz (top-level), dask.array.reductions (top-level), dask.array.overlap (top-level)
|
||||
missing module named tlz.interleave - imported by tlz (top-level), dask.array.routines (top-level)
|
||||
missing module named 'cupyx.scipy' - imported by dask.array.utils (delayed, conditional), dask.array.chunk_types (optional), dask.array.backends (delayed, optional)
|
||||
missing module named tiledb - imported by dask.array.tiledb_io (delayed)
|
||||
missing module named redis - imported by zarr.storage (delayed)
|
||||
missing module named pymongo - imported by zarr.storage (delayed)
|
||||
missing module named _dbm - imported by dbm.ndbm (top-level)
|
||||
missing module named 'azure.core' - imported by zarr._storage.absstore (delayed)
|
||||
missing module named azure - imported by zarr._storage.absstore (delayed, conditional)
|
||||
missing module named ipytree - imported by zarr.util (delayed, optional)
|
||||
missing module named zfpy - imported by numcodecs.zfpy (optional)
|
||||
missing module named dask.sharedict - imported by dask (delayed, conditional, optional), xarray.core.dataset (delayed, conditional, optional)
|
||||
missing module named mimesis - imported by dask.datasets (delayed)
|
||||
missing module named mmh3 - imported by dask.hashing (optional)
|
||||
missing module named xxhash - imported by dask.hashing (optional)
|
||||
missing module named cityhash - imported by dask.hashing (optional)
|
||||
missing module named 'tlz.functoolz' - imported by dask.base (top-level)
|
||||
missing module named Nio - imported by xarray.backends.pynio_ (optional)
|
||||
missing module named 'pydap.client' - imported by xarray.backends.pydap_ (optional)
|
||||
missing module named PseudoNetCDF - imported by xarray.backends.pseudonetcdf_ (optional)
|
||||
missing module named h5netcdf - imported by xarray.backends.h5netcdf_ (optional), xarray.tutorial (delayed, conditional, optional)
|
||||
missing module named cfgrib - imported by xarray.backends.cfgrib_ (optional)
|
||||
missing module named 'IPython.html.widgets' - imported by seaborn.widgets (optional)
|
||||
missing module named sphinx - imported by seaborn.external.docscrape (delayed, conditional)
|
||||
missing module named fastcluster - imported by seaborn.matrix (delayed)
|
||||
missing module named 'statsmodels.nonparametric' - imported by seaborn.regression (delayed)
|
||||
missing module named 'statsmodels.robust' - imported by seaborn.regression (delayed, conditional)
|
||||
missing module named 'statsmodels.genmod' - imported by seaborn.regression (delayed, conditional)
|
||||
missing module named statsmodels - imported by seaborn.regression (optional)
|
||||
missing module named nc_time_axis - imported by xarray.plot.utils (optional)
|
||||
missing module named 'iris.exceptions' - imported by xarray.convert (delayed)
|
||||
missing module named 'iris.fileformats' - imported by xarray.convert (delayed)
|
||||
missing module named cf_units - imported by xarray.convert (delayed)
|
||||
missing module named iris - imported by xarray.core.dataarray (conditional, optional), xarray.convert (delayed)
|
||||
missing module named cdms2 - imported by xarray.core.dataarray (conditional, optional), xarray.convert (delayed)
|
||||
missing module named numbagg - imported by xarray.core.rolling_exp (delayed)
|
||||
missing module named swiftclient - imported by rasterio.session (delayed, conditional)
|
||||
missing module named boto3 - imported by rasterio.session (optional)
|
||||
missing module named pydap - imported by xarray.backends.api (delayed, optional)
|
||||
missing module named pooch - imported by xarray.tutorial (delayed, optional)
|
||||
missing module named compiler - imported by configobj (delayed, conditional)
|
||||
missing module named 'mpl_toolkits.basemap' - imported by pyresample.plot (delayed)
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
@ -407,7 +407,7 @@ class Orbit(Component):
|
|||
"Orbit interpolation type %s, is not implemented" % method
|
||||
)
|
||||
|
||||
interpolateOrbit = interpolate
|
||||
# interpolateOrbit = interpolate
|
||||
|
||||
def _linearOrbitInterpolation(self,time):
|
||||
"""
|
||||
|
@ -1020,12 +1020,11 @@ class Orbit(Component):
|
|||
delta = (self.maxTime - self.minTime).total_seconds() * 0.5
|
||||
tguess = self.minTime + datetime.timedelta(seconds = delta)
|
||||
outOfBounds = False
|
||||
# Start the previous guess tracking with dummy value
|
||||
t_prev_guess = tguess + datetime.timedelta(seconds=10)
|
||||
for ii in range(51):
|
||||
try:
|
||||
sv = self.interpolateOrbit(tguess, method='hermite')
|
||||
except:
|
||||
except Exception as e:
|
||||
print(e)
|
||||
outOfBounds = True
|
||||
break
|
||||
|
||||
|
@ -1044,12 +1043,9 @@ class Orbit(Component):
|
|||
c2 = (fdop/rng + fdopder)
|
||||
|
||||
fnprime = c1 + c2 * dopfact
|
||||
|
||||
tguess = tguess - datetime.timedelta(seconds = fn/fnprime)
|
||||
if abs(tguess - t_prev_guess).total_seconds() < 5e-9:
|
||||
if abs(fn/fnprime) < 1e-6:
|
||||
break
|
||||
else:
|
||||
t_prev_guess = tguess
|
||||
|
||||
if outOfBounds:
|
||||
raise Exception('Interpolation time out of bounds')
|
||||
|
|
|
@ -27,9 +27,13 @@
|
|||
# Author: Walter Szeliga
|
||||
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
|
||||
|
||||
from xml.etree.ElementTree import ElementTree
|
||||
import datetime
|
||||
import isceobj
|
||||
import copy
|
||||
from isceobj.Scene.Frame import Frame
|
||||
from isceobj.Planet.Planet import Planet
|
||||
from isceobj.Orbit.Orbit import StateVector, Orbit
|
||||
|
@ -38,16 +42,8 @@ from isceobj.Planet.AstronomicalHandbook import Const
|
|||
from iscesys.Component.Component import Component
|
||||
from iscesys.DateTimeUtil.DateTimeUtil import DateTimeUtil as DTUtil
|
||||
import os
|
||||
import copy
|
||||
import scipy.sparse as ss
|
||||
from concurrent.futures._base import as_completed, wait
|
||||
from concurrent.futures.thread import ThreadPoolExecutor
|
||||
from multiprocessing import Pool
|
||||
import math
|
||||
import datetime
|
||||
from math import sin,cos
|
||||
from scipy.optimize import leastsq
|
||||
import numpy as np
|
||||
|
||||
sep = "\n"
|
||||
tab = " "
|
||||
lookMap = { 'R': -1,
|
||||
|
@ -59,7 +55,7 @@ TIFF = Component.Parameter(
|
|||
default='',
|
||||
type=str,
|
||||
mandatory=True,
|
||||
doc='GF3 tiff imagery file'
|
||||
doc='GF3_SLC tiff imagery file'
|
||||
)
|
||||
|
||||
XML = Component.Parameter(
|
||||
|
@ -68,7 +64,7 @@ XML = Component.Parameter(
|
|||
default='',
|
||||
type=str,
|
||||
mandatory=True,
|
||||
doc='GF3 xml metadata file'
|
||||
doc='GF3_SLC xml metadata file'
|
||||
)
|
||||
|
||||
ORBIT_DIRECTORY = Component.Parameter(
|
||||
|
@ -77,7 +73,7 @@ ORBIT_DIRECTORY = Component.Parameter(
|
|||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='Directory with GF3 precise orbits')
|
||||
doc='Directory with GF3_SLC precise orbits')
|
||||
|
||||
ORBIT_FILE = Component.Parameter(
|
||||
'orbitFile',
|
||||
|
@ -95,40 +91,87 @@ from .Sensor import Sensor
|
|||
# 这里采用《Insar原理和应用 》(刘国祥著)中基于空间定位的轨道参数计算方法一章中的内容(Gabriel and Goldstein)
|
||||
# 注意为了方便计算,采用基准时间的方法
|
||||
######################################################
|
||||
import math
|
||||
import datetime
|
||||
import time
|
||||
import scipy as sp
|
||||
from math import sin,cos
|
||||
from scipy.optimize import leastsq
|
||||
import numpy as np
|
||||
|
||||
|
||||
def FindInfomationFromJson(HeaderFile_dom_json, node_path_list):
|
||||
"""
|
||||
在Json文件中,按照指定路径解析出制定节点
|
||||
"""
|
||||
result_node = HeaderFile_dom_json
|
||||
for nodename in node_path_list:
|
||||
result_node = result_node[nodename]
|
||||
return result_node
|
||||
########
|
||||
# 函数列表
|
||||
########
|
||||
def poly1dfunc(p,x): # 一次函数
|
||||
k,b=p
|
||||
return k*x+b
|
||||
|
||||
def poly2dfunc(p,x): # 二次函数
|
||||
k1,k2,b=p
|
||||
return b+k1*x+k2*x*x
|
||||
|
||||
def GetVectorNorm(Vecter):
|
||||
"""
|
||||
得到向量的模
|
||||
"""
|
||||
Vecter = Vecter.reshape(-1,1)
|
||||
Vecter_Norm_pow = np.matmul(Vecter.T,Vecter)
|
||||
return np.sqrt(Vecter_Norm_pow)
|
||||
def poly3dfunc(p,x):
|
||||
k1,k2,k3,b=p
|
||||
return b+k1*x+k2*x*x+k3*x*x*x
|
||||
|
||||
def poly4dfunc(p,x):
|
||||
k1,k2,k3,k4,b=p
|
||||
return b+k1*x+k2*x**2+k3*x**3+k4*x**4
|
||||
|
||||
def XYZOuterM2(A, B):
|
||||
"""
|
||||
外积(叉乘),日后版本换成可以任意维度的外积运算方程
|
||||
args:
|
||||
A:nx3
|
||||
B:nx3
|
||||
"""
|
||||
cnt = A.shape[0]
|
||||
C = np.zeros((cnt, 3))
|
||||
C[:, 0] = A[:, 1] * B[:, 2] - A[:, 2] * B[:, 1]
|
||||
C[:, 1] = A[:, 2] * B[:, 0] - A[:, 0] * B[:, 2]
|
||||
C[:, 2] = A[:, 0] * B[:, 1] - A[:, 1] * B[:, 0]
|
||||
return C
|
||||
def poly5dfunc(p,x):
|
||||
k1,k2,k3,k4,k5,b=p
|
||||
return b+k1*x+k2*x**2+k3*x**3+k4*x**4+k5*x**5
|
||||
|
||||
def poly1derror(p,x,y):
|
||||
return poly1dfunc(p,x)-y
|
||||
|
||||
def poly2derror(p,x,y):
|
||||
return poly2dfunc(p,x)-y
|
||||
|
||||
def poly3derror(p,x,y):
|
||||
return poly3dfunc(p,x)-y
|
||||
|
||||
def poly4derror(p,x,y):
|
||||
return poly4dfunc(p,x)-y
|
||||
|
||||
def poly5derror(p,x,y):
|
||||
return poly5dfunc(p,x)-y
|
||||
|
||||
class orbitVector:
|
||||
def __init__(self,UTCTimes,vx,vy,vz,px,py,pz,dateformat="%Y-%m-%dT%H:%M:%S.%fZ"):
|
||||
self.UTCTime=datetime.datetime.strptime(UTCTimes,dateformat) # 字符串转UTC时间
|
||||
self.time_stamp=self.UTCTime.timestamp() # 时间戳
|
||||
self.vx=vx
|
||||
self.vy=vy
|
||||
self.vz=vz
|
||||
self.px=px
|
||||
self.py=py
|
||||
self.pz=pz
|
||||
self.orbitVector2GG() # 将坐标进行变换
|
||||
self.Check()
|
||||
pass
|
||||
|
||||
def orbitVector2GG(self):
|
||||
Cx=self.py*self.vz-self.pz*self.vy
|
||||
Cy=self.pz*self.vx-self.px*self.vz
|
||||
Cz=self.px*self.vy-self.py*self.vx
|
||||
C=(Cx**2+Cy**2+Cz**2)**0.5
|
||||
self.rho=(self.px**2+self.py**2+self.pz**2)**0.5
|
||||
self.I=math.acos(Cz/C)
|
||||
self.omega=math.asin(self.pz/(self.rho*math.sin(self.I)))
|
||||
self.Omega=math.atan(-Cx/Cy)
|
||||
return [self.rho,self.I,self.omega,self.Omega]
|
||||
|
||||
def Check(self):
|
||||
rho=self.rho
|
||||
I=self.I
|
||||
omega=self.omega
|
||||
Omega=self.Omega
|
||||
Xp=-rho*(cos(omega)*cos(Omega)-sin(omega)*sin(Omega)*cos(I))
|
||||
Yp=-rho*(cos(omega)*sin(Omega)+sin(omega)*cos(Omega)*cos(I))
|
||||
Zp=rho*sin(omega)*sin(I)
|
||||
print("计算插值:",self.UTCTime,self.px,self.py,self.pz,self.vx,self.vy,self.vz,"|",Xp-self.px,Yp-self.py,Zp-self.pz)
|
||||
|
||||
|
||||
class SatelliteOrbit(object):
|
||||
|
@ -260,11 +303,53 @@ class SatelliteOrbitFitPoly(SatelliteOrbit):
|
|||
result_arr=np.zeros((1,7))
|
||||
|
||||
time_float = time_float - self.starttime
|
||||
result_arr[0,0]=time_float
|
||||
#time_arr[0, 4] = time_arr[0, 3] * time_float ** 4
|
||||
time_float=np.array([1,time_float,time_float**2,time_float**3,time_float**4]).reshape(1,5)
|
||||
result_arr=np.matmul(time_float,self.A_arr)
|
||||
return [time_float,result_arr]
|
||||
|
||||
#
|
||||
px=0
|
||||
py=0
|
||||
pz=0
|
||||
vx=0
|
||||
vy=0
|
||||
vz=0
|
||||
for ii in range(self.polynum):
|
||||
px+=self.A_arr[ii,0]*time_float**ii
|
||||
py+=self.A_arr[ii,1]*time_float**ii
|
||||
pz+=self.A_arr[ii,2]*time_float**ii
|
||||
vx+=self.A_arr[ii,3]*time_float**ii
|
||||
vy+=self.A_arr[ii,4]*time_float**ii
|
||||
vz+=self.A_arr[ii,5]*time_float**ii
|
||||
|
||||
return [time_float,[px,py,pz,vx,vy,vz]]
|
||||
|
||||
def getTimeOrbitStamp(self,UTCStartTime_float):
|
||||
sv=_StateVector()
|
||||
temp_sv=self.SatelliteSpaceState(UTCStartTime_float)
|
||||
sv.timeStamp=datetime.datetime.fromtimestamp(UTCStartTime_float)
|
||||
sv.xPosition = temp_sv[1][0,0]
|
||||
sv.yPosition = temp_sv[1][0,1]
|
||||
sv.zPosition = temp_sv[1][0,2]
|
||||
sv.xVelocity = temp_sv[1][0,3]
|
||||
sv.yVelocity = temp_sv[1][0,4]
|
||||
sv.zVelocity = temp_sv[1][0,5]
|
||||
return sv
|
||||
|
||||
def getTimeOrbits(self,UTCStartTime,UTCEndTime,orbitnum=1000):
|
||||
#
|
||||
startTime_stamp=datetime.datetime.strptime(UTCStartTime,"%Y-%m-%dT%H:%M:%S.%f").timestamp()-10
|
||||
endTime_stamp=datetime.datetime.strptime(UTCEndTime,"%Y-%m-%dT%H:%M:%S.%f").timestamp()+10
|
||||
if startTime_stamp>endTime_stamp:
|
||||
raise
|
||||
delta_t=(endTime_stamp-startTime_stamp)/orbitnum
|
||||
extractOrbits=[]
|
||||
#
|
||||
temptime=startTime_stamp
|
||||
while temptime<endTime_stamp:
|
||||
temptime=temptime+delta_t
|
||||
newOrbit=self.getTimeOrbitStamp(temptime)
|
||||
extractOrbits.append(newOrbit)
|
||||
newOrbit=self.getTimeOrbitStamp(endTime_stamp)
|
||||
extractOrbits.append(newOrbit)
|
||||
return extractOrbits # 扩展的轨道节点
|
||||
|
||||
def getSatelliteSpaceState(self, time_array):
|
||||
'''
|
||||
|
@ -303,97 +388,40 @@ class SatelliteOrbitFitPoly(SatelliteOrbit):
|
|||
#result_arr=result_arr_
|
||||
return result_arr_ # 位置矩阵
|
||||
|
||||
|
||||
def ReconstructionSatelliteOrbit(GPSPoints_list, starttime):
|
||||
def ReconstructionSatelliteOrbit(stateVectors, starttime):
|
||||
'''
|
||||
构建卫星轨道
|
||||
args:
|
||||
GPSPoints_list:卫星轨道点
|
||||
starttime:起算时间
|
||||
'''
|
||||
|
||||
# GPSPoint_list=[]
|
||||
# for sv in stateVectors:
|
||||
# GPSPoint=[sv.timeStamp.timestamp(),
|
||||
# sv.xPosition,
|
||||
# sv.yPosition,
|
||||
# sv.zPosition,
|
||||
# sv.xVelocity,
|
||||
# sv.yVelocity,
|
||||
# sv.zVelocity
|
||||
# ]
|
||||
# GPSPoint_list.append(GPSPoint)
|
||||
SatelliteOrbitModel = SatelliteOrbitFitPoly()
|
||||
if SatelliteOrbitModel.ReconstructionSatelliteOrbit(GPSPoints_list, starttime=starttime) is None:
|
||||
if SatelliteOrbitModel.ReconstructionSatelliteOrbit(stateVectors, starttime=starttime) is None:
|
||||
return None
|
||||
|
||||
print("orbit test")
|
||||
distance=[]
|
||||
for gpsPoint in stateVectors:
|
||||
temp_sv=SatelliteOrbitModel.SatelliteSpaceState(gpsPoint[0])
|
||||
sv=np.array(temp_sv[1])
|
||||
temp_distance=sv-gpsPoint[1:]
|
||||
distance.append(temp_distance)
|
||||
distance=np.array(distance)
|
||||
print("orbit max:",np.max(distance))
|
||||
print("orbit min:",np.min(distance))
|
||||
return SatelliteOrbitModel
|
||||
|
||||
|
||||
|
||||
########
|
||||
# 函数列表
|
||||
########
|
||||
def poly1dfunc(p,x): # 一次函数
|
||||
k,b=p
|
||||
return k*x+b
|
||||
|
||||
def poly2dfunc(p,x): # 二次函数
|
||||
k1,k2,b=p
|
||||
return b+k1*x+k2*x*x
|
||||
|
||||
def poly3dfunc(p,x):
|
||||
k1,k2,k3,b=p
|
||||
return b+k1*x+k2*x*x+k3*x*x*x
|
||||
|
||||
def poly4dfunc(p,x):
|
||||
k1,k2,k3,k4,b=p
|
||||
return b+k1*x+k2*x**2+k3*x**3+k4*x**4
|
||||
|
||||
def poly5dfunc(p,x):
|
||||
k1,k2,k3,k4,k5,b=p
|
||||
return b+k1*x+k2*x**2+k3*x**3+k4*x**4+k5*x**5
|
||||
|
||||
def poly1derror(p,x,y):
|
||||
return poly1dfunc(p,x)-y
|
||||
|
||||
def poly2derror(p,x,y):
|
||||
return poly2dfunc(p,x)-y
|
||||
|
||||
def poly3derror(p,x,y):
|
||||
return poly3dfunc(p,x)-y
|
||||
|
||||
def poly4derror(p,x,y):
|
||||
return poly4dfunc(p,x)-y
|
||||
|
||||
def poly5derror(p,x,y):
|
||||
return poly5dfunc(p,x)-y
|
||||
|
||||
class orbitVector:
|
||||
def __init__(self,UTCTimes,vx,vy,vz,px,py,pz,dateformat="%Y-%m-%dT%H:%M:%S.%f"):
|
||||
self.UTCTime=datetime.datetime.strptime(UTCTimes,dateformat) # 字符串转UTC时间
|
||||
self.time_stamp=self.UTCTime.timestamp() # 时间戳
|
||||
self.vx=vx
|
||||
self.vy=vy
|
||||
self.vz=vz
|
||||
self.px=px
|
||||
self.py=py
|
||||
self.pz=pz
|
||||
self.orbitVector2GG() # 将坐标进行变换
|
||||
self.Check()
|
||||
pass
|
||||
|
||||
def orbitVector2GG(self):
|
||||
Cx=self.py*self.vz-self.pz*self.vy # 叉乘
|
||||
Cy=self.pz*self.vx-self.px*self.vz
|
||||
Cz=self.px*self.vy-self.py*self.vx
|
||||
C=(Cx**2+Cy**2+Cz**2)**0.5
|
||||
self.rho=(self.px**2+self.py**2+self.pz**2)**0.5
|
||||
self.I=math.acos(Cz/C)
|
||||
self.omega=math.asin(self.pz/(self.rho*math.sin(self.I)))
|
||||
self.Omega=math.atan(Cx*(-1)/Cy)
|
||||
|
||||
return [self.rho,self.I,self.omega,self.Omega]
|
||||
|
||||
def Check(self):
|
||||
rho=self.rho
|
||||
I=self.I
|
||||
omega=self.omega
|
||||
Omega=self.Omega
|
||||
Xp=rho*(cos(omega)*cos(Omega)-sin(omega)*sin(Omega)*cos(I))
|
||||
Yp=rho*(cos(omega)*sin(Omega)+sin(omega)*cos(Omega)*cos(I))
|
||||
Zp=rho*sin(Omega)*sin(I)
|
||||
print("计算插值:",self.UTCTime,self.px,self.py,self.pz,self.vx,self.vy,self.vz,"|",abs(Xp)-abs(self.px),abs(Yp)-abs(self.py),abs(Zp)-abs(self.pz))
|
||||
|
||||
|
||||
class SARorbit(object):
|
||||
# 作为自定义轨道计算基类
|
||||
# 定义几个基本方法:addvector(),createOrbit(),getTime(),getTimes()
|
||||
|
@ -417,13 +445,13 @@ class SARorbit(object):
|
|||
return None
|
||||
|
||||
def getTimeOrbitStamp(self,StampTime):
|
||||
utcStr=datetime.datetime.fromtimestamp(StampTime).strftime("%Y-%m-%dT%H:%M:%S.%f")
|
||||
utcStr=datetime.datetime.fromtimestamp(StampTime).strftime("%Y-%m-%dT%H:%M:%S.%fZ")
|
||||
return self.getTimeOrbit(utcStr)
|
||||
|
||||
def getTimeOrbits(self,UTCStartTime,UTCEndTime,orbitnum=100):
|
||||
#
|
||||
startTime_stamp=datetime.datetime.strptime(UTCStartTime,"%Y-%m-%dT%H:%M:%S.%f").timestamp()-0.2
|
||||
endTime_stamp=datetime.datetime.strptime(UTCEndTime,"%Y-%m-%dT%H:%M:%S.%f").timestamp()+0.2
|
||||
startTime_stamp=datetime.datetime.strptime(UTCStartTime,"%Y-%m-%dT%H:%M:%S.%fZ").timestamp()-10
|
||||
endTime_stamp=datetime.datetime.strptime(UTCEndTime,"%Y-%m-%dT%H:%M:%S.%fZ").timestamp()+10
|
||||
if startTime_stamp>endTime_stamp:
|
||||
raise
|
||||
delta_t=(endTime_stamp-startTime_stamp)*1000/orbitnum
|
||||
|
@ -490,7 +518,7 @@ class GGorbit(SARorbit):
|
|||
|
||||
# 获取计算结果
|
||||
def getTimeOrbit(self,UTCTime):
|
||||
staptime=datetime.datetime.strptime(UTCTime,"%Y-%m-%dT%H:%M:%S.%f").timestamp()
|
||||
staptime=datetime.datetime.strptime(UTCTime,"%Y-%m-%dT%H:%M:%S.%fZ").timestamp()
|
||||
dtime=0.0001
|
||||
[Xp,Yp,Zp]=self.getXYZ(staptime)
|
||||
[Xp_temp,Yp_temp,Zp_temp]=self.getXYZ(staptime+dtime)
|
||||
|
@ -548,7 +576,7 @@ class polyorbit(SARorbit):
|
|||
|
||||
class GF3_SLC(Sensor):
|
||||
"""
|
||||
A Class representing GF3 data
|
||||
A Class representing GF3_SLC data
|
||||
"""
|
||||
|
||||
family='GF3_SLC'
|
||||
|
@ -600,12 +628,15 @@ class GF3_SLC(Sensor):
|
|||
# azimuthPixelSize = self.product.imageAttributes.rasterAttributes.sampledLineSpacing # ground spacing in meters
|
||||
totalProcessedAzimuthBandwidth = self.product.imageInfo.eqvPRF
|
||||
prf = self.product.imageInfo.eqvPRF # effective PRF can be double original, suggested by Piyush
|
||||
prf_s = ori_prf * np.ceil(totalProcessedAzimuthBandwidth / ori_prf) # effective PRF can be double original, suggested by Piyush
|
||||
# print("effective PRF %f, original PRF %f" % (prf, orig_prf) )
|
||||
print('----------------------------------------------------')
|
||||
print("mission",mission)
|
||||
print("swath",swath)
|
||||
print("frequency",frequency)
|
||||
print("ori_prf",ori_prf)
|
||||
print("prf",prf)
|
||||
print("prf_s",prf_s)
|
||||
print("rangePixelSize",rangePixelSize)
|
||||
print("rangeSamplingRate",rangeSamplingRate)
|
||||
print("pulseLength",pulseLength)
|
||||
|
@ -638,7 +669,7 @@ class GF3_SLC(Sensor):
|
|||
####Populate instrument
|
||||
instrument = self.frame.getInstrument()
|
||||
instrument.setRadarFrequency(frequency)
|
||||
instrument.setPulseRepetitionFrequency(prf)
|
||||
instrument.setPulseRepetitionFrequency(prf_s)
|
||||
instrument.setPulseLength(pulseLength)
|
||||
instrument.setChirpSlope(pulseBandwidth/pulseLength)
|
||||
instrument.setIncidenceAngle(incidenceAngle)
|
||||
|
@ -648,7 +679,6 @@ class GF3_SLC(Sensor):
|
|||
instrument.setBeamNumber(swath)
|
||||
instrument.setPulseLength(pulseLength)
|
||||
|
||||
|
||||
#Populate Frame
|
||||
#self.frame.setSatelliteHeight(height)
|
||||
self.frame.setSensingStart(dataStartTime) # Date time object for UTC of first line
|
||||
|
@ -667,19 +697,15 @@ class GF3_SLC(Sensor):
|
|||
|
||||
|
||||
self.frame.getOrbit().setOrbitSource('EOF')
|
||||
# self.frame.getOrbit().setOrbitSource(self.product.sourceAttributes.orbitAndAttitude.orbitInformation.orbitDataFile)
|
||||
|
||||
print("======= 修改轨道代码部分: =================")
|
||||
if (self.orbitFile is None) and (self.orbitDirectory is None):
|
||||
print('orbitFile and orbitDirectory are None')
|
||||
self.extractOrbit()
|
||||
|
||||
elif (self.orbitDirectory is not None):
|
||||
print('orbitDirectory is None')
|
||||
self.orbitFile = findPreciseOrbit(self.orbitDirectory, self.frame.getOrbit().getOrbitSource(), self.frame.sensingStart.year)
|
||||
|
||||
if self.orbitFile is not None:
|
||||
print('orbitFile is None')
|
||||
self.extractPreciseOrbit(self.orbitFile, self.frame.sensingStart, self.frame.sensingStop)
|
||||
|
||||
|
||||
|
@ -689,15 +715,10 @@ class GF3_SLC(Sensor):
|
|||
# note that RS2 Doppler values are estimated at time dc.dopplerCentroidReferenceTime,
|
||||
# so the values might need to be adjusted for ISCE usage
|
||||
# added EJF 2015/08/17
|
||||
|
||||
# dc = self.product.imageGenerationParameters.dopplerCentroid
|
||||
# poly = dc.dopplerCentroidCoefficients
|
||||
poly = self.product.processInfo.DopplerCentroidCoefficients
|
||||
# need to convert units
|
||||
poly[1] = poly[1]/rangeSamplingRate
|
||||
poly[2] = poly[2]/rangeSamplingRate**2
|
||||
poly[3] = poly[3]/rangeSamplingRate**3
|
||||
poly[4] = poly[4]/rangeSamplingRate**4
|
||||
self.doppler_coeff = poly
|
||||
|
||||
# similarly save Doppler azimuth fm rate values, converting units
|
||||
|
@ -706,22 +727,12 @@ class GF3_SLC(Sensor):
|
|||
# note that RS2 Doppler values are estimated at time dc.dopplerRateReferenceTime,
|
||||
# so the values might need to be adjusted for ISCE usage
|
||||
# added EJF 2015/08/17
|
||||
|
||||
# dr = self.product.imageGenerationParameters.dopplerRateValues
|
||||
# fmpoly = dr.dopplerRateValuesCoefficients
|
||||
|
||||
fmpoly = self.product.processInfo.DopplerRateValuesCoefficients
|
||||
# need to convert units
|
||||
fmpoly[1] = fmpoly[1]/rangeSamplingRate
|
||||
fmpoly[2] = fmpoly[2]/rangeSamplingRate**2
|
||||
fmpoly[3] = fmpoly[3]/rangeSamplingRate**3
|
||||
fmpoly[4] = fmpoly[4]/rangeSamplingRate**4
|
||||
self.azfmrate_coeff = fmpoly
|
||||
|
||||
# print("poly",poly)
|
||||
# print("fmpoly",fmpoly)
|
||||
# print('------------------------------------------------------')
|
||||
|
||||
# now calculate effective PRF from the azimuth line spacing after we have the orbit info EJF 2015/08/15
|
||||
# this does not work because azimuth spacing is on ground. Instead use bandwidth ratio calculated above EJF
|
||||
# SCHvelocity = self.frame.getSchVelocity()
|
||||
|
@ -740,85 +751,46 @@ class GF3_SLC(Sensor):
|
|||
print("构建新的轨道程序代码:")
|
||||
tempOrbit = GGorbit()
|
||||
|
||||
self.frame.getOrbit().setOrbitSource('Header: ' + self.frame.getOrbit().getOrbitSource())
|
||||
# stateVectors = self.product.sourceAttributes.orbitAndAttitude.orbitInformation.stateVectors
|
||||
stateVectors = self.product.GPS.gpsParam
|
||||
|
||||
dataStartTime = self.product.imageInfo.imagingStartTime
|
||||
dataStopTime = self.product.imageInfo.imagingEndTime
|
||||
dataCenterTime = self.product.platform.CenterTime
|
||||
|
||||
startTime_s = dataStartTime.timestamp()
|
||||
stopTime_s = dataStopTime.timestamp()
|
||||
centerTime_s = dataCenterTime.timestamp()
|
||||
|
||||
num = 0
|
||||
dataStartTime = self.frame.sensingStart.timestamp()
|
||||
dataStopTime = self.frame.sensingStop.timestamp()
|
||||
time_list = []
|
||||
self.frame.getOrbit().setOrbitSource('Header: ' + self.frame.getOrbit().getOrbitSource())
|
||||
stateVectors = self.product.GPS.gpsParam
|
||||
for i in range(len(stateVectors)):
|
||||
# print(i,stateVectors[i].timeStamp)
|
||||
# tempOrbit.addvector(stateVectors[i].timeStamp.strftime("%Y-%m-%dT%H:%M:%S.%f"),
|
||||
# tempOrbit.addvector(stateVectors[i].timeStamp.strftime("%Y-%m-%dT%H:%M:%S.%fZ"),
|
||||
# stateVectors[i].xVelocity, stateVectors[i].yVelocity, stateVectors[i].zVelocity,
|
||||
# stateVectors[i].xPosition, stateVectors[i].yPosition, stateVectors[i].zPosition)
|
||||
if stateVectors[i].timeStamp>dataStartTime and stateVectors[i].timeStamp < dataStopTime:
|
||||
# tempOrbit.addvector(stateVectors[i].timeStamp.strftime("%Y-%m-%dT%H:%M:%S.%f"),
|
||||
# stateVectors[i].xVelocity, stateVectors[i].yVelocity, stateVectors[i].zVelocity,
|
||||
# stateVectors[i].xPosition, stateVectors[i].yPosition, stateVectors[i].zPosition)
|
||||
# time_list.append(stateVectors[i].timeStamp)
|
||||
time_list.append([stateVectors[i].timeStamp.timestamp(),
|
||||
stateVectors[i].xPosition, stateVectors[i].yPosition, stateVectors[i].zPosition,
|
||||
stateVectors[i].xVelocity, stateVectors[i].yVelocity, stateVectors[i].zVelocity])
|
||||
num += 1
|
||||
# sv= StateVector()
|
||||
# sv.setTime(stateVectors[i].timeStamp)
|
||||
# sv.setPosition([stateVectors[i].xPosition, stateVectors[i].yPosition, stateVectors[i].zPosition])
|
||||
# sv.setVelocity([stateVectors[i].xVelocity, stateVectors[i].yVelocity, stateVectors[i].zVelocity])
|
||||
# self.frame.getOrbit().addStateVector(sv) # 插值结果写进了轨道模型中
|
||||
# num+=1
|
||||
|
||||
model = ReconstructionSatelliteOrbit(time_list, starttime=centerTime_s)
|
||||
time_dif = ((stopTime_s + 30) - (startTime_s - 30)) / 1000
|
||||
model = ReconstructionSatelliteOrbit(time_list, starttime=dataStartTime)
|
||||
time_dif = ((dataStopTime + 10) - (dataStartTime - 10)) / 1000
|
||||
time = np.zeros((1000, 1))
|
||||
for i in range(1000):
|
||||
time[i,:]=((startTime_s - 10) + time_dif * i)
|
||||
time[i,:]=((dataStartTime - 10) + time_dif * i)
|
||||
t = time.reshape(-1)
|
||||
|
||||
statepoints = model.getSatelliteSpaceState(t)
|
||||
|
||||
# print("初始插值-----------------------------------------------------")
|
||||
# self.frame.setSensingStart(datetime.datetime.fromtimestamp(t[2]))
|
||||
# self.frame.setSensingStop(datetime.datetime.fromtimestamp(t[len(t)-3]))
|
||||
|
||||
self.frame.setSensingStart(dataStartTime)
|
||||
self.frame.setSensingStop(dataStopTime)
|
||||
|
||||
diffTime = DTUtil.timeDeltaToSeconds(self.frame.sensingStop-self.frame.sensingStart)/2.0
|
||||
sensingMid = self.frame.sensingStart + datetime.timedelta(microseconds=int(diffTime*1e6))
|
||||
self.frame.setSensingMid(sensingMid)
|
||||
|
||||
# planet = self.frame.instrument.platform.planet
|
||||
# orbExt = OrbitExtender(planet=planet)
|
||||
# orbExt.configure()
|
||||
# newOrb = orbExt.extendOrbit(tempOrbit)
|
||||
# tempOrbit.createOrbit() # 构建轨道模型
|
||||
|
||||
# newOrb=tempOrbit.getTimeOrbits(self.frame.sensingStart.strftime("%Y-%m-%dT%H:%M:%S.%f"),
|
||||
# self.frame.sensingStop.strftime("%Y-%m-%dT%H:%M:%S.%f"),
|
||||
# orbitnum=500)
|
||||
# for svect in newOrb:
|
||||
# sv= StateVector()
|
||||
# sv.setTime(svect.UTCTime)
|
||||
# sv.setPosition([svect.px,svect.py,svect.pz])
|
||||
# sv.setVelocity([svect.vx,svect.vy,svect.vz])
|
||||
# self.frame.getOrbit().addStateVector(sv) # 插值结果写进了轨道模型中
|
||||
|
||||
for i, value in zip(range(len(statepoints)), statepoints):
|
||||
sv= StateVector()
|
||||
sv.setTime(datetime.datetime.fromtimestamp(t[i]))
|
||||
sv.setPosition([value[0],value[1],value[2]])
|
||||
sv.setVelocity([value[3],value[4],value[5]])
|
||||
self.frame.getOrbit().addStateVector(sv) # 插值结果写进了轨道模型中
|
||||
# print("插值后的gps点", datetime.datetime.fromtimestamp(t[i]),value[0],value[1],value[2],value[3],value[4],value[5])
|
||||
print('Orbits list len is %d' %num)
|
||||
|
||||
# tempOrbit.createOrbit() # 构建轨道模型
|
||||
|
||||
# newOrb=tempOrbit.getTimeOrbits(self.frame.sensingStart.strftime("%Y-%m-%dT%H:%M:%S.%fZ"),
|
||||
# self.frame.sensingStop.strftime("%Y-%m-%dT%H:%M:%S.%fZ"),
|
||||
# orbitnum=500)
|
||||
# for svect in newOrb:
|
||||
# sv= StateVector()
|
||||
# sv.setTime(svect.UTCTime)
|
||||
# sv.setPosition([svect.px,svect.py,svect.pz])
|
||||
# sv.setVelocity([svect.vx,svect.vy,svect.vz])
|
||||
# self.frame.getOrbit().addStateVector(sv)
|
||||
|
||||
print('Successfully read state vectors from product XML')
|
||||
|
||||
def extractPreciseOrbit(self, orbitfile, tstart, tend):
|
||||
|
@ -877,7 +849,7 @@ class GF3_SLC(Sensor):
|
|||
lgth = self.frame.getNumberOfLines()
|
||||
# lineFlip = (self.product.imageAttributes.rasterAttributes.lineTimeOrdering.upper() == 'DECREASING')
|
||||
# pixFlip = (self.product.imageAttributes.rasterAttributes.pixelTimeOrdering.upper() == 'DECREASING')
|
||||
lineFlip = True
|
||||
lineFlip = False
|
||||
pixFlip = False
|
||||
|
||||
src = gdal.Open(self.tiff.strip(), gdal.GA_ReadOnly)
|
||||
|
@ -888,7 +860,7 @@ class GF3_SLC(Sensor):
|
|||
imag = src.GetRasterBand(2).ReadAsArray(0,0,width,lgth)
|
||||
|
||||
if (real is None) or (imag is None):
|
||||
raise Exception('Input GF3 SLC seems to not be a 2 band Int16 image.')
|
||||
raise Exception('Input GF3_SLC SLC seems to not be a 2 band Int16 image.')
|
||||
|
||||
data = real+cJ*imag
|
||||
|
||||
|
@ -938,7 +910,6 @@ class GF3_SLC(Sensor):
|
|||
t0 = self.product.processInfo.DopplerParametersReferenceTime
|
||||
poly = self.product.processInfo.DopplerCentroidCoefficients
|
||||
|
||||
|
||||
fd_mid = 0.0
|
||||
for kk in range(len(poly)):
|
||||
fd_mid += poly[kk] * (tMid - t0)**kk
|
||||
|
@ -952,10 +923,10 @@ class GF3_SLC(Sensor):
|
|||
####For roiApp
|
||||
####More accurate
|
||||
from isceobj.Util import Poly1D
|
||||
|
||||
coeffs = poly
|
||||
dr = self.frame.getInstrument().getRangePixelSize()
|
||||
rref = 0.5 * Const.c * t0
|
||||
# rref = Const.c * t0
|
||||
r0 = self.frame.getStartingRange()
|
||||
norm = 0.5*Const.c/dr
|
||||
|
||||
|
@ -963,44 +934,18 @@ class GF3_SLC(Sensor):
|
|||
for ind, val in enumerate(coeffs):
|
||||
dcoeffs.append( val / (norm**ind))
|
||||
|
||||
|
||||
poly = Poly1D.Poly1D()
|
||||
poly.initPoly(order=len(coeffs)-1)
|
||||
poly.setMean( (rref - r0)/dr - 1.0)
|
||||
poly.setCoeffs(dcoeffs)
|
||||
|
||||
# print("****" * 10)
|
||||
# print(Const.c)
|
||||
# print(rref)
|
||||
# print(dr)
|
||||
# print(dcoeffs)
|
||||
# print(r0)
|
||||
# print("****" * 10)
|
||||
poly = Poly1D.Poly1D()
|
||||
poly.initPoly(order=len(coeffs)-1)
|
||||
poly.setMean( (rref - r0)/dr - 1.0)
|
||||
poly.setCoeffs(dcoeffs)
|
||||
|
||||
print('getNumberOfSamples', self.frame.getNumberOfSamples())
|
||||
pix = np.linspace(0, self.frame.getNumberOfSamples(), num=len(coeffs)+1)
|
||||
|
||||
evals = poly(pix)
|
||||
fit = np.polyfit(pix,evals, len(coeffs)-1)
|
||||
self.frame._dopplerVsPixel = list(fit[::-1])
|
||||
# print("---- radar ------------------------------------------print")
|
||||
# print("t0",t0)
|
||||
# print("****" * 10)
|
||||
# print('lightspeed',Const.c)
|
||||
# print('rref',rref)
|
||||
# print('dr',dr)
|
||||
# print('dcoeff',dcoeffs)
|
||||
# print('r0',r0)
|
||||
# print("****" * 10)
|
||||
# print('pix',pix)
|
||||
# print('evals',evals)
|
||||
# print('fit',fit)
|
||||
# print('Doppler Fit: ', fit[::-1])
|
||||
# print('---------------------------------------------------')
|
||||
|
||||
|
||||
return quadratic
|
||||
|
||||
|
|
|
@ -89,6 +89,7 @@ def saveTiff(target_data_path,xsize,ysize,gt,srs,target_arr):
|
|||
driver = gdal.GetDriverByName('GTiff') # 数据类型必须有,因为要计算需要多大内存空间
|
||||
tiff_geo=driver.Create(target_data_path, int(xsize)+1, int(ysize)+1, 1, gdal.GDT_Float32)
|
||||
tiff_geo.GetRasterBand(1).WriteArray(target_arr)
|
||||
tiff_geo.GetRasterBand(1).SetNoDataValue(-9999)
|
||||
tiff_geo.SetGeoTransform(gt)
|
||||
tiff_geo.SetProjection(srs.ExportToWkt())
|
||||
del tiff_geo
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<Root>
|
||||
<TaskID>CSAR_202107275419_0001-0</TaskID>
|
||||
<WorkSpace>E:\Result_GF3\</WorkSpace>
|
||||
<WorkSpace>D:\micro\WorkSpace\</WorkSpace>
|
||||
<AlgCompt>
|
||||
<DataTransModel>File</DataTransModel>
|
||||
<Artificial>ElementAlg</Artificial>
|
||||
|
@ -54,8 +54,8 @@
|
|||
<DataType>zip</DataType>
|
||||
<ParaSource>Man</ParaSource>
|
||||
<ParaValue>
|
||||
E:\GF3Data\AtmophericDealy\GF3_SAY_FSI_001614_E113.2_N34.5_20161129_L1A_HHHV_L10002015686.tar.gz;
|
||||
E:\GF3Data\AtmophericDealy\GF3_KAS_FSI_002034_E113.4_N34.7_20161228_L1A_HHHV_L10002077539.tar.gz
|
||||
D:\micro\microproduct_depdence\GF3-Deformation\download\cls\GF3_SAY_FSI_001614_E113.2_N34.5_20161129_L1A_HHHV_L10002015686.tar.gz;
|
||||
D:\micro\microproduct_depdence\GF3-Deformation\download\cls\GF3_KAS_FSI_002034_E113.4_N34.7_20161228_L1A_HHHV_L10002077539.tar.gz
|
||||
</ParaValue>
|
||||
<EnModification>True</EnModification>
|
||||
<EnMultipleChoice>False</EnMultipleChoice>
|
||||
|
@ -84,9 +84,9 @@
|
|||
<ParaChsName>高程数据路径</ParaChsName>
|
||||
<Description>高程数据数据。数据来源:30米 ASTGTM2, 数据格式:tif。备注:数据的经纬度范围必须是整数</Description>
|
||||
<ParaType>File</ParaType>
|
||||
<DataType>zip</DataType>
|
||||
<DataType>File</DataType>
|
||||
<ParaSource>Man</ParaSource>
|
||||
<ParaValue>E:\GF3Data\Dem-c-sar\CASR_dem_ASTGTM2_N34E113_dem.zip;E:\GF3Data\Dem-c-sar\CASR_dem_ASTGTM2_N34E114_dem.zip;E:\GF3Data\Dem-c-sar\CASR_dem_ASTGTM2_N35E113_dem.zip;E:\GF3Data\Dem-c-sar\CASR_dem_ASTGTM2_N35E114_dem.zip</ParaValue>
|
||||
<ParaValue>D:\micro\microproduct_depdence\GF3-Deformation\dem</ParaValue>
|
||||
<EnModification>True</EnModification>
|
||||
<EnMultipleChoice>False</EnMultipleChoice>
|
||||
<Control>File</Control>
|
||||
|
@ -120,7 +120,7 @@
|
|||
<ParaType>File</ParaType>
|
||||
<DataType>tar.gz</DataType>
|
||||
<ParaSource>Cal</ParaSource>
|
||||
<ParaValue>E:\Result_GF3\Dem\Output\GF3_SAY_FSI_001614_E113.2_N34.5_20161129_L1A_HHHV_L10002015686-DEM.tar.gz</ParaValue>
|
||||
<ParaValue>D:\micro\WorkSpace\Dem\Output\GF3_SAY_FSI_001614_E113.2_N34.5_20161129_L1A_HHHV_L10002015686-DEM.tar.gz</ParaValue>
|
||||
</Parameter>
|
||||
</Outputs>
|
||||
</AlgCompt>
|
||||
|
|
|
@ -234,15 +234,6 @@ class Orbit(Component):
|
|||
self._orbitSource = source or None
|
||||
self._referenceFrame = None
|
||||
self._stateVectors.configure()
|
||||
""" 自定义 """
|
||||
self.oribitStartTime = None
|
||||
self.A_arr = None
|
||||
self.polynum = None
|
||||
""" 多普勒参数"""
|
||||
self.refrenceTime = None
|
||||
self.dopperPoly = []
|
||||
""" 卫星名称"""
|
||||
self.sessionMode = None
|
||||
#self._stateVectors = stateVectors or []
|
||||
self._cpStateVectors = []
|
||||
type(self._stateVectors)
|
||||
|
@ -269,69 +260,6 @@ class Orbit(Component):
|
|||
# #pack the orbit into stateVectors
|
||||
# self._packOrbit(cpStateVectors[0], cpStateVectors[1], cpStateVectors[2], cpStateVectors[3])
|
||||
|
||||
def setsessionMode(self, SessionMode):
|
||||
self.sessionMode = SessionMode
|
||||
|
||||
def setPolyParams(self, polynum, orbitStartTime, A_arr):
|
||||
self.polynum = polynum
|
||||
self.oribitStartTime = orbitStartTime
|
||||
self.A_arr = A_arr
|
||||
|
||||
def setDoppler(self, refrenceTime, dopperPoly):
|
||||
self.refrenceTime = refrenceTime
|
||||
self.dopperPoly = dopperPoly
|
||||
pass
|
||||
|
||||
def getSatelliteSpaceState(self, time_float_datetime):
|
||||
'''
|
||||
逐像素求解
|
||||
根据时间戳,返回对应时间的卫星的轨迹状态,会自动计算与起算时间之差
|
||||
args:
|
||||
time_float:时间戳
|
||||
return:
|
||||
State_list:[time,Xp,Yp,Zp,Vx,Vy,Vz]
|
||||
'''
|
||||
time_float = time_float_datetime.timestamp()
|
||||
time_float = time_float - self.oribitStartTime
|
||||
#
|
||||
px = 0
|
||||
py = 0
|
||||
pz = 0
|
||||
vx = 0
|
||||
vy = 0
|
||||
vz = 0
|
||||
for ii in range(self.polynum):
|
||||
px += self.A_arr[ii][0] * time_float ** ii
|
||||
py += self.A_arr[ii][1] * time_float ** ii
|
||||
pz += self.A_arr[ii][2] * time_float ** ii
|
||||
vx += self.A_arr[ii][3] * time_float ** ii
|
||||
vy += self.A_arr[ii][4] * time_float ** ii
|
||||
vz += self.A_arr[ii][5] * time_float ** ii
|
||||
sv = StateVector()
|
||||
sv.setTime(time_float_datetime)
|
||||
sv.setPosition([px, py, pz])
|
||||
sv.setVelocity([vx, vy, vz])
|
||||
return sv
|
||||
|
||||
def getTimeOrbits(self, UTCStartTime, UTCEndTime, orbitnum=1000):
|
||||
#
|
||||
startTime_stamp = datetime.datetime.strptime(UTCStartTime, "%Y-%m-%dT%H:%M:%S.%f") - datetime.timedelta(
|
||||
seconds=30)
|
||||
endTime_stamp = datetime.datetime.strptime(UTCEndTime, "%Y-%m-%dT%H:%M:%S.%f") + datetime.timedelta(seconds=30)
|
||||
if startTime_stamp > endTime_stamp:
|
||||
raise
|
||||
delta_t = (endTime_stamp.timestamp() - startTime_stamp.timestamp()) / orbitnum
|
||||
extractOrbits = []
|
||||
#
|
||||
temptime = startTime_stamp
|
||||
while temptime < endTime_stamp:
|
||||
temptime = temptime + datetime.timedelta(seconds=delta_t)
|
||||
newOrbit = self.getSatelliteSpaceState(temptime)
|
||||
extractOrbits.append(newOrbit)
|
||||
newOrbit = self.getSatelliteSpaceState(endTime_stamp)
|
||||
extractOrbits.append(newOrbit)
|
||||
return extractOrbits # 扩展的轨道节点
|
||||
|
||||
def adaptToRender(self):
|
||||
import copy
|
||||
# make a copy of the stateVectors to restore it after dumping
|
||||
|
@ -448,11 +376,10 @@ class Orbit(Component):
|
|||
@raises NotImplementedError: if the desired interpolation method
|
||||
cannot be decoded
|
||||
"""
|
||||
if self.sessionMode is None:
|
||||
if time not in self:
|
||||
raise ValueError(
|
||||
"Time stamp (%s) falls outside of the interpolation interval [%s:%s]" % (
|
||||
time, self.minTime, self.maxTime)
|
||||
"Time stamp (%s) falls outside of the interpolation interval [%s:%s]" %
|
||||
(time,self.minTime,self.maxTime)
|
||||
)
|
||||
|
||||
if method == 'linear':
|
||||
|
@ -466,13 +393,9 @@ class Orbit(Component):
|
|||
"Orbit interpolation type %s, is not implemented" % method
|
||||
)
|
||||
return newSV
|
||||
elif self.sessionMode == "GF3" or self.sessionMode == "GF3B" or self.sessionMode == "GF3C":
|
||||
print("GF3轨道插值")
|
||||
return self.getSatelliteSpaceState(time)
|
||||
|
||||
## Isn't orbit redundant? -compute the method based on name
|
||||
def interpolate(self, time, method='linear'):
|
||||
if self.sessionMode is None:
|
||||
if time not in self:
|
||||
raise ValueError("Time stamp (%s) falls outside of the interpolation interval [%s:%s]"
|
||||
% (time,self.minTime,self.maxTime))
|
||||
|
@ -483,9 +406,6 @@ class Orbit(Component):
|
|||
raise NotImplementedError(
|
||||
"Orbit interpolation type %s, is not implemented" % method
|
||||
)
|
||||
elif self.sessionMode == "GF3" or self.sessionMode == "GF3B" or self.sessionMode == "GF3C":
|
||||
print("GF3轨道插值")
|
||||
return self.getSatelliteSpaceState(time)
|
||||
|
||||
# interpolateOrbit = interpolate
|
||||
|
||||
|
@ -1078,7 +998,7 @@ class Orbit(Component):
|
|||
pointOnGround = rdr2geo
|
||||
|
||||
def geo2rdr(self, llh, side=-1, planet=None,
|
||||
doppler=None, wvl=None, isLT1AB=True):
|
||||
doppler=None, wvl=None):
|
||||
'''
|
||||
Takes a lat, lon, height triplet and returns azimuth time and range.
|
||||
Assumes zero doppler for now.
|
||||
|
@ -1094,79 +1014,16 @@ class Orbit(Component):
|
|||
refElp = Planet(pname='Earth').ellipsoid
|
||||
else:
|
||||
refElp = planet.ellipsoid
|
||||
# print('llh', llh)
|
||||
|
||||
xyz = refElp.llh_to_xyz(llh)
|
||||
|
||||
delta = (self.maxTime - self.minTime).total_seconds() * 0.5
|
||||
tguess = self.minTime # + datetime.timedelta(seconds = delta)
|
||||
# print("Orbits.py 1024-----------------------------------------------")
|
||||
# print("self.maxTime", self.maxTime)
|
||||
# print("self.minTime", self.minTime)
|
||||
# print(delta)
|
||||
# print(tguess)
|
||||
|
||||
LIGHTSPEED = 299792458
|
||||
if wvl == 0:
|
||||
isLT1AB = False
|
||||
if isLT1AB and (self.sessionMode == "GF3" or self.sessionMode == "GF3B" or self.sessionMode == "GF3C"): # 专门针对 LT1AB
|
||||
print("LT1AB orbit.....")
|
||||
dt = 0.0001
|
||||
outOfBounds = False
|
||||
for ii in range(51):
|
||||
try:
|
||||
sv = self.getSatelliteSpaceState(tguess + datetime.timedelta(seconds=dt)) # 获取卫星的 位置、速度
|
||||
except Exception as e:
|
||||
print(e)
|
||||
outOfBounds = True
|
||||
break
|
||||
|
||||
pos1 = np.array(sv.getPosition()) # 卫星坐标
|
||||
vel1 = np.array(sv.getVelocity()) # 卫星速度
|
||||
dr1 = pos1 - xyz
|
||||
rng1 = np.linalg.norm(dr1) # 斜距
|
||||
|
||||
# ((R_s1.array() * V_s1.array()).rowwise().sum().array() * (-2) / (R * this->lamda))[0];
|
||||
FdTheory1 = -2 / (rng1 * wvl) * np.dot(dr1, vel1)
|
||||
|
||||
try:
|
||||
sv = self.getSatelliteSpaceState(tguess)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
outOfBounds = True
|
||||
break
|
||||
pos2 = np.array(sv.getPosition()) # 卫星坐标
|
||||
vel2 = np.array(sv.getVelocity()) # 卫星速度
|
||||
dr2 = pos2 - xyz
|
||||
rng = np.linalg.norm(dr2) # 斜距
|
||||
FdTheory2 = -2 / (rng * wvl) * np.dot(dr2, vel2)
|
||||
TSR = rng * 2 / LIGHTSPEED - self.refrenceTime # nx1
|
||||
|
||||
FdNumerical = 0
|
||||
# FdNumerical=FdNumerical+self.dopperPoly[0]*TSR**0
|
||||
# FdNumerical=FdNumerical+self.dopperPoly[1]*TSR**1
|
||||
# FdNumerical=FdNumerical+self.dopperPoly[2]*TSR**2
|
||||
# FdNumerical=FdNumerical+self.dopperPoly[3]*TSR**3
|
||||
|
||||
fdopper_grad = (FdTheory1 - FdTheory2) / dt
|
||||
inc_t = (FdTheory2 - FdNumerical) / fdopper_grad
|
||||
# print(inc_t,rng,FdNumerical,FdTheory2,tguess,pos2)
|
||||
tguess = tguess - datetime.timedelta(seconds=inc_t)
|
||||
|
||||
if abs(inc_t) < 1e-6:
|
||||
break
|
||||
else:
|
||||
t_prev_guess = tguess
|
||||
# print(outOfBounds)
|
||||
# print("end ------------------------------------------------------------\n")
|
||||
if outOfBounds:
|
||||
raise Exception('Interpolation time out of bounds')
|
||||
else:
|
||||
tguess = self.minTime + datetime.timedelta(seconds = delta)
|
||||
outOfBounds = False
|
||||
for ii in range(51):
|
||||
try:
|
||||
sv = self.interpolateOrbit(tguess, method='hermite')
|
||||
except Exception as e:
|
||||
if self.sessionMode == "LT1A" or self.sessionMode == "LT1B":
|
||||
sv = self.getSatelliteSpaceState(tguess) # 获取卫星的 位置、速度
|
||||
print(e)
|
||||
outOfBounds = True
|
||||
break
|
||||
|
@ -1174,100 +1031,27 @@ class Orbit(Component):
|
|||
pos = np.array(sv.getPosition())
|
||||
vel = np.array(sv.getVelocity())
|
||||
|
||||
# print("xyz", xyz)
|
||||
# print("pos", pos)
|
||||
dr = xyz-pos
|
||||
rng = np.linalg.norm(dr) # 求斜距
|
||||
# print("rng", rng)
|
||||
|
||||
dopfact = np.dot(dr, vel) # fd 公式
|
||||
# print("dopfact", dopfact)
|
||||
rng = np.linalg.norm(dr)
|
||||
|
||||
dopfact = np.dot(dr,vel)
|
||||
fdop = doppler(DTU.seconds_since_midnight(tguess),rng) * wvl * 0.5
|
||||
# print("doppler", doppler(DTU.seconds_since_midnight(tguess),rng))
|
||||
# print("wvl", wvl)
|
||||
print("fdop", fdop)
|
||||
|
||||
fdopder = (0.5*wvl*doppler(DTU.seconds_since_midnight(tguess),rng+10.0) - fdop) / 10.0
|
||||
# print("doppler2", doppler(DTU.seconds_since_midnight(tguess),rng+10.0))
|
||||
print("fdopder", fdopder)
|
||||
|
||||
fn = dopfact - fdop * rng
|
||||
c1 = -np.dot(vel, vel)
|
||||
c2 = (fdop/rng + fdopder)
|
||||
# print("c1", c1)
|
||||
# print("c2", c2)
|
||||
|
||||
fnprime = c1 + c2 * dopfact
|
||||
# print("时间为", fn/fnprime)
|
||||
# if abs(fn/fnprime) > 1:
|
||||
# break
|
||||
tguess = tguess - datetime.timedelta(seconds = fn/fnprime)
|
||||
# print("输出的tguess", tguess)
|
||||
# print(outOfBounds)
|
||||
print("end ------------------------------------------------------------\n")
|
||||
if abs(fn/fnprime) < 1e-6:
|
||||
break
|
||||
|
||||
if outOfBounds:
|
||||
raise Exception('Interpolation time out of bounds')
|
||||
|
||||
return tguess, rng
|
||||
|
||||
# def geo2rdr(self, llh, side=-1, planet=None,
|
||||
# doppler=None, wvl=None):
|
||||
# '''
|
||||
# Takes a lat, lon, height triplet and returns azimuth time and range.
|
||||
# Assumes zero doppler for now.
|
||||
# '''
|
||||
# from isceobj.Planet.Planet import Planet
|
||||
# from isceobj.Util.Poly2D import Poly2D
|
||||
# if doppler is None:
|
||||
# doppler = Poly2D()
|
||||
# doppler.initPoly(azimuthOrder=0, rangeOrder=0, coeffs=[[0.]])
|
||||
# wvl = 0.0
|
||||
#
|
||||
# if planet is None:
|
||||
# refElp = Planet(pname='Earth'). ellipsoid
|
||||
# else:
|
||||
# refElp = planet.ellipsoid
|
||||
#
|
||||
# xyz = refElp.llh_to_xyz(llh)
|
||||
#
|
||||
# delta = (self.maxTime - self.minTime).total_seconds() * 0.5
|
||||
# tguess = self.minTime + datetime.timedelta(seconds = delta)
|
||||
# outOfBounds = False
|
||||
# # Start the previous guess tracking with dummy value
|
||||
# t_prev_guess = tguess + datetime.timedelta(seconds=10)
|
||||
# for ii in range(51):
|
||||
# try:
|
||||
# sv = self.interpolateOrbit(tguess, method='hermite')
|
||||
# except:
|
||||
# outOfBounds = True
|
||||
# break
|
||||
#
|
||||
# pos = np.array(sv.getPosition())
|
||||
# vel = np.array(sv.getVelocity())
|
||||
#
|
||||
# dr = xyz-pos
|
||||
# rng = np.linalg.norm(dr)
|
||||
#
|
||||
# dopfact = np.dot(dr,vel)
|
||||
# fdop = doppler(DTU.seconds_since_midnight(tguess),rng) * wvl * 0.5
|
||||
# fdopder = (0.5*wvl*doppler(DTU.seconds_since_midnight(tguess),rng+10.0) - fdop) / 10.0
|
||||
#
|
||||
# fn = dopfact - fdop * rng
|
||||
# c1 = -np.dot(vel, vel)
|
||||
# c2 = (fdop/rng + fdopder)
|
||||
#
|
||||
# fnprime = c1 + c2 * dopfact
|
||||
#
|
||||
# tguess = tguess - datetime.timedelta(seconds = fn/fnprime)
|
||||
# if abs(tguess - t_prev_guess).total_seconds() < 5e-9:
|
||||
# break
|
||||
# else:
|
||||
# t_prev_guess = tguess
|
||||
#
|
||||
# if outOfBounds:
|
||||
# raise Exception('Interpolation time out of bounds')
|
||||
#
|
||||
# return tguess, rng
|
||||
|
||||
|
||||
def exportToC(self, reference=None):
|
||||
from isceobj.Util import combinedlibmodule
|
||||
|
|
|
@ -27,9 +27,13 @@
|
|||
# Author: Walter Szeliga
|
||||
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
|
||||
|
||||
from xml.etree.ElementTree import ElementTree
|
||||
import datetime
|
||||
import isceobj
|
||||
import copy
|
||||
from isceobj.Scene.Frame import Frame
|
||||
from isceobj.Planet.Planet import Planet
|
||||
from isceobj.Orbit.Orbit import StateVector, Orbit
|
||||
|
@ -38,16 +42,8 @@ from isceobj.Planet.AstronomicalHandbook import Const
|
|||
from iscesys.Component.Component import Component
|
||||
from iscesys.DateTimeUtil.DateTimeUtil import DateTimeUtil as DTUtil
|
||||
import os
|
||||
import copy
|
||||
import scipy.sparse as ss
|
||||
from concurrent.futures._base import as_completed, wait
|
||||
from concurrent.futures.thread import ThreadPoolExecutor
|
||||
from multiprocessing import Pool
|
||||
import math
|
||||
import datetime
|
||||
from math import sin,cos
|
||||
from scipy.optimize import leastsq
|
||||
import numpy as np
|
||||
|
||||
sep = "\n"
|
||||
tab = " "
|
||||
lookMap = { 'R': -1,
|
||||
|
@ -59,7 +55,7 @@ TIFF = Component.Parameter(
|
|||
default='',
|
||||
type=str,
|
||||
mandatory=True,
|
||||
doc='GF3 tiff imagery file'
|
||||
doc='GF3_SLC tiff imagery file'
|
||||
)
|
||||
|
||||
XML = Component.Parameter(
|
||||
|
@ -68,7 +64,7 @@ XML = Component.Parameter(
|
|||
default='',
|
||||
type=str,
|
||||
mandatory=True,
|
||||
doc='GF3 xml metadata file'
|
||||
doc='GF3_SLC xml metadata file'
|
||||
)
|
||||
|
||||
ORBIT_DIRECTORY = Component.Parameter(
|
||||
|
@ -77,7 +73,7 @@ ORBIT_DIRECTORY = Component.Parameter(
|
|||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='Directory with GF3 precise orbits')
|
||||
doc='Directory with GF3_SLC precise orbits')
|
||||
|
||||
ORBIT_FILE = Component.Parameter(
|
||||
'orbitFile',
|
||||
|
@ -95,40 +91,87 @@ from .Sensor import Sensor
|
|||
# 这里采用《Insar原理和应用 》(刘国祥著)中基于空间定位的轨道参数计算方法一章中的内容(Gabriel and Goldstein)
|
||||
# 注意为了方便计算,采用基准时间的方法
|
||||
######################################################
|
||||
import math
|
||||
import datetime
|
||||
import time
|
||||
import scipy as sp
|
||||
from math import sin,cos
|
||||
from scipy.optimize import leastsq
|
||||
import numpy as np
|
||||
|
||||
|
||||
def FindInfomationFromJson(HeaderFile_dom_json, node_path_list):
|
||||
"""
|
||||
在Json文件中,按照指定路径解析出制定节点
|
||||
"""
|
||||
result_node = HeaderFile_dom_json
|
||||
for nodename in node_path_list:
|
||||
result_node = result_node[nodename]
|
||||
return result_node
|
||||
########
|
||||
# 函数列表
|
||||
########
|
||||
def poly1dfunc(p,x): # 一次函数
|
||||
k,b=p
|
||||
return k*x+b
|
||||
|
||||
def poly2dfunc(p,x): # 二次函数
|
||||
k1,k2,b=p
|
||||
return b+k1*x+k2*x*x
|
||||
|
||||
def GetVectorNorm(Vecter):
|
||||
"""
|
||||
得到向量的模
|
||||
"""
|
||||
Vecter = Vecter.reshape(-1,1)
|
||||
Vecter_Norm_pow = np.matmul(Vecter.T,Vecter)
|
||||
return np.sqrt(Vecter_Norm_pow)
|
||||
def poly3dfunc(p,x):
|
||||
k1,k2,k3,b=p
|
||||
return b+k1*x+k2*x*x+k3*x*x*x
|
||||
|
||||
def poly4dfunc(p,x):
|
||||
k1,k2,k3,k4,b=p
|
||||
return b+k1*x+k2*x**2+k3*x**3+k4*x**4
|
||||
|
||||
def XYZOuterM2(A, B):
|
||||
"""
|
||||
外积(叉乘),日后版本换成可以任意维度的外积运算方程
|
||||
args:
|
||||
A:nx3
|
||||
B:nx3
|
||||
"""
|
||||
cnt = A.shape[0]
|
||||
C = np.zeros((cnt, 3))
|
||||
C[:, 0] = A[:, 1] * B[:, 2] - A[:, 2] * B[:, 1]
|
||||
C[:, 1] = A[:, 2] * B[:, 0] - A[:, 0] * B[:, 2]
|
||||
C[:, 2] = A[:, 0] * B[:, 1] - A[:, 1] * B[:, 0]
|
||||
return C
|
||||
def poly5dfunc(p,x):
|
||||
k1,k2,k3,k4,k5,b=p
|
||||
return b+k1*x+k2*x**2+k3*x**3+k4*x**4+k5*x**5
|
||||
|
||||
def poly1derror(p,x,y):
|
||||
return poly1dfunc(p,x)-y
|
||||
|
||||
def poly2derror(p,x,y):
|
||||
return poly2dfunc(p,x)-y
|
||||
|
||||
def poly3derror(p,x,y):
|
||||
return poly3dfunc(p,x)-y
|
||||
|
||||
def poly4derror(p,x,y):
|
||||
return poly4dfunc(p,x)-y
|
||||
|
||||
def poly5derror(p,x,y):
|
||||
return poly5dfunc(p,x)-y
|
||||
|
||||
class orbitVector:
|
||||
def __init__(self,UTCTimes,vx,vy,vz,px,py,pz,dateformat="%Y-%m-%dT%H:%M:%S.%fZ"):
|
||||
self.UTCTime=datetime.datetime.strptime(UTCTimes,dateformat) # 字符串转UTC时间
|
||||
self.time_stamp=self.UTCTime.timestamp() # 时间戳
|
||||
self.vx=vx
|
||||
self.vy=vy
|
||||
self.vz=vz
|
||||
self.px=px
|
||||
self.py=py
|
||||
self.pz=pz
|
||||
self.orbitVector2GG() # 将坐标进行变换
|
||||
self.Check()
|
||||
pass
|
||||
|
||||
def orbitVector2GG(self):
|
||||
Cx=self.py*self.vz-self.pz*self.vy
|
||||
Cy=self.pz*self.vx-self.px*self.vz
|
||||
Cz=self.px*self.vy-self.py*self.vx
|
||||
C=(Cx**2+Cy**2+Cz**2)**0.5
|
||||
self.rho=(self.px**2+self.py**2+self.pz**2)**0.5
|
||||
self.I=math.acos(Cz/C)
|
||||
self.omega=math.asin(self.pz/(self.rho*math.sin(self.I)))
|
||||
self.Omega=math.atan(-Cx/Cy)
|
||||
return [self.rho,self.I,self.omega,self.Omega]
|
||||
|
||||
def Check(self):
|
||||
rho=self.rho
|
||||
I=self.I
|
||||
omega=self.omega
|
||||
Omega=self.Omega
|
||||
Xp=-rho*(cos(omega)*cos(Omega)-sin(omega)*sin(Omega)*cos(I))
|
||||
Yp=-rho*(cos(omega)*sin(Omega)+sin(omega)*cos(Omega)*cos(I))
|
||||
Zp=rho*sin(omega)*sin(I)
|
||||
print("计算插值:",self.UTCTime,self.px,self.py,self.pz,self.vx,self.vy,self.vz,"|",Xp-self.px,Yp-self.py,Zp-self.pz)
|
||||
|
||||
|
||||
class SatelliteOrbit(object):
|
||||
|
@ -164,160 +207,6 @@ class SatelliteOrbit(object):
|
|||
return None
|
||||
|
||||
|
||||
# class SatelliteOrbitFitPoly(SatelliteOrbit):
|
||||
# '''
|
||||
# 继承于SatelliteOribit类,为拟合多项式实现方法
|
||||
# '''
|
||||
#
|
||||
# def __init__(self) -> None:
|
||||
# super().__init__()
|
||||
# self.modelName="多项式"
|
||||
# self.polynum=4
|
||||
#
|
||||
# def ReconstructionSatelliteOrbit(self, GPSPoints_list, starttime):
|
||||
# if len(GPSPoints_list)==2:
|
||||
# self.polynum=1
|
||||
# self.starttime = starttime
|
||||
#
|
||||
# record_count = len(GPSPoints_list)
|
||||
# time_arr = np.zeros((record_count, 1), dtype=np.float64) # 使用np.float64只是为了精度高些;如果32位也能满足需求,请用32位
|
||||
# state_arr = np.zeros((record_count, 6), dtype=np.float64)
|
||||
# A_arr = np.zeros((self.polynum+1, 6), dtype=np.float64) # 四次项
|
||||
# X=np.ones((record_count,self.polynum+1),dtype=np.float64) # 记录时间坐标
|
||||
# # 将点记录转换为自变量矩阵、因变量矩阵
|
||||
#
|
||||
# for i in range(record_count):
|
||||
# GPSPoint = GPSPoints_list[i]
|
||||
# time_ = GPSPoint[0] - self.starttime # 为了保证精度,对时间进行缩放
|
||||
# X[i,:]=np.array([1,time_])
|
||||
# state_arr[i, :] = np.array(GPSPoint[1:],dtype=np.float64).reshape(1,6) # 空间坐标
|
||||
# self.model_f=[]
|
||||
# for i in range(6):
|
||||
# Y = state_arr[:, i].reshape(-1,1)
|
||||
# A_arr[:,i]=np.matmul(np.matmul(np.linalg.inv(np.matmul(X.T,X)),X.T),Y)[:,0]
|
||||
#
|
||||
# self.A_arr=copy.deepcopy(A_arr.copy())
|
||||
# return self.A_arr
|
||||
# elif len(GPSPoints_list) > 6:
|
||||
# self.polynum=4
|
||||
# # 多项式的节点数,理论上是超过5个可以起算,这里为了精度选择10个点起算。
|
||||
# # 多项式 XA=Y ==> A=(X'X)^X'Y,其中 A 为待求系数,X为变量,Y为因变量
|
||||
# # 这里使用三次项多项式,共有6组参数。
|
||||
# # 声明自变量,因变量,系数矩阵
|
||||
# self.starttime = starttime
|
||||
#
|
||||
# record_count = len(GPSPoints_list)
|
||||
# time_arr = np.zeros((record_count, 1), dtype=np.float64) # 使用np.float64只是为了精度高些;如果32位也能满足需求,请用32位
|
||||
# state_arr = np.zeros((record_count, 6), dtype=np.float64)
|
||||
# A_arr = np.zeros((self.polynum+1, 6), dtype=np.float64) # 四次项
|
||||
# X=np.ones((record_count,self.polynum+1),dtype=np.float64) # 记录时间坐标
|
||||
# # 将点记录转换为自变量矩阵、因变量矩阵
|
||||
#
|
||||
# for i in range(record_count):
|
||||
# GPSPoint = GPSPoints_list[i]
|
||||
# time_ = GPSPoint[0] - self.starttime # 为了保证精度,对时间进行缩放
|
||||
# X[i,:]=np.array([1,time_,time_**2,time_**3,time_**4])
|
||||
# state_arr[i, :] = np.array(GPSPoint[1:],dtype=np.float64).reshape(1,6) # 空间坐标
|
||||
# self.model_f=[]
|
||||
# for i in range(6):
|
||||
# Y = state_arr[:, i].reshape(-1,1)
|
||||
# A_arr[:,i]=np.matmul(np.matmul(np.linalg.inv(np.matmul(X.T,X)),X.T),Y)[:,0]
|
||||
#
|
||||
# self.A_arr=copy.deepcopy(A_arr.copy())
|
||||
# ''' 测试误差
|
||||
# from matplotlib import pyplot
|
||||
# label_list=['x','y','z','vx','vy','vz']
|
||||
# color_list=['r','g','b','gold','gray','pink']
|
||||
# pyplot.figure()
|
||||
# for i in range(6):
|
||||
# Y = state_arr[:, i]
|
||||
# Y_predict=self.model_f[i](X)
|
||||
# pyplot.subplot(int("23{}".format(i+1)))
|
||||
# d=Y-Y_predict
|
||||
# pyplot.plot(X,d,label=label_list[i],color=color_list[i])
|
||||
# pyplot.title("max:{}".format(np.max(d)))
|
||||
# #self.model_f.append(interpolate.interp1d(X,Y,kind='cubic',fill_value='extrapolate'))
|
||||
# pyplot.legend()
|
||||
# pyplot.show()
|
||||
# '''
|
||||
# return self.A_arr
|
||||
# else:
|
||||
# self.A_arr = None
|
||||
# return None
|
||||
#
|
||||
# def SatelliteSpaceState(self, time_float):
|
||||
# '''
|
||||
# 逐像素求解
|
||||
# 根据时间戳,返回对应时间的卫星的轨迹状态,会自动计算与起算时间之差
|
||||
# args:
|
||||
# time_float:时间戳
|
||||
# return:
|
||||
# State_list:[time,Xp,Yp,Zp,Vx,Vy,Vz]
|
||||
# '''
|
||||
# if self.model_f is None:
|
||||
# return None
|
||||
#
|
||||
# result_arr=np.zeros((1,7))
|
||||
#
|
||||
# time_float = time_float - self.starttime
|
||||
# result_arr[0,0]=time_float
|
||||
# #time_arr[0, 4] = time_arr[0, 3] * time_float ** 4
|
||||
# time_float=np.array([1,time_float,time_float**2,time_float**3,time_float**4]).reshape(1,5)
|
||||
# result_arr=np.matmul(time_float,self.A_arr)
|
||||
# return [time_float,result_arr]
|
||||
#
|
||||
# def getSatelliteSpaceState(self, time_array):
|
||||
# '''
|
||||
# 矩阵求解
|
||||
# 根据时间戳矩阵,返回对应时刻的卫星空间状态(位置,速度),且会自动计算与起算时间之差
|
||||
# args:
|
||||
# time_array:nparray nx1 时间戳
|
||||
# return:
|
||||
# SatellitSpaceStateArray:nparray nx6 状态信息
|
||||
# '''
|
||||
# if self.model_f is None:
|
||||
# return None # 返回None,表示没有结果
|
||||
# if self.polynum==4:
|
||||
# n=time_array.shape[0]
|
||||
# result_arr_=np.zeros((n,6),dtype=np.float64)
|
||||
# time_float = time_array - self.starttime
|
||||
# time_float=time_float.reshape(-1) # nx1
|
||||
# time_arr=np.ones((time_float.shape[0],5)) # nx5
|
||||
# time_arr[:,1]=time_float
|
||||
# time_arr[:,2]=time_float**2
|
||||
# time_arr[:,3]=time_float**3
|
||||
# time_arr[:,4]=time_float**4
|
||||
# result_arr_=np.matmul(time_arr,self.A_arr) # nx5 5x6
|
||||
# #time_arr[0, 4] = time_arr[0, 3] * time_float ** 4
|
||||
# #result_arr=result_arr_
|
||||
# return result_arr_ # 位置矩阵
|
||||
# else:
|
||||
# n=time_array.shape[0]
|
||||
# result_arr_=np.zeros((n,6),dtype=np.float64)
|
||||
# time_float = time_array - self.starttime
|
||||
# time_float=time_float.reshape(-1) # nx1
|
||||
# time_arr=np.ones((time_float.shape[0],self.polynum+1)) # nx5
|
||||
# time_arr[:,1]=time_float
|
||||
# result_arr_=np.matmul(time_arr,self.A_arr) # nx5 5x6
|
||||
# #time_arr[0, 4] = time_arr[0, 3] * time_float ** 4
|
||||
# #result_arr=result_arr_
|
||||
# return result_arr_ # 位置矩阵
|
||||
|
||||
|
||||
# def ReconstructionSatelliteOrbit(GPSPoints_list, starttime):
|
||||
# '''
|
||||
# 构建卫星轨道
|
||||
# args:
|
||||
# GPSPoints_list:卫星轨道点
|
||||
# starttime:起算时间
|
||||
# '''
|
||||
#
|
||||
# SatelliteOrbitModel = SatelliteOrbitFitPoly()
|
||||
# if SatelliteOrbitModel.ReconstructionSatelliteOrbit(GPSPoints_list, starttime=starttime) is None:
|
||||
# return None
|
||||
# return SatelliteOrbitModel
|
||||
|
||||
|
||||
class SatelliteOrbitFitPoly(SatelliteOrbit):
|
||||
'''
|
||||
继承于SatelliteOribit类,为拟合多项式实现方法
|
||||
|
@ -353,6 +242,7 @@ class SatelliteOrbitFitPoly(SatelliteOrbit):
|
|||
self.A_arr=copy.deepcopy(A_arr.copy())
|
||||
return self.A_arr
|
||||
elif len(GPSPoints_list) > 6:
|
||||
self.polynum=4
|
||||
# 多项式的节点数,理论上是超过5个可以起算,这里为了精度选择10个点起算。
|
||||
# 多项式 XA=Y ==> A=(X'X)^X'Y,其中 A 为待求系数,X为变量,Y为因变量
|
||||
# 这里使用三次项多项式,共有6组参数。
|
||||
|
@ -362,21 +252,37 @@ class SatelliteOrbitFitPoly(SatelliteOrbit):
|
|||
record_count = len(GPSPoints_list)
|
||||
time_arr = np.zeros((record_count, 1), dtype=np.float64) # 使用np.float64只是为了精度高些;如果32位也能满足需求,请用32位
|
||||
state_arr = np.zeros((record_count, 6), dtype=np.float64)
|
||||
A_arr = np.zeros((self.polynum, 6), dtype=np.float64) # 四次项
|
||||
X = np.ones((record_count, self.polynum), dtype=np.float64) # 记录时间坐标
|
||||
A_arr = np.zeros((self.polynum+1, 6), dtype=np.float64) # 四次项
|
||||
X=np.ones((record_count,self.polynum+1),dtype=np.float64) # 记录时间坐标
|
||||
# 将点记录转换为自变量矩阵、因变量矩阵
|
||||
|
||||
for i in range(record_count):
|
||||
GPSPoint = GPSPoints_list[i]
|
||||
time_ = GPSPoint[0] - self.starttime # 为了保证精度,对时间进行缩放
|
||||
X[i, :] = np.array(list(map(lambda ii: time_ ** ii, range(self.polynum))))
|
||||
X[i,:]=np.array([1,time_,time_**2,time_**3,time_**4])
|
||||
state_arr[i, :] = np.array(GPSPoint[1:],dtype=np.float64).reshape(1,6) # 空间坐标
|
||||
self.model_f=[]
|
||||
for i in range(6):
|
||||
Y = state_arr[:, i].reshape(-1,1)
|
||||
A_arr[:,i]=np.matmul(np.matmul(np.linalg.inv(np.matmul(X.T,X)),X.T),Y)[:,0]
|
||||
|
||||
self.A_arr = A_arr.copy()
|
||||
self.A_arr=copy.deepcopy(A_arr.copy())
|
||||
''' 测试误差
|
||||
from matplotlib import pyplot
|
||||
label_list=['x','y','z','vx','vy','vz']
|
||||
color_list=['r','g','b','gold','gray','pink']
|
||||
pyplot.figure()
|
||||
for i in range(6):
|
||||
Y = state_arr[:, i]
|
||||
Y_predict=self.model_f[i](X)
|
||||
pyplot.subplot(int("23{}".format(i+1)))
|
||||
d=Y-Y_predict
|
||||
pyplot.plot(X,d,label=label_list[i],color=color_list[i])
|
||||
pyplot.title("max:{}".format(np.max(d)))
|
||||
#self.model_f.append(interpolate.interp1d(X,Y,kind='cubic',fill_value='extrapolate'))
|
||||
pyplot.legend()
|
||||
pyplot.show()
|
||||
'''
|
||||
return self.A_arr
|
||||
else:
|
||||
self.A_arr = None
|
||||
|
@ -429,8 +335,8 @@ class SatelliteOrbitFitPoly(SatelliteOrbit):
|
|||
|
||||
def getTimeOrbits(self,UTCStartTime,UTCEndTime,orbitnum=1000):
|
||||
#
|
||||
startTime_stamp = datetime.datetime.strptime(UTCStartTime, "%Y-%m-%dT%H:%M:%S.%f").timestamp() - 1
|
||||
endTime_stamp = datetime.datetime.strptime(UTCEndTime, "%Y-%m-%dT%H:%M:%S.%f").timestamp() + 1
|
||||
startTime_stamp=datetime.datetime.strptime(UTCStartTime,"%Y-%m-%dT%H:%M:%S.%f").timestamp()-10
|
||||
endTime_stamp=datetime.datetime.strptime(UTCEndTime,"%Y-%m-%dT%H:%M:%S.%f").timestamp()+10
|
||||
if startTime_stamp>endTime_stamp:
|
||||
raise
|
||||
delta_t=(endTime_stamp-startTime_stamp)/orbitnum
|
||||
|
@ -445,6 +351,42 @@ class SatelliteOrbitFitPoly(SatelliteOrbit):
|
|||
extractOrbits.append(newOrbit)
|
||||
return extractOrbits # 扩展的轨道节点
|
||||
|
||||
def getSatelliteSpaceState(self, time_array):
|
||||
'''
|
||||
矩阵求解
|
||||
根据时间戳矩阵,返回对应时刻的卫星空间状态(位置,速度),且会自动计算与起算时间之差
|
||||
args:
|
||||
time_array:nparray nx1 时间戳
|
||||
return:
|
||||
SatellitSpaceStateArray:nparray nx6 状态信息
|
||||
'''
|
||||
if self.model_f is None:
|
||||
return None # 返回None,表示没有结果
|
||||
if self.polynum==4:
|
||||
n=time_array.shape[0]
|
||||
result_arr_=np.zeros((n,6),dtype=np.float64)
|
||||
time_float = time_array - self.starttime
|
||||
time_float=time_float.reshape(-1) # nx1
|
||||
time_arr=np.ones((time_float.shape[0],5)) # nx5
|
||||
time_arr[:,1]=time_float
|
||||
time_arr[:,2]=time_float**2
|
||||
time_arr[:,3]=time_float**3
|
||||
time_arr[:,4]=time_float**4
|
||||
result_arr_=np.matmul(time_arr,self.A_arr) # nx5 5x6
|
||||
#time_arr[0, 4] = time_arr[0, 3] * time_float ** 4
|
||||
#result_arr=result_arr_
|
||||
return result_arr_ # 位置矩阵
|
||||
else:
|
||||
n=time_array.shape[0]
|
||||
result_arr_=np.zeros((n,6),dtype=np.float64)
|
||||
time_float = time_array - self.starttime
|
||||
time_float=time_float.reshape(-1) # nx1
|
||||
time_arr=np.ones((time_float.shape[0],self.polynum+1)) # nx5
|
||||
time_arr[:,1]=time_float
|
||||
result_arr_=np.matmul(time_arr,self.A_arr) # nx5 5x6
|
||||
#time_arr[0, 4] = time_arr[0, 3] * time_float ** 4
|
||||
#result_arr=result_arr_
|
||||
return result_arr_ # 位置矩阵
|
||||
|
||||
def ReconstructionSatelliteOrbit(stateVectors, starttime):
|
||||
'''
|
||||
|
@ -453,24 +395,24 @@ def ReconstructionSatelliteOrbit(stateVectors, starttime):
|
|||
GPSPoints_list:卫星轨道点
|
||||
starttime:起算时间
|
||||
'''
|
||||
GPSPoint_list = []
|
||||
for sv in stateVectors:
|
||||
GPSPoint = [sv.timeStamp.timestamp(),
|
||||
sv.xPosition,
|
||||
sv.yPosition,
|
||||
sv.zPosition,
|
||||
sv.xVelocity,
|
||||
sv.yVelocity,
|
||||
sv.zVelocity
|
||||
]
|
||||
GPSPoint_list.append(GPSPoint)
|
||||
# GPSPoint_list=[]
|
||||
# for sv in stateVectors:
|
||||
# GPSPoint=[sv.timeStamp.timestamp(),
|
||||
# sv.xPosition,
|
||||
# sv.yPosition,
|
||||
# sv.zPosition,
|
||||
# sv.xVelocity,
|
||||
# sv.yVelocity,
|
||||
# sv.zVelocity
|
||||
# ]
|
||||
# GPSPoint_list.append(GPSPoint)
|
||||
SatelliteOrbitModel = SatelliteOrbitFitPoly()
|
||||
if SatelliteOrbitModel.ReconstructionSatelliteOrbit(GPSPoint_list, starttime=starttime) is None:
|
||||
if SatelliteOrbitModel.ReconstructionSatelliteOrbit(stateVectors, starttime=starttime) is None:
|
||||
return None
|
||||
|
||||
print("orbit test")
|
||||
distance=[]
|
||||
for gpsPoint in GPSPoint_list:
|
||||
for gpsPoint in stateVectors:
|
||||
temp_sv=SatelliteOrbitModel.SatelliteSpaceState(gpsPoint[0])
|
||||
sv=np.array(temp_sv[1])
|
||||
temp_distance=sv-gpsPoint[1:]
|
||||
|
@ -480,82 +422,6 @@ def ReconstructionSatelliteOrbit(stateVectors, starttime):
|
|||
print("orbit min:",np.min(distance))
|
||||
return SatelliteOrbitModel
|
||||
|
||||
|
||||
########
|
||||
# 函数列表
|
||||
########
|
||||
def poly1dfunc(p,x): # 一次函数
|
||||
k,b=p
|
||||
return k*x+b
|
||||
|
||||
def poly2dfunc(p,x): # 二次函数
|
||||
k1,k2,b=p
|
||||
return b+k1*x+k2*x*x
|
||||
|
||||
def poly3dfunc(p,x):
|
||||
k1,k2,k3,b=p
|
||||
return b+k1*x+k2*x*x+k3*x*x*x
|
||||
|
||||
def poly4dfunc(p,x):
|
||||
k1,k2,k3,k4,b=p
|
||||
return b+k1*x+k2*x**2+k3*x**3+k4*x**4
|
||||
|
||||
def poly5dfunc(p,x):
|
||||
k1,k2,k3,k4,k5,b=p
|
||||
return b+k1*x+k2*x**2+k3*x**3+k4*x**4+k5*x**5
|
||||
|
||||
def poly1derror(p,x,y):
|
||||
return poly1dfunc(p,x)-y
|
||||
|
||||
def poly2derror(p,x,y):
|
||||
return poly2dfunc(p,x)-y
|
||||
|
||||
def poly3derror(p,x,y):
|
||||
return poly3dfunc(p,x)-y
|
||||
|
||||
def poly4derror(p,x,y):
|
||||
return poly4dfunc(p,x)-y
|
||||
|
||||
def poly5derror(p,x,y):
|
||||
return poly5dfunc(p,x)-y
|
||||
|
||||
class orbitVector:
|
||||
def __init__(self,UTCTimes,vx,vy,vz,px,py,pz,dateformat="%Y-%m-%dT%H:%M:%S.%f"):
|
||||
self.UTCTime=datetime.datetime.strptime(UTCTimes,dateformat) # 字符串转UTC时间
|
||||
self.time_stamp=self.UTCTime.timestamp() # 时间戳
|
||||
self.vx=vx
|
||||
self.vy=vy
|
||||
self.vz=vz
|
||||
self.px=px
|
||||
self.py=py
|
||||
self.pz=pz
|
||||
self.orbitVector2GG() # 将坐标进行变换
|
||||
self.Check()
|
||||
pass
|
||||
|
||||
def orbitVector2GG(self):
|
||||
Cx=self.py*self.vz-self.pz*self.vy # 叉乘
|
||||
Cy=self.pz*self.vx-self.px*self.vz
|
||||
Cz=self.px*self.vy-self.py*self.vx
|
||||
C=(Cx**2+Cy**2+Cz**2)**0.5
|
||||
self.rho=(self.px**2+self.py**2+self.pz**2)**0.5
|
||||
self.I=math.acos(Cz/C)
|
||||
self.omega=math.asin(self.pz/(self.rho*math.sin(self.I)))
|
||||
self.Omega=math.atan(Cx*(-1)/Cy)
|
||||
|
||||
return [self.rho,self.I,self.omega,self.Omega]
|
||||
|
||||
def Check(self):
|
||||
rho=self.rho
|
||||
I=self.I
|
||||
omega=self.omega
|
||||
Omega=self.Omega
|
||||
Xp=rho*(cos(omega)*cos(Omega)-sin(omega)*sin(Omega)*cos(I))
|
||||
Yp=rho*(cos(omega)*sin(Omega)+sin(omega)*cos(Omega)*cos(I))
|
||||
Zp=rho*sin(Omega)*sin(I)
|
||||
print("计算插值:",self.UTCTime,self.px,self.py,self.pz,self.vx,self.vy,self.vz,"|",abs(Xp)-abs(self.px),abs(Yp)-abs(self.py),abs(Zp)-abs(self.pz))
|
||||
|
||||
|
||||
class SARorbit(object):
|
||||
# 作为自定义轨道计算基类
|
||||
# 定义几个基本方法:addvector(),createOrbit(),getTime(),getTimes()
|
||||
|
@ -579,13 +445,13 @@ class SARorbit(object):
|
|||
return None
|
||||
|
||||
def getTimeOrbitStamp(self,StampTime):
|
||||
utcStr=datetime.datetime.fromtimestamp(StampTime).strftime("%Y-%m-%dT%H:%M:%S.%f")
|
||||
utcStr=datetime.datetime.fromtimestamp(StampTime).strftime("%Y-%m-%dT%H:%M:%S.%fZ")
|
||||
return self.getTimeOrbit(utcStr)
|
||||
|
||||
def getTimeOrbits(self,UTCStartTime,UTCEndTime,orbitnum=100):
|
||||
#
|
||||
startTime_stamp=datetime.datetime.strptime(UTCStartTime,"%Y-%m-%dT%H:%M:%S.%f").timestamp()-0.2
|
||||
endTime_stamp=datetime.datetime.strptime(UTCEndTime,"%Y-%m-%dT%H:%M:%S.%f").timestamp()+0.2
|
||||
startTime_stamp=datetime.datetime.strptime(UTCStartTime,"%Y-%m-%dT%H:%M:%S.%fZ").timestamp()-10
|
||||
endTime_stamp=datetime.datetime.strptime(UTCEndTime,"%Y-%m-%dT%H:%M:%S.%fZ").timestamp()+10
|
||||
if startTime_stamp>endTime_stamp:
|
||||
raise
|
||||
delta_t=(endTime_stamp-startTime_stamp)*1000/orbitnum
|
||||
|
@ -652,7 +518,7 @@ class GGorbit(SARorbit):
|
|||
|
||||
# 获取计算结果
|
||||
def getTimeOrbit(self,UTCTime):
|
||||
staptime=datetime.datetime.strptime(UTCTime,"%Y-%m-%dT%H:%M:%S.%f").timestamp()
|
||||
staptime=datetime.datetime.strptime(UTCTime,"%Y-%m-%dT%H:%M:%S.%fZ").timestamp()
|
||||
dtime=0.0001
|
||||
[Xp,Yp,Zp]=self.getXYZ(staptime)
|
||||
[Xp_temp,Yp_temp,Zp_temp]=self.getXYZ(staptime+dtime)
|
||||
|
@ -710,7 +576,7 @@ class polyorbit(SARorbit):
|
|||
|
||||
class GF3_SLC(Sensor):
|
||||
"""
|
||||
A Class representing GF3 data
|
||||
A Class representing GF3_SLC data
|
||||
"""
|
||||
|
||||
family='GF3_SLC'
|
||||
|
@ -762,12 +628,15 @@ class GF3_SLC(Sensor):
|
|||
# azimuthPixelSize = self.product.imageAttributes.rasterAttributes.sampledLineSpacing # ground spacing in meters
|
||||
totalProcessedAzimuthBandwidth = self.product.imageInfo.eqvPRF
|
||||
prf = self.product.imageInfo.eqvPRF # effective PRF can be double original, suggested by Piyush
|
||||
prf_s = ori_prf * np.ceil(totalProcessedAzimuthBandwidth / ori_prf) # effective PRF can be double original, suggested by Piyush
|
||||
# print("effective PRF %f, original PRF %f" % (prf, orig_prf) )
|
||||
print('----------------------------------------------------')
|
||||
print("mission",mission)
|
||||
print("swath",swath)
|
||||
print("frequency",frequency)
|
||||
print("ori_prf",ori_prf)
|
||||
print("prf",prf)
|
||||
print("prf_s",prf_s)
|
||||
print("rangePixelSize",rangePixelSize)
|
||||
print("rangeSamplingRate",rangeSamplingRate)
|
||||
print("pulseLength",pulseLength)
|
||||
|
@ -800,7 +669,7 @@ class GF3_SLC(Sensor):
|
|||
####Populate instrument
|
||||
instrument = self.frame.getInstrument()
|
||||
instrument.setRadarFrequency(frequency)
|
||||
instrument.setPulseRepetitionFrequency(prf)
|
||||
instrument.setPulseRepetitionFrequency(prf_s)
|
||||
instrument.setPulseLength(pulseLength)
|
||||
instrument.setChirpSlope(pulseBandwidth/pulseLength)
|
||||
instrument.setIncidenceAngle(incidenceAngle)
|
||||
|
@ -810,7 +679,6 @@ class GF3_SLC(Sensor):
|
|||
instrument.setBeamNumber(swath)
|
||||
instrument.setPulseLength(pulseLength)
|
||||
|
||||
|
||||
#Populate Frame
|
||||
#self.frame.setSatelliteHeight(height)
|
||||
self.frame.setSensingStart(dataStartTime) # Date time object for UTC of first line
|
||||
|
@ -829,19 +697,15 @@ class GF3_SLC(Sensor):
|
|||
|
||||
|
||||
self.frame.getOrbit().setOrbitSource('EOF')
|
||||
# self.frame.getOrbit().setOrbitSource(self.product.sourceAttributes.orbitAndAttitude.orbitInformation.orbitDataFile)
|
||||
|
||||
print("======= 修改轨道代码部分: =================")
|
||||
if (self.orbitFile is None) and (self.orbitDirectory is None):
|
||||
print('orbitFile and orbitDirectory are None')
|
||||
self.extractOrbit()
|
||||
|
||||
elif (self.orbitDirectory is not None):
|
||||
print('orbitDirectory is None')
|
||||
self.orbitFile = findPreciseOrbit(self.orbitDirectory, self.frame.getOrbit().getOrbitSource(), self.frame.sensingStart.year)
|
||||
|
||||
if self.orbitFile is not None:
|
||||
print('orbitFile is None')
|
||||
self.extractPreciseOrbit(self.orbitFile, self.frame.sensingStart, self.frame.sensingStop)
|
||||
|
||||
|
||||
|
@ -851,15 +715,10 @@ class GF3_SLC(Sensor):
|
|||
# note that RS2 Doppler values are estimated at time dc.dopplerCentroidReferenceTime,
|
||||
# so the values might need to be adjusted for ISCE usage
|
||||
# added EJF 2015/08/17
|
||||
|
||||
# dc = self.product.imageGenerationParameters.dopplerCentroid
|
||||
# poly = dc.dopplerCentroidCoefficients
|
||||
poly = self.product.processInfo.DopplerCentroidCoefficients
|
||||
# need to convert units
|
||||
poly[1] = poly[1]/rangeSamplingRate
|
||||
poly[2] = poly[2]/rangeSamplingRate**2
|
||||
poly[3] = poly[3]/rangeSamplingRate**3
|
||||
poly[4] = poly[4]/rangeSamplingRate**4
|
||||
self.doppler_coeff = poly
|
||||
|
||||
# similarly save Doppler azimuth fm rate values, converting units
|
||||
|
@ -868,22 +727,12 @@ class GF3_SLC(Sensor):
|
|||
# note that RS2 Doppler values are estimated at time dc.dopplerRateReferenceTime,
|
||||
# so the values might need to be adjusted for ISCE usage
|
||||
# added EJF 2015/08/17
|
||||
|
||||
# dr = self.product.imageGenerationParameters.dopplerRateValues
|
||||
# fmpoly = dr.dopplerRateValuesCoefficients
|
||||
|
||||
fmpoly = self.product.processInfo.DopplerRateValuesCoefficients
|
||||
# need to convert units
|
||||
fmpoly[1] = fmpoly[1]/rangeSamplingRate
|
||||
fmpoly[2] = fmpoly[2]/rangeSamplingRate**2
|
||||
fmpoly[3] = fmpoly[3]/rangeSamplingRate**3
|
||||
fmpoly[4] = fmpoly[4]/rangeSamplingRate**4
|
||||
self.azfmrate_coeff = fmpoly
|
||||
|
||||
# print("poly",poly)
|
||||
# print("fmpoly",fmpoly)
|
||||
# print('------------------------------------------------------')
|
||||
|
||||
# now calculate effective PRF from the azimuth line spacing after we have the orbit info EJF 2015/08/15
|
||||
# this does not work because azimuth spacing is on ground. Instead use bandwidth ratio calculated above EJF
|
||||
# SCHvelocity = self.frame.getSchVelocity()
|
||||
|
@ -902,72 +751,46 @@ class GF3_SLC(Sensor):
|
|||
print("构建新的轨道程序代码:")
|
||||
tempOrbit = GGorbit()
|
||||
|
||||
dataStartTime = self.frame.sensingStart.timestamp()
|
||||
dataStopTime = self.frame.sensingStop.timestamp()
|
||||
time_list = []
|
||||
self.frame.getOrbit().setOrbitSource('Header: ' + self.frame.getOrbit().getOrbitSource())
|
||||
# stateVectors = self.product.sourceAttributes.orbitAndAttitude.orbitInformation.stateVectors
|
||||
stateVectors = self.product.GPS.gpsParam
|
||||
for i in range(len(stateVectors)):
|
||||
# tempOrbit.addvector(stateVectors[i].timeStamp.strftime("%Y-%m-%dT%H:%M:%S.%fZ"),
|
||||
# stateVectors[i].xVelocity, stateVectors[i].yVelocity, stateVectors[i].zVelocity,
|
||||
# stateVectors[i].xPosition, stateVectors[i].yPosition, stateVectors[i].zPosition)
|
||||
time_list.append([stateVectors[i].timeStamp.timestamp(),
|
||||
stateVectors[i].xPosition, stateVectors[i].yPosition, stateVectors[i].zPosition,
|
||||
stateVectors[i].xVelocity, stateVectors[i].yVelocity, stateVectors[i].zVelocity])
|
||||
|
||||
dataStartTime = self.product.imageInfo.imagingStartTime
|
||||
dataStopTime = self.product.imageInfo.imagingEndTime
|
||||
dataCenterTime = self.product.platform.CenterTime
|
||||
model = ReconstructionSatelliteOrbit(time_list, starttime=dataStartTime)
|
||||
time_dif = ((dataStopTime + 10) - (dataStartTime - 10)) / 1000
|
||||
time = np.zeros((1000, 1))
|
||||
for i in range(1000):
|
||||
time[i,:]=((dataStartTime - 10) + time_dif * i)
|
||||
t = time.reshape(-1)
|
||||
|
||||
startTime_s = dataStartTime.timestamp()
|
||||
stopTime_s = dataStopTime.timestamp()
|
||||
centerTime_s = dataCenterTime.timestamp()
|
||||
statepoints = model.getSatelliteSpaceState(t)
|
||||
for i, value in zip(range(len(statepoints)), statepoints):
|
||||
sv= StateVector()
|
||||
sv.setTime(datetime.datetime.fromtimestamp(t[i]))
|
||||
sv.setPosition([value[0],value[1],value[2]])
|
||||
sv.setVelocity([value[3],value[4],value[5]])
|
||||
self.frame.getOrbit().addStateVector(sv) # 插值结果写进了轨道模型中
|
||||
|
||||
tempOrbit = ReconstructionSatelliteOrbit(stateVectors, startTime_s)
|
||||
As_arr = tempOrbit.A_arr.tolist()
|
||||
""" 构建轨道 """
|
||||
self.frame.getOrbit().setsessionMode(self.product.satellite)
|
||||
print("卫星型号")
|
||||
print(self.frame.orbit.sessionMode)
|
||||
self.frame.getOrbit().setPolyParams(tempOrbit.polynum, tempOrbit.starttime, As_arr)
|
||||
self.frame.getOrbit().setDoppler(self.product.processInfo.DopplerParametersReferenceTime,
|
||||
self.product.processInfo.DopplerRateValuesCoefficients)
|
||||
""" """
|
||||
newOrb = self.frame.getOrbit().getTimeOrbits(self.frame.sensingStart.strftime("%Y-%m-%dT%H:%M:%S.%f"),
|
||||
self.frame.sensingStop.strftime("%Y-%m-%dT%H:%M:%S.%f"),
|
||||
orbitnum=1000)
|
||||
for svect in newOrb:
|
||||
self.frame.getOrbit().addStateVector(svect)
|
||||
# tempOrbit.createOrbit() # 构建轨道模型
|
||||
|
||||
# num = 0
|
||||
# time_list= []
|
||||
# print("插值所有轨道")
|
||||
# for i in range(len(stateVectors)):
|
||||
#
|
||||
# time_list.append([stateVectors[i].timeStamp.timestamp(),
|
||||
# stateVectors[i].xPosition, stateVectors[i].yPosition, stateVectors[i].zPosition,
|
||||
# stateVectors[i].xVelocity, stateVectors[i].yVelocity, stateVectors[i].zVelocity])
|
||||
# num += 1
|
||||
#
|
||||
# model = ReconstructionSatelliteOrbit(time_list, starttime=centerTime_s)
|
||||
# time_dif = ((stopTime_s + 30) - (startTime_s - 30)) / 1000
|
||||
# time = np.zeros((1000, 1))
|
||||
# for i in range(1000):
|
||||
# time[i,:]=((startTime_s - 30) + time_dif * i)
|
||||
# t = time.reshape(-1)
|
||||
#
|
||||
# statepoints = model.getSatelliteSpaceState(t)
|
||||
|
||||
# print("初始插值-----------------------------------------------------")
|
||||
# self.frame.setSensingStart(datetime.datetime.fromtimestamp(t[2]))
|
||||
# self.frame.setSensingStop(datetime.datetime.fromtimestamp(t[len(t)-3]))
|
||||
|
||||
self.frame.setSensingStart(dataStartTime)
|
||||
self.frame.setSensingStop(dataStopTime)
|
||||
|
||||
diffTime = DTUtil.timeDeltaToSeconds(self.frame.sensingStop-self.frame.sensingStart)/2.0
|
||||
sensingMid = self.frame.sensingStart + datetime.timedelta(microseconds=int(diffTime*1e6))
|
||||
self.frame.setSensingMid(sensingMid)
|
||||
|
||||
# for i, value in zip(range(len(statepoints)), statepoints):
|
||||
# newOrb=tempOrbit.getTimeOrbits(self.frame.sensingStart.strftime("%Y-%m-%dT%H:%M:%S.%fZ"),
|
||||
# self.frame.sensingStop.strftime("%Y-%m-%dT%H:%M:%S.%fZ"),
|
||||
# orbitnum=500)
|
||||
# for svect in newOrb:
|
||||
# sv= StateVector()
|
||||
# sv.setTime(datetime.datetime.fromtimestamp(t[i]))
|
||||
# sv.setPosition([value[0],value[1],value[2]])
|
||||
# sv.setVelocity([value[3],value[4],value[5]])
|
||||
# self.frame.getOrbit().addStateVector(sv) # 插值结果写进了轨道模型中
|
||||
# # print("插值后的gps点", datetime.datetime.fromtimestamp(t[i]),value[0],value[1],value[2],value[3],value[4],value[5])
|
||||
# print('Orbits list len is %d' %num)
|
||||
# sv.setTime(svect.UTCTime)
|
||||
# sv.setPosition([svect.px,svect.py,svect.pz])
|
||||
# sv.setVelocity([svect.vx,svect.vy,svect.vz])
|
||||
# self.frame.getOrbit().addStateVector(sv)
|
||||
|
||||
print('Successfully read state vectors from product XML')
|
||||
|
||||
def extractPreciseOrbit(self, orbitfile, tstart, tend):
|
||||
|
@ -1026,7 +849,7 @@ class GF3_SLC(Sensor):
|
|||
lgth = self.frame.getNumberOfLines()
|
||||
# lineFlip = (self.product.imageAttributes.rasterAttributes.lineTimeOrdering.upper() == 'DECREASING')
|
||||
# pixFlip = (self.product.imageAttributes.rasterAttributes.pixelTimeOrdering.upper() == 'DECREASING')
|
||||
lineFlip = True
|
||||
lineFlip = False
|
||||
pixFlip = False
|
||||
|
||||
src = gdal.Open(self.tiff.strip(), gdal.GA_ReadOnly)
|
||||
|
@ -1037,7 +860,7 @@ class GF3_SLC(Sensor):
|
|||
imag = src.GetRasterBand(2).ReadAsArray(0,0,width,lgth)
|
||||
|
||||
if (real is None) or (imag is None):
|
||||
raise Exception('Input GF3 SLC seems to not be a 2 band Int16 image.')
|
||||
raise Exception('Input GF3_SLC SLC seems to not be a 2 band Int16 image.')
|
||||
|
||||
data = real+cJ*imag
|
||||
|
||||
|
@ -1087,7 +910,6 @@ class GF3_SLC(Sensor):
|
|||
t0 = self.product.processInfo.DopplerParametersReferenceTime
|
||||
poly = self.product.processInfo.DopplerCentroidCoefficients
|
||||
|
||||
|
||||
fd_mid = 0.0
|
||||
for kk in range(len(poly)):
|
||||
fd_mid += poly[kk] * (tMid - t0)**kk
|
||||
|
@ -1101,10 +923,10 @@ class GF3_SLC(Sensor):
|
|||
####For roiApp
|
||||
####More accurate
|
||||
from isceobj.Util import Poly1D
|
||||
|
||||
coeffs = poly
|
||||
dr = self.frame.getInstrument().getRangePixelSize()
|
||||
rref = 0.5 * Const.c * t0
|
||||
# rref = Const.c * t0
|
||||
r0 = self.frame.getStartingRange()
|
||||
norm = 0.5*Const.c/dr
|
||||
|
||||
|
@ -1112,44 +934,18 @@ class GF3_SLC(Sensor):
|
|||
for ind, val in enumerate(coeffs):
|
||||
dcoeffs.append( val / (norm**ind))
|
||||
|
||||
|
||||
poly = Poly1D.Poly1D()
|
||||
poly.initPoly(order=len(coeffs)-1)
|
||||
poly.setMean( (rref - r0)/dr - 1.0)
|
||||
poly.setCoeffs(dcoeffs)
|
||||
|
||||
# print("****" * 10)
|
||||
# print(Const.c)
|
||||
# print(rref)
|
||||
# print(dr)
|
||||
# print(dcoeffs)
|
||||
# print(r0)
|
||||
# print("****" * 10)
|
||||
poly = Poly1D.Poly1D()
|
||||
poly.initPoly(order=len(coeffs)-1)
|
||||
poly.setMean( (rref - r0)/dr - 1.0)
|
||||
poly.setCoeffs(dcoeffs)
|
||||
|
||||
print('getNumberOfSamples', self.frame.getNumberOfSamples())
|
||||
pix = np.linspace(0, self.frame.getNumberOfSamples(), num=len(coeffs)+1)
|
||||
|
||||
evals = poly(pix)
|
||||
fit = np.polyfit(pix,evals, len(coeffs)-1)
|
||||
self.frame._dopplerVsPixel = list(fit[::-1])
|
||||
# print("---- radar ------------------------------------------print")
|
||||
# print("t0",t0)
|
||||
# print("****" * 10)
|
||||
# print('lightspeed',Const.c)
|
||||
# print('rref',rref)
|
||||
# print('dr',dr)
|
||||
# print('dcoeff',dcoeffs)
|
||||
# print('r0',r0)
|
||||
# print("****" * 10)
|
||||
# print('pix',pix)
|
||||
# print('evals',evals)
|
||||
# print('fit',fit)
|
||||
# print('Doppler Fit: ', fit[::-1])
|
||||
# print('---------------------------------------------------')
|
||||
|
||||
|
||||
return quadratic
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -89,6 +89,7 @@ def saveTiff(target_data_path,xsize,ysize,gt,srs,target_arr):
|
|||
driver = gdal.GetDriverByName('GTiff') # 数据类型必须有,因为要计算需要多大内存空间
|
||||
tiff_geo=driver.Create(target_data_path, int(xsize)+1, int(ysize)+1, 1, gdal.GDT_Float32)
|
||||
tiff_geo.GetRasterBand(1).WriteArray(target_arr)
|
||||
tiff_geo.GetRasterBand(1).SetNoDataValue(-9999)
|
||||
tiff_geo.SetGeoTransform(gt)
|
||||
tiff_geo.SetProjection(srs.ExportToWkt())
|
||||
del tiff_geo
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<Root>
|
||||
<TaskID>CSAR_202107275419_0001-0</TaskID>
|
||||
<WorkSpace>E:\Result_GF3\</WorkSpace>
|
||||
<WorkSpace>D:\micro\WorkSpace\TOP\</WorkSpace>
|
||||
<AlgCompt>
|
||||
<DataTransModel>File</DataTransModel>
|
||||
<Artificial>ElementAlg</Artificial>
|
||||
|
@ -36,16 +36,16 @@
|
|||
<ParaType>File</ParaType>
|
||||
<DataType>tar.gz</DataType>
|
||||
<ParaSource>Man</ParaSource>
|
||||
<ParaValue>E:\Result_GF3\BackScattering\Output\GF3B_SYC_QPSI_008316_E116.1_N43.3_20230622_L1A_AHV_L10000202892-cal.tar.gz</ParaValue>
|
||||
<ParaValue>E:\202306hb\sar_img\GF3B_SYC_QPSI_008316_E116.1_N43.3_20230622_L1A_AHV_L10000202892-cal.tar.gz</ParaValue>
|
||||
</Parameter>
|
||||
<Parameter>
|
||||
<ParaName>Covering</ParaName>
|
||||
<ParaChsName>地表覆盖类型数据</ParaChsName>
|
||||
<Description>经过地理定标(WGS84)的地表覆盖类型数据</Description>
|
||||
<ParaType>File</ParaType>
|
||||
<DataType>zip</DataType>
|
||||
<DataType>tif</DataType>
|
||||
<ParaSource>Man</ParaSource>
|
||||
<ParaValue>E:\GF3Data\soilMoisture\CSAR_solim_50T_20220101-20230101.zip</ParaValue>
|
||||
<ParaValue>E:\202306hb\Landcover\50T_20220101-20230101.tif</ParaValue>
|
||||
</Parameter>
|
||||
<Parameter>
|
||||
<ParaName>CoveringIDs</ParaName>
|
||||
|
@ -64,9 +64,9 @@
|
|||
<ParaChsName>NDVI数据</ParaChsName>
|
||||
<Description>经过地理定标(WGS84)的NDVI数据</Description>
|
||||
<ParaType>File</ParaType>
|
||||
<DataType>zip</DataType>
|
||||
<DataType>tif</DataType>
|
||||
<ParaSource>Man</ParaSource>
|
||||
<ParaValue>E:\GF3Data\soilMoisture\CSAR_solim_S2_202306_NDVI.zip</ParaValue>
|
||||
<ParaValue>E:\202306hb\NDVI\S2_202306_NDVI.tif</ParaValue>
|
||||
</Parameter>
|
||||
<Parameter>
|
||||
<ParaName>NDVIScope</ParaName>
|
||||
|
@ -98,9 +98,9 @@
|
|||
<ParaChsName>NDWI数据</ParaChsName>
|
||||
<Description>经过地理定标(WGS84)的NDWI数据</Description>
|
||||
<ParaType>File</ParaType>
|
||||
<DataType>zip</DataType>
|
||||
<DataType>tif</DataType>
|
||||
<ParaSource>Man</ParaSource>
|
||||
<ParaValue>E:\GF3Data\soilMoisture\CSAR_solim_S2_202306_NDWI.zip</ParaValue>
|
||||
<ParaValue>E:\202306hb\NDWI\S2_202306_NDWI.tif</ParaValue>
|
||||
</Parameter>
|
||||
<Parameter>
|
||||
<ParaName>e1</ParaName>
|
||||
|
@ -183,7 +183,7 @@
|
|||
<ParaType>File</ParaType>
|
||||
<DataType>tar.gz</DataType>
|
||||
<ParaSource>Man</ParaSource>
|
||||
<ParaValue>E:\Result_GF3\SoilMoisture\Output\GF3B_SYC_QPSI_008316_E116.1_N43.3_20230622_L1A_AHV_L10000202892-cal-SMC.tar.gz</ParaValue>
|
||||
<ParaValue>D:\micro\WorkSpace\TOP\SoilMoisture\Output\GF3B_SYC_QPSI_008316_E116.1_N43.3_20230622_L1A_AHV_L10000202892-cal-SMC.tar.gz</ParaValue>
|
||||
<MaxValue>DEFAULT</MaxValue>
|
||||
<MinValue>DEFAULT</MinValue>
|
||||
<OptionValue>DEFAULT</OptionValue>
|
||||
|
|
|
@ -26,11 +26,13 @@ from tool.algorithm.algtools.filter.lee_Filter import Filter
|
|||
from tool.file.fileHandle import fileHandle
|
||||
import logging
|
||||
import os
|
||||
import glob
|
||||
import shutil
|
||||
import datetime
|
||||
import numpy as np
|
||||
import sys
|
||||
import multiprocessing
|
||||
|
||||
cover_id_list = []
|
||||
threshold_of_ndvi_min = 0
|
||||
threshold_of_ndvi_max = 0
|
||||
|
@ -53,10 +55,13 @@ logger = logging.getLogger("mylog")
|
|||
env_str = os.path.dirname(os.path.abspath(sys.argv[0]))
|
||||
os.environ['PROJ_LIB'] = env_str
|
||||
block_size_config = int(cf.get('block_size_config'))
|
||||
|
||||
|
||||
class MoistureMain:
|
||||
"""
|
||||
土壤水分处理主函数
|
||||
"""
|
||||
|
||||
def __init__(self, alg_xml_path):
|
||||
self.alg_xml_path = alg_xml_path
|
||||
self.imageHandler = ImageHandler()
|
||||
|
@ -85,7 +90,8 @@ class MoistureMain:
|
|||
|
||||
if self.__check_handler.check_run_env() is False:
|
||||
return False
|
||||
input_para_names = ['box', 'CoveringIDs', 'DualPolarSAR', 'Covering', 'NDVI', 'NDWI', 'e1', 'e2', 'Chh', 'Dhh', 'Cvv', 'Dvv']#, 'T', 'Pb', 'vsand', 'vclay']
|
||||
input_para_names = ['box', 'CoveringIDs', 'DualPolarSAR', 'Covering', 'NDVI', 'NDWI', 'e1', 'e2', 'Chh', 'Dhh',
|
||||
'Cvv', 'Dvv'] # , 'T', 'Pb', 'vsand', 'vclay']
|
||||
if self.__check_handler.check_input_paras(input_para_names) is False:
|
||||
return False
|
||||
self.__workspace_path = self.__alg_xml_handler.get_workspace_path()
|
||||
|
@ -133,7 +139,8 @@ class MoistureMain:
|
|||
para_dic.update({'LocalIncidenceAngle': in_tif_path})
|
||||
flag_list[4] = 1
|
||||
if flag_list != [1, 1, 1, 1, 1]:
|
||||
raise Exception('There are not tar_gz path: HH、HV(VV)、LocalIncidenceAngle or meta.xml in path:', tar_gz_path)
|
||||
raise Exception('There are not tar_gz path: HH、HV(VV)、LocalIncidenceAngle or meta.xml in path:',
|
||||
tar_gz_path)
|
||||
self.processinfo = flag_list
|
||||
return para_dic
|
||||
|
||||
|
@ -163,8 +170,10 @@ class MoistureMain:
|
|||
p = pp()
|
||||
self.__preprocessed_paras = p.preprocessing(para_names, ref_img_name,
|
||||
self.__processing_paras,
|
||||
self.__workspace_preprocessing_path, self.__workspace_preprocessed_path)
|
||||
self.__ref_img_path, self.__cols, self.__rows, self.__proj, self.__geo = p.get_ref_inf(self.__preprocessed_paras[ref_img_name])
|
||||
self.__workspace_preprocessing_path,
|
||||
self.__workspace_preprocessed_path)
|
||||
self.__ref_img_path, self.__cols, self.__rows, self.__proj, self.__geo = p.get_ref_inf(
|
||||
self.__preprocessed_paras[ref_img_name])
|
||||
logger.info('progress bar: 40%')
|
||||
|
||||
def create_roi(self):
|
||||
|
@ -174,7 +183,8 @@ class MoistureMain:
|
|||
"""
|
||||
processing_path = self.__workspace_processing_path
|
||||
# 利用角度为nan生成Mask
|
||||
pp.check_LocalIncidenceAngle(self.__preprocessed_paras['LocalIncidenceAngle'], self.__preprocessed_paras['LocalIncidenceAngle'])
|
||||
pp.check_LocalIncidenceAngle(self.__preprocessed_paras['LocalIncidenceAngle'],
|
||||
self.__preprocessed_paras['LocalIncidenceAngle'])
|
||||
angle_nan_mask_path = processing_path + 'angle_nan_mask.tif'
|
||||
roi.trans_tif2mask(angle_nan_mask_path, self.__preprocessed_paras['LocalIncidenceAngle'], np.nan)
|
||||
|
||||
|
@ -205,8 +215,8 @@ class MoistureMain:
|
|||
ndvi_scope = list(self.__processing_paras['NDVIScope'].split(';'))
|
||||
threshold_of_ndvi_min = float(ndvi_scope[0])
|
||||
threshold_of_ndvi_max = float(ndvi_scope[1])
|
||||
roi.trans_tif2mask(ndvi_mask_path, self.__preprocessed_paras['NDVI'], threshold_of_ndvi_min, threshold_of_ndvi_max)
|
||||
|
||||
roi.trans_tif2mask(ndvi_mask_path, self.__preprocessed_paras['NDVI'], threshold_of_ndvi_min,
|
||||
threshold_of_ndvi_max)
|
||||
|
||||
logger.info('create masks success!')
|
||||
# 利用覆盖范围和裸土范围 生成MASK
|
||||
|
@ -230,7 +240,8 @@ class MoistureMain:
|
|||
:return: True or False
|
||||
"""
|
||||
radar_center_frequency = MetaDataHandler.get_RadarCenterFrequency(self.__processing_paras['Origin_META'])
|
||||
lamda = MetaDataHandler.get_lamda(self.__processing_paras['Origin_META']) # * 100 #单位转为cm -> 修改 m, 陈增辉 2023.08.29
|
||||
lamda = MetaDataHandler.get_lamda(
|
||||
self.__processing_paras['Origin_META']) # * 100 #单位转为cm -> 修改 m, 陈增辉 2023.08.29
|
||||
k = 2 * 3.1415926 / lamda # 1/m --- ?
|
||||
# 计算ROI区域
|
||||
bare_land_mask_path = self.create_roi()
|
||||
|
@ -239,7 +250,8 @@ class MoistureMain:
|
|||
para_names = ['HH', 'VV', 'VH', 'HV']
|
||||
for i in para_names:
|
||||
if os.path.exists(self.__preprocessed_paras[i]):
|
||||
lee_path = os.path.join(self.__workspace_preprocessed_path, os.path.basename(self.__preprocessed_paras[i]).split(".")[0] + '_lee.tif')
|
||||
lee_path = os.path.join(self.__workspace_preprocessed_path,
|
||||
os.path.basename(self.__preprocessed_paras[i]).split(".")[0] + '_lee.tif')
|
||||
Filter().lee_process_sar(self.__preprocessed_paras[i], lee_path, 3, 0.25)
|
||||
logger.info('lee process finish: ' + self.__preprocessed_paras[i])
|
||||
os.remove(self.__preprocessed_paras[i])
|
||||
|
@ -249,13 +261,22 @@ class MoistureMain:
|
|||
bp = BlockProcess()
|
||||
# block_size = bp.get_block_size(self.__rows, self.__cols,block_size_config)
|
||||
block_size = bp.get_block_size(self.__rows, self.__cols)
|
||||
bp.cut_new(self.__workspace_preprocessed_path, self.__workspace_block_tif_path, ['tif', 'tiff'], 'tif', block_size)
|
||||
|
||||
pre_cuts = list(glob.glob(os.path.join(self.__workspace_preprocessed_path, '*.tif')))
|
||||
cut_dir = os.path.join(self.__workspace_preprocessed_path, 'cut_tif')
|
||||
if not os.path.exists(cut_dir):
|
||||
os.makedirs(cut_dir)
|
||||
for cut_tif in pre_cuts:
|
||||
tif_name = os.path.basename(cut_tif)
|
||||
if 'HH' in tif_name or 'VV' in tif_name or 'NDWI' in tif_name or 'LocalIncidenceAngle' in tif_name or 'mask' in tif_name:
|
||||
shutil.copy(cut_tif, os.path.join(cut_dir, tif_name))
|
||||
bp.cut_new(cut_dir, self.__workspace_block_tif_path, ['tif', 'tiff'], 'tif', block_size)
|
||||
logger.info('blocking tifs success!')
|
||||
|
||||
img_dir, img_name = bp.get_file_names(self.__workspace_block_tif_path, ['tif'])
|
||||
dir_dict = bp.get_same_img(img_dir, img_name)
|
||||
|
||||
angle_list, hh_list, vv_list,vh_list, hv_list, ndwi_list, mask_list = None, None, None, None, None, None, None
|
||||
angle_list, hh_list, vv_list, ndwi_list, mask_list = None, None, None, None, None
|
||||
for key in dir_dict.keys():
|
||||
tmp = key.split('_', 2)[0]
|
||||
if tmp == 'LocalIncidenceAngle':
|
||||
|
@ -264,20 +285,18 @@ class MoistureMain:
|
|||
hh_list = dir_dict[key]
|
||||
elif tmp == 'VV':
|
||||
vv_list = dir_dict[key]
|
||||
elif tmp == 'VH':
|
||||
vh_list = dir_dict[key]
|
||||
elif tmp == 'HV':
|
||||
hv_list = dir_dict[key]
|
||||
elif tmp == 'NDWI':
|
||||
ndwi_list = dir_dict[key]
|
||||
elif tmp == 'mask':
|
||||
mask_list = dir_dict[key]
|
||||
|
||||
if angle_list is None or hh_list is None or vv_list is None or vh_list is None or hv_list is None or ndwi_list is None:
|
||||
logger.info('angle_list is None or hh_list is None or vv_list is None or vh_list is None or hv_list is None or ndwi_list is None')
|
||||
if angle_list is None or hh_list is None or vv_list is None or ndwi_list is None or mask_list is None:
|
||||
logger.info(
|
||||
'angle_list is None or hh_list is None or vv_list is None or vh_list is None or hv_list is None or ndwi_list is None')
|
||||
return False
|
||||
if not len(angle_list) == len(hh_list) == len(vv_list) == len(vh_list) == len(hv_list) == len(ndwi_list):
|
||||
logger.info('[len(angle_list) == len(hh_list) == len(vv_list) == len(vh_list) == len(hv_list) == len(ndwi_list)] is False!')
|
||||
if not len(angle_list) == len(hh_list) == len(vv_list) == len(ndwi_list) == len(mask_list):
|
||||
logger.info(
|
||||
'[len(angle_list) == len(hh_list) == len(vv_list) == len(vh_list) == len(hv_list) == len(ndwi_list)] is False!')
|
||||
return False
|
||||
|
||||
processes_num = min([len(angle_list), multiprocessing_num, multiprocessing.cpu_count() - 1])
|
||||
|
@ -301,11 +320,14 @@ class MoistureMain:
|
|||
# vh_bare_soil_bsc_path = self.__workspace_block_tif_processed_path + 'vh_bare_soil_bsc' + suffix
|
||||
# hv_bare_soil_bsc_path = self.__workspace_block_tif_processed_path + 'hv_bare_soil_bsc' + suffix
|
||||
|
||||
flag = alg.cal_bare_soil_bsc(hh_bare_soil_bsc_path, hh_list[i], vwc_path, angle_list[i], self.__processing_paras['Chh'], self.__processing_paras['Dhh']) # 裸土后向散射系统(线性值)
|
||||
flag = alg.cal_bare_soil_bsc(hh_bare_soil_bsc_path, hh_list[i], vwc_path, angle_list[i],
|
||||
self.__processing_paras['Chh'],
|
||||
self.__processing_paras['Dhh']) # 裸土后向散射系统(线性值)
|
||||
if flag is False:
|
||||
return False
|
||||
|
||||
flag = alg.cal_bare_soil_bsc(vv_bare_soil_bsc_path, vv_list[i], vwc_path, angle_list[i], self.__processing_paras['Cvv'], self.__processing_paras['Dvv'])
|
||||
flag = alg.cal_bare_soil_bsc(vv_bare_soil_bsc_path, vv_list[i], vwc_path, angle_list[i],
|
||||
self.__processing_paras['Cvv'], self.__processing_paras['Dvv'])
|
||||
if flag is False:
|
||||
return False
|
||||
|
||||
|
@ -322,7 +344,8 @@ class MoistureMain:
|
|||
# pl.append(pool.apply_async(alg.cal_soil_moisture, (soil_moisture_path, hh_bare_soil_bsc_path, vv_bare_soil_bsc_path,
|
||||
# angle_list[i], mask_list[i], lamda, radar_center_frequency, self.__processing_paras['T'],
|
||||
# self.__processing_paras['Pb'], self.__processing_paras['vsand'], self.__processing_paras['vclay'],i))) # dobsen
|
||||
pl.append(pool.apply_async(alg.cal_soil_moisture, (soil_moisture_path, hh_bare_soil_bsc_path, vv_bare_soil_bsc_path,
|
||||
pl.append(pool.apply_async(alg.cal_soil_moisture,
|
||||
(soil_moisture_path, hh_bare_soil_bsc_path, vv_bare_soil_bsc_path,
|
||||
angle_list[i], mask_list[i], lamda, radar_center_frequency, 0,
|
||||
0, 0, 0, i))) # topp
|
||||
# pl.append((pool.apply_async(alg.cal_soilM, (soil_moisture_path, hh_list[i], vv_list[i], hv_list[i], vh_list[i], angle_list[i], mask_list[i], lamda)))) # oh 2004
|
||||
|
@ -352,7 +375,6 @@ class MoistureMain:
|
|||
roi.cal_roi(product_path, soil_moisture_path, bare_land_mask_path, background_value=np.nan)
|
||||
logger.info('cal soil_moisture success!')
|
||||
|
||||
|
||||
proj, geos, data = self.imageHandler.read_img(product_path)
|
||||
data[data < soil_moisture_value_min] = soil_moisture_value_min
|
||||
data[data > soil_moisture_value_max] = soil_moisture_value_max
|
||||
|
@ -419,6 +441,7 @@ class MoistureMain:
|
|||
if os.path.exists(path):
|
||||
file.del_folder(path)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
multiprocessing.freeze_support()
|
||||
start = datetime.datetime.now()
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -26,8 +26,12 @@ class BlockProcess:
|
|||
@staticmethod
|
||||
def get_block_size(rows, cols):
|
||||
block_size = 512
|
||||
if rows > 2048 and cols > 2048:
|
||||
if (rows // 1024) <= 5 and (cols // 1024) <= 5:
|
||||
block_size = 512
|
||||
elif 5 < (rows // 1024) < 10 and 5 < (cols // 1024) < 10:
|
||||
block_size = 1024
|
||||
else:
|
||||
block_size = 2048
|
||||
return block_size
|
||||
|
||||
# def get_block_size(rows, cols, block_size_config):
|
||||
|
|
|
@ -81,5 +81,8 @@ def write_bin_to_tif_soil(out_tif_dir, bin_dir):
|
|||
out_image.save(out_path)
|
||||
return out_tif_path
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
bin_dir = r'F:\TempData\oh2004'
|
||||
out_tif_dir = r'F:\TempData\oh2004tif'
|
||||
write_bin_to_tif_soil(out_tif_dir, bin_dir)
|
||||
|
||||
|
|
Loading…
Reference in New Issue