本文整理汇总了Python中qgis.core.QgsDistanceArea.computeDistanceBearing方法的典型用法代码示例。如果您正苦于以下问题:Python QgsDistanceArea.computeDistanceBearing方法的具体用法?Python QgsDistanceArea.computeDistanceBearing怎么用?Python QgsDistanceArea.computeDistanceBearing使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类qgis.core.QgsDistanceArea
的用法示例。
在下文中一共展示了QgsDistanceArea.computeDistanceBearing方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _calc_north
# 需要导入模块: from qgis.core import QgsDistanceArea [as 别名]
# 或者: from qgis.core.QgsDistanceArea import computeDistanceBearing [as 别名]
def _calc_north(self):
extent = self.canvas.extent()
if self.canvas.layerCount() == 0 or extent.isEmpty():
print "No layers or extent"
return 0
outcrs = self.canvas.mapSettings().destinationCrs()
if outcrs.isValid() and not outcrs.geographicFlag():
crs = QgsCoordinateReferenceSystem()
crs.createFromOgcWmsCrs("EPSG:4326")
transform = QgsCoordinateTransform(outcrs, crs)
p1 = QgsPoint(extent.center())
p2 = QgsPoint(p1.x(), p1.y() + extent.height() * 0.25)
try:
pp1 = transform.transform(p1)
pp2 = transform.transform(p2)
except QgsCsException:
roam.utils.warning("North arrow. Error transforming.")
return None
area = QgsDistanceArea()
area.setEllipsoid(crs.ellipsoidAcronym())
area.setEllipsoidalMode(True)
area.setSourceCrs(crs)
distance, angle, _ = area.computeDistanceBearing(pp1, pp2)
angle = math.degrees(angle)
return angle
else:
return 0
示例2: by_seconds
# 需要导入模块: from qgis.core import QgsDistanceArea [as 别名]
# 或者: from qgis.core.QgsDistanceArea import computeDistanceBearing [as 别名]
def by_seconds(self, seconds):
"""move by variable distance"""
def iterations(distance,h):
FIe1=0
LAMe1=0
FI=100
LAM=100
# iterations
while fabs(FI-FIe1)>0.0000000001 and fabs(LAM -LAMe1)>0.0000000001:
FI=FIe1
LAM=LAMe1
for i in range(0,int(ceil(distance/h))):
kfi=[]
klam=[]
kazi=[]
kfi.append(cos(azi[i])/(a*(1-(e2))/(pow((sqrt(1-(e2)*pow(sin(fi[i]),2))),3))))
klam.append(sin(azi[i])/((a/(sqrt(1-(e2)*pow(sin(fi[i]),2))))*cos(fi[i])))
kazi.append(sin(azi[i])*tan(fi[i])/(a/(sqrt(1-(e2)*pow(sin(fi[i]),2)))))
for j in range(1,3):
kfi.append(cos(azi[i]+kazi[j-1]*h/2)/(a*(1-(e2))/(pow(sqrt(1-(e2)*pow(sin(fi[i]+kfi[j-1]*h/2),2)),3))))
klam.append(sin(azi[i]+kazi[j-1]*h/2)/((a/(sqrt(1-(e2)*pow(sin(fi[i]+kfi[j-1]*h/2),2))))*cos(fi[i]+kfi[j-1]*h/2)))
kazi.append(sin(azi[i]+kazi[j-1]*h/2)*tan(fi[i]+kfi[j-1]*h/2)/(a/(sqrt(1-(e2)*pow(sin(fi[i]+kfi[j-1]*h/2),2)))))
kfi.append(cos(azi[i]+kazi[2]*h)/(a*(1-(e2))/(pow(sqrt(1-(e2)*pow(sin(fi[i]+kfi[2]*h),2)),3))))
klam.append(sin(azi[i]+kazi[2]*h)/((a/(sqrt(1-(e2)*pow(sin(fi[i]+kfi[2]*h),2))))*cos(fi[i]+kfi[2]*h)))
kazi.append(sin(azi[i]+kazi[2]*h)*tan(fi[i]+kfi[2]*h)/(a/(sqrt(1-(e2)*pow(sin(fi[i]+kfi[2]*h),2)))))
fi.append(fi[i]+(h/6.0)*(kfi[0]+2*kfi[1]+2*kfi[2]+kfi[3]))
lam.append(lam[i]+(h/6.0)*(klam[0]+2*klam[1]+2*klam[2]+klam[3]))
azi.append(azi[i]+(h/6.0)*(kazi[0]+2*kazi[1]+2*kazi[2]+kazi[3]))
FIe1=fi[i+1]
LAMe1=lam[i+1]
h=h/2
fi[1:]=[]
lam[1:]=[]
azi[1:]=[]
return FIe1,LAMe1
self._check()
header=self.inputfile.readline()
beforeLat=header.split('Lat_deg')
numberOfLatColumn=beforeLat[0].split(',')
beforeLong=header.split('Lon_deg')
numberOfLonColumn=beforeLong[0].split(',')
beforeSec=header.split('Gtm_sec')
numberOfSecColumn=beforeSec[0].split(',')
self.outputfile.write(header)
d = QgsDistanceArea()
d.setEllipsoid('WGS84')
d.setEllipsoidalMode(True)
d.ellipsoid()
a = 6378137.0 # WGS84 ellipsoid parametres
e2 = 0.081819190842622
line1=self.inputfile.readline()
if seconds>0:
linePos=self.inputfile.tell()
line1=line1.split(',')
while line1:
self.inputfile.seek(linePos)
line2=self.inputfile.readline()
linePos=self.inputfile.tell()
moveTime=1*seconds
outline=1*line1
inline=line2.split(',')
while moveTime>0: # for case of more than 1 second
if line2:
line2=line2.split(',')
p1=QgsPoint(float(line1[len(numberOfLonColumn)-1]),float(line1[len(numberOfLatColumn)-1]))
p2=QgsPoint(float(line2[len(numberOfLonColumn)-1]),float(line2[len(numberOfLatColumn)-1]))
if p1!=p2:
aziA = d.bearing(p1,p2)
l = d.computeDistanceBearing(p1,p2)[0]
if moveTime>(float(line2[len(numberOfSecColumn)-1])-float(line1[len(numberOfSecColumn)-1])):
moveTime=moveTime-(float(line2[len(numberOfSecColumn)-1])-float(line1[len(numberOfSecColumn)-1]))
elif moveTime!=0 and moveTime!=(float(line2[len(numberOfSecColumn)-1])-float(line1[len(numberOfSecColumn)-1])): #first geodetic problem
distance=l/(float(line2[len(numberOfSecColumn)-1])-float(line1[len(numberOfSecColumn)-1]))*moveTime
h=distance/2.0
fi=[float(line1[len(numberOfLatColumn)-1])*pi/180]
lam=[float(line1[len(numberOfLonColumn)-1])*pi/180]
azi=[aziA]
FIe1,LAMe1 = iterations(distance,h)
moveTime=0
else:
FIe1=float(line2[len(numberOfLatColumn)-1])*pi/180
LAMe1=float(line2[len(numberOfLonColumn)-1])*pi/180
moveTime=0
break
else:
if moveTime>(float(line2[len(numberOfSecColumn)-1])-float(line1[len(numberOfSecColumn)-1])):
#.........这里部分代码省略.........