def positionGeoChanged(self):
        try:
            if self.flag1 == 0:
                self.flag1 = 2
            if self.flag1 == 1:
                self.flag1 = 0
            if self.flag1 == 2:
                latDegree = Degrees.String2Degree(self.txtLat.Value)
                lonDegree = Degrees.String2Degree(self.txtLong.Value)
                point3dPlan = QgisHelper.CrsTransformPoint(
                    lonDegree.value, latDegree.value, define._latLonCrs,
                    define._xyCrs)
                self.txtPointX.setText(str(point3dPlan.get_X()))
                self.txtPointY.setText(str(point3dPlan.get_Y()))

                if self.alwwaysShowString == "Degree":
                    self.resultPoint3d = Point3D(
                        lonDegree.value, latDegree.value,
                        float(self.txtAltitudeM.text()))
                else:
                    if define._units == QGis.Meters:
                        self.resultPoint3d = Point3D(
                            float(self.txtPointX.text()),
                            float(self.txtPointY.text()),
                            float(self.txtAltitudeM.text()))
                    else:
                        self.resultPoint3d = Point3D(
                            lonDegree.value, latDegree.value,
                            float(self.txtAltitudeM.text()))
            self.emit(SIGNAL("positionChanged"), self)
        except:
            raise "This geodetic coordinate can not be converted to plan coordinate."
예제 #2
0
    def resultPointValueListMethod(resultValueList, dataBaseProcedureData_0,
                                   point3d_0, procEntityListType_0, parent):
        if len(resultValueList) > 0:
            lat = None
            lon = None
            if define._units == QGis.Meters:
                point3d = QgisHelper.CrsTransformPoint(
                    float(resultValueList[1]), float(resultValueList[2]),
                    define._xyCrs, define._latLonCrs)

                lat = Degrees(point3d.get_Y(), None, None,
                              DegreesType.Latitude)
                lon = Degrees(point3d.get_X(), None, None,
                              DegreesType.Longitude)
            else:
                lat = Degrees(float(resultValueList[2]), None, None,
                              DegreesType.Latitude)
                lon = Degrees(float(resultValueList[1]), None, None,
                              DegreesType.Longitude)
            str0 = lon.method_1("dddmmss.ssssH")
            textString = lat.method_1("ddmmss.ssssH")
            procEntityBases = DlgAixmSelectPosition.smethod_1(
                dataBaseProcedureData_0, procEntityListType_0, point3d_0,
                textString, str0)
            dlgAixmSelectPosition = DlgAixmSelectPosition()
            naN = None
            degree = None
            result, naN, degree = Geo.smethod_2(point3d_0.get_X(),
                                                point3d_0.get_Y())
            if (result):
                dataBaseProcedureData_0.method_60(procEntityBases,
                                                  procEntityListType_0,
                                                  naN.ToString(),
                                                  degree.ToString())
            dlgAixmSelectPosition.lstItems.Sorted = True
            for procEntityBase in procEntityBases:
                dlgAixmSelectPosition.lstItems.Add(procEntityBase)
            if (procEntityListType_0 != ProcEntityListType.CentersEx
                    and procEntityListType_0 != ProcEntityListType.FixesEx):
                dlgAixmSelectPosition.btnNewPCP.setEnabled(False)
                dlgAixmSelectPosition.btnNewPCP.setVisible(False)
            resultDlg = dlgAixmSelectPosition.exec_()
            procEntityBase_0 = None
            if (resultDlg != 1):
                if dlgAixmSelectPosition.newTypeSelected == NewDbEntryType.DPN:
                    flag, procEntityBase_0 = DlgAixmNewDPN.smethod_0(
                        dataBaseProcedureData_0, naN, degree)
                elif dlgAixmSelectPosition.newTypeSelected == NewDbEntryType.PCP:
                    flag, procEntityBase_0 = DlgAixmNewPCP.smethod_0(
                        dataBaseProcedureData_0, naN, degree)
                else:
                    flag = False
            else:
                procEntityBase_0 = dlgAixmSelectPosition.lstItems.SelectedItem
                flag = True
            QObject.emit(parent,
                         SIGNAL("DlgAixmSelectPosition_Smethod_0_Event"), flag,
                         procEntityBase_0)
            return
 def method_3(self):  #out Degrees degrees_0, out Degrees degrees_1)
     if self.getUnit() != QGis.Meters:
         try:
             return True, self.resultPoint3d.get_Y(
             ), self.resultPoint3d.get_X()
         except:
             return False, None, None
     else:
         point3dGeo = QgisHelper.CrsTransformPoint(
             self.resultPoint3d.get_X(), self.resultPoint3d.get_Y(),
             define._xyCrs, define._latLonCrs)
         try:
             return True, point3dGeo.get_Y(), point3dGeo.get_X()
         except:
             return False, None, None
 def acceptDlg(self):
     if self.pnlDetail.Point3d != None and isinstance(
             self.pnlDetail.Point3d, Point3D):
         xyPoint = QgisHelper.CrsTransformPoint(
             self.pnlDetail.Point3d.get_X(), self.pnlDetail.Point3d.get_Y(),
             define._latLonCrs, define._xyCrs,
             self.pnlDetail.Point3d.get_Z())
         self.x = QString(str(xyPoint.get_X()))
         self.y = QString(str(xyPoint.get_Y()))
         self.latitude = QString(str(self.pnlDetail.Point3d.get_Y()))
         self.longitude = QString(str(self.pnlDetail.Point3d.get_X()))
         self.altitude = QString(str(self.pnlDetail.Altitude().Metres))
     if self.pnlCenter.Point3d != None and isinstance(
             self.pnlCenter.Point3d, Point3D):
         self.cenLatitude = QString(str(self.pnlCenter.Point3d.get_Y()))
         self.cenLongitude = QString(str(self.pnlCenter.Point3d.get_X()))
     self.magVariation = self.pnlMagVariation.Value
     self.type = self.pnlType.SelectedItem
     self.accept()
    def loadObstaclesVector(self, obstacleLayers, surfaceLayers):
        progressMessageBar = define._messagBar.createMessage(
            "Loading Vector Obstacles...")
        self.progress = QProgressBar()
        self.progress.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
        progressMessageBar.layout().addWidget(self.progress)
        define._messagBar.pushWidget(progressMessageBar,
                                     define._messagBar.INFO)
        maxium = 0
        self.progress.setValue(0)
        for ly in obstacleLayers:
            maxium += ly.featureCount()

        if maxium == 0:
            return False
        self.progress.setMaximum(maxium)

        for obstacleLayer in obstacleLayers:
            obstacleUnits = obstacleLayer.crs().mapUnits()
            features = QgisHelper.getFeaturesInLayerExtent(
                define._canvas, obstacleLayer, surfaceLayers,
                SelectionModeType.Automatic)
            #             print len(features)
            for feature in features:
                name = feature.attribute("Name").toString()
                altitude = feature.attribute("Altitude").toFloat()[0]
                trees = define._trees
                tolerance = define._tolerance
                point = feature.geometry().asPoint()
                position = Point3D()
                positionDegree = Point3D()
                if define._canvas.mapUnits() == QGis.Meters:
                    if define._canvas.mapSettings().destinationCrs(
                    ) != obstacleLayer.crs():
                        position = QgisHelper.CrsTransformPoint(
                            point.x(), point.y(), obstacleLayer.crs(),
                            define._canvas.mapSettings().destinationCrs(),
                            altitude)
                    else:
                        position = Point3D(point.x(), point.y(), altitude)
                else:
                    if define._canvas.mapSettings().destinationCrs(
                    ) != obstacleLayer.crs():
                        positionDegree = QgisHelper.CrsTransformPoint(
                            point.x(), point.y(), obstacleLayer.crs(),
                            define._canvas.mapSettings().destinationCrs(),
                            altitude)
                    else:
                        positionDegree = Point3D(point.x(), point.y(),
                                                 altitude)
                featureId = feature.id()
                layerId = obstacleLayer.id()
                obstacle = Obstacle(name, position, layerId, featureId, None,
                                    trees, ObstacleTable.MocMultiplier,
                                    tolerance)
                obstacle.positionDegree = positionDegree
                #                 obstacle.positionDegree = positionDegree
                self.checkObstacle(obstacle)
                self.progress.setValue(self.progress.value() + 1)
                QApplication.processEvents()
            QApplication.processEvents()
        self.progress.setValue(maxium)
        define._messagBar.hide()
        self.manualPolygon = None
    def loadObstaclesDEM(self, obstacleLayersDEM, surfaceLayers):
        progressMessageBar = define._messagBar.createMessage(
            "Loading DEM Obstacles...")
        self.progress = QProgressBar()
        self.progress.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
        progressMessageBar.layout().addWidget(self.progress)
        define._messagBar.pushWidget(progressMessageBar,
                                     define._messagBar.INFO)
        maxium = 0
        offset = 0.0
        self.progress.setValue(0)
        wCount = 0
        hCount = 0
        for ly in obstacleLayersDEM:
            demDataProvider = ly.dataProvider()
            boundDem = demDataProvider.extent()
            xMin = boundDem.xMinimum()
            xMax = boundDem.xMaximum()
            yMin = boundDem.yMinimum()
            yMax = boundDem.yMaximum()
            bound = QgisHelper.getIntersectExtent(
                ly, QgsGeometry.fromRect(boundDem), surfaceLayers)
            #             boundGeom = QgsGeometry.fromRect(bound)
            if bound == None:
                continue
            block = ly.dataProvider().block(0, ly.extent(), ly.width(),
                                            ly.height())
            xMinimum = ly.dataProvider().extent().xMinimum()
            yMaximum = ly.dataProvider().extent().yMaximum()
            yMinimum = ly.dataProvider().extent().yMinimum()
            xMaximum = ly.dataProvider().extent().xMaximum()

            xOffSet = ly.extent().width() / ly.width()
            yOffSet = ly.extent().height() / ly.height()
            offset = xOffSet
            if bound.xMinimum() < xMinimum:
                wStartNumber = 0
                xStartValue = xMinimum
            else:
                wStartNumber = int((bound.xMinimum() - xMinimum) / xOffSet)
                xStartValue = bound.xMinimum()
            if yMaximum < bound.yMaximum():
                hStartNumber = 0
                yStartValue = yMaximum
            else:
                hStartNumber = int((yMaximum - bound.yMaximum()) / yOffSet)
                yStartValue = bound.yMaximum()

            if bound.xMaximum() > xMaximum:
                xEndValue = xMaximum
            else:
                xEndValue = bound.xMaximum()
            if yMinimum > bound.yMinimum():
                yEndValue = yMinimum
            else:
                yEndValue = bound.yMinimum()
            wCount = int(math.fabs(xEndValue - xStartValue) / xOffSet)
            hCount = int(math.fabs(yEndValue - yStartValue) / yOffSet)

            pixelCount = hCount
            maxium += pixelCount

        cellSizeWnd = cellsizeWnd(offset, wCount * hCount, maxium * 0.04)
        cellSizeWnd.setWindowTitle("Input Cell Size")
        result = cellSizeWnd.exec_()
        cellRate = 1
        if result == 1:
            offset = cellSizeWnd.cellsize
            maxium = cellSizeWnd.cellCount + 2
            cellRate = cellSizeWnd.cellRate


#             print cellSizeWnd.textedit1.text()

        if maxium == 0:
            return False
        self.progress.setMaximum(maxium)

        trees = define._treesDEM
        tolerance = define._toleranceDEM

        for obstacleLayer in obstacleLayersDEM:
            obstacleUnits = obstacleLayer.crs().mapUnits()
            demDataProvider = obstacleLayer.dataProvider()
            boundDem = demDataProvider.extent()
            bound = QgisHelper.getIntersectExtent(
                obstacleLayer, QgsGeometry.fromRect(boundDem), surfaceLayers)
            if bound == None:
                continue
            boundGeom = QgsGeometry.fromRect(bound)
            if not boundGeom.intersects(QgsGeometry.fromRect(boundDem)):
                continue
            block = obstacleLayer.dataProvider().block(1,
                                                       obstacleLayer.extent(),
                                                       obstacleLayer.width(),
                                                       obstacleLayer.height())
            xMinimum = obstacleLayer.extent().xMinimum()
            yMaximum = obstacleLayer.extent().yMaximum()
            yMinimum = obstacleLayer.extent().yMinimum()
            xMaximum = obstacleLayer.extent().xMaximum()

            xOffSet = obstacleLayer.extent().width() / obstacleLayer.width()
            yOffSet = obstacleLayer.extent().height() / obstacleLayer.height()

            if bound.xMinimum() < xMinimum:
                hStartNumber = 0
                xStartValue = xMinimum
            else:
                hStartNumber = int((bound.xMinimum() - xMinimum) / xOffSet)
                xStartValue = bound.xMinimum()
            if yMaximum < bound.yMaximum():
                wStartNumber = 0
                yStartValue = yMaximum
            else:
                wStartNumber = int((yMaximum - bound.yMaximum()) / yOffSet)
                yStartValue = bound.yMaximum()

            if bound.xMaximum() > xMaximum:
                xEndValue = xMaximum
            else:
                xEndValue = bound.xMaximum()
            if yMinimum > bound.yMinimum():
                yEndValue = yMinimum
            else:
                yEndValue = bound.yMinimum()
            wCount = int(math.fabs(xEndValue - xStartValue) / offset)
            hCount = int(math.fabs(yEndValue - yStartValue) / offset)

            xPixelWidth = 0.0
            yPixelWidth = 0.0
            featureID = 0
            # i = 0
            # k = 0
            # altitudeList = []
            # self.progress.setValue(0)
            # while i  <=  hCount - 1:
            #     j = 0
            #     while j <= wCount - 1:
            #         if block.isNoData(j * int(cellRate) + wStartNumber, i* int(cellRate) + hStartNumber):
            #             self.progress.setValue(k)
            #             QApplication.processEvents()
            #             j += 1
            #             k += 1
            #             altitudeList.append(None)
            #             continue
            #         altitude = block.value(j * int(cellRate) + wStartNumber, i * int(cellRate) + hStartNumber)
            #         altitudeList.append(altitude)
            #         self.progress.setValue(k)
            #         QApplication.processEvents()
            #         j += 1
            #         k += 1
            #     i += 1

            i = 0
            k = 0
            name = "DEM"
            semiXoffset = xOffSet / 2
            semiYoffset = yOffSet / 2
            while i <= hCount - 1:
                j = 0
                while j <= wCount - 1:
                    if block.isNoData(j * cellRate + wStartNumber,
                                      i * cellRate + hStartNumber):
                        self.progress.setValue(k)
                        QApplication.processEvents()
                        j += 1
                        k += 1
                        continue
                    altitude = block.value(j * cellRate + wStartNumber,
                                           i * cellRate + hStartNumber)
                    # # if block.isNoData(j * int(cellRate) + wStartNumber, i* int(cellRate) + hStartNumber):
                    # #     j += 1
                    # #     self.progress.setValue(self.progress.value() + 1)
                    # #     QApplication.processEvents()
                    # #     continue
                    # # altitude = block.value(j* int(cellRate) + wStartNumber, i* int(cellRate)+ hStartNumber)
                    # altitude = altitudeList[k]
                    # if altitude == None:
                    #     self.progress.setValue(k)
                    #     QApplication.processEvents()
                    #     j += 1
                    #     k += 1
                    #     continue

                    point = QgsPoint(
                        xStartValue + (i * cellRate) * xOffSet + semiXoffset,
                        yStartValue - (j * cellRate - 1) * yOffSet -
                        semiYoffset)
                    position = Point3D()
                    positionDegree = Point3D()

                    if define._canvas.mapUnits() == QGis.Meters:
                        if define._canvas.mapSettings().destinationCrs(
                        ) != obstacleLayer.crs():
                            position = QgisHelper.CrsTransformPoint(
                                point.x(), point.y(), obstacleLayer.crs(),
                                define._canvas.mapSettings().destinationCrs(),
                                altitude)
                        else:
                            position = Point3D(point.x(), point.y(), altitude)
                    else:
                        if define._canvas.mapSettings().destinationCrs(
                        ) != obstacleLayer.crs():
                            positionDegree = QgisHelper.CrsTransformPoint(
                                point.x(), point.y(), obstacleLayer.crs(),
                                define._canvas.mapSettings().destinationCrs(),
                                altitude)
                        else:
                            positionDegree = Point3D(point.x(), point.y(),
                                                     altitude)
                    obstacle = Obstacle(name, position, obstacleLayer.id(),
                                        featureID, None, trees,
                                        ObstacleTable.MocMultiplier, tolerance)
                    obstacle.positionDegree = positionDegree
                    if self.manualPolygon != None:
                        if not self.manualPolygon.contains(obstacle.Position):
                            continue
                    self.checkObstacle(obstacle)
                    self.progress.setValue(k)
                    QApplication.processEvents()
                    j += 1
                    featureID += 1
                    k += 1
                i += 1
        self.progress.setValue(maxium)
        define._messagBar.hide()
        self.manualPolygon = None
    def method_28_BD(self):
        point3d = None
        point3d1 = None
        self.surfaceType = SurfaceTypes.GeoDetermineBD
        flag = FlightPlanBaseDlg.btnConstruct_Click(self)
        if not flag:
            return
        if define._units == QGis.Meters:
            point3d0 = self.parametersPanel.pnlStartPosBD.Point3d
            point3dF0 = self.parametersPanel.pnlFinishPosBD.Point3d

            point3d = QgisHelper.CrsTransformPoint(point3d0.get_X(),
                                                   point3d0.get_Y(),
                                                   define._latLonCrs,
                                                   define._xyCrs)
            point3d1 = QgisHelper.CrsTransformPoint(point3dF0.get_X(),
                                                    point3dF0.get_Y(),
                                                    define._latLonCrs,
                                                    define._xyCrs)
        else:
            point3d = self.parametersPanel.pnlStartPosBD.Point3d
            point3d1 = self.parametersPanel.pnlFinishPosBD.Point3d

        constructionLayer = None
        mapUnits = define._canvas.mapUnits()
        if self.parametersPanel.chbMarkPointsBD.isChecked():
            constructionLayer = AcadHelper.createVectorLayer(
                SurfaceTypes.GeoDetermineBD + "_MarkPoint", QGis.Point)
            AcadHelper.setGeometryAndAttributesInLayer(constructionLayer,
                                                       point3d)
            AcadHelper.setGeometryAndAttributesInLayer(constructionLayer,
                                                       point3d1)

            # if mapUnits == QGis.Meters:
            #     constructionLayer = QgsVectorLayer("point?crs=%s"%define._xyCrs.authid (), SurfaceTypes.GeoDetermineBD + "_MarkPoint", "memory")
            # else:
            #     constructionLayer = QgsVectorLayer("point?crs=%s"%define._latLonCrs.authid (), SurfaceTypes.GeoDetermineBD + " MarkPoint", "memory")
            #
            # shpPath = ""
            # if define.obstaclePath != None:
            #     shpPath = define.obstaclePath
            # elif define.xmlPath != None:
            #     shpPath = define.xmlPath
            # else:
            #     shpPath = define.appPath
            # er = QgsVectorFileWriter.writeAsVectorFormat(constructionLayer, shpPath + "/" + QString(SurfaceTypes.GeoDetermineBD).replace(" ", "") + "_MarkPoint" + ".shp", "utf-8", constructionLayer.crs())
            # constructionLayer = QgsVectorLayer(shpPath + "/" + QString(SurfaceTypes.GeoDetermineBD).replace(" ", "") + "_MarkPoint" + ".shp", SurfaceTypes.GeoDetermineBD + " MarkPoint", "ogr")
            #
            # constructionLayer.startEditing()
            #
            #
            # feature = QgsFeature()
            # feature.setGeometry(QgsGeometry.fromPoint(point3d))
            # constructionLayer.addFeature(feature)
            # feature.setGeometry(QgsGeometry.fromPoint(point3d1))
            # constructionLayer.addFeature(feature)
            # constructionLayer.commitChanges()
            QgisHelper.appendToCanvas(define._canvas, [constructionLayer],
                                      SurfaceTypes.GeoDetermineBD)
            self.resultLayerList.append(constructionLayer)
        if self.parametersPanel.chbDrawLineBD.isChecked():
            constructionLayer = AcadHelper.createVectorLayer(
                SurfaceTypes.GeoDetermineBD + "_Line", QGis.Line)
            AcadHelper.setGeometryAndAttributesInLayer(constructionLayer,
                                                       [point3d, point3d1])
            QgisHelper.appendToCanvas(define._canvas, [constructionLayer],
                                      SurfaceTypes.GeoDetermineBD)
            self.resultLayerList.append(constructionLayer)
    def canvasPressEvent(self, e):
        #self.isEmittingPoint = True
        self.rubberBandPt.reset(QGis.Point)
        snapPoint = QgisHelper.snapPoint(e.pos(), self.mSnapper,
                                         define._canvas, True)
        if self.isDrawing == False:
            if snapPoint == None:
                self.startPoint = self.toMapCoordinates(e.pos())
            else:
                self.startPoint = snapPoint
            self.isDrawing = True
        else:
            self.isDrawing = False
            if snapPoint == None:
                self.endPoint = self.toMapCoordinates(e.pos())
            else:
                self.endPoint = snapPoint
            self.drawLine()
            self.reset()
            startPointPlan = None
            endPointPlan = None
            startPointGeodetic = None
            endPointGeodetic = None
            unitDefault = None
            try:
                if self.txtBearingGeodetic == None:
                    startPointPlan = self.startPoint
                    endPointPlan = self.endPoint
                else:
                    if define._units == QGis.Meters:
                        startPointPlan = self.startPoint
                        endPointPlan = self.endPoint

                        startPointGeodetic = QgisHelper.CrsTransformPoint(
                            startPointPlan.x(), startPointPlan.y(),
                            define._xyCrs, define._latLonCrs)
                        endPointGeodetic = QgisHelper.CrsTransformPoint(
                            endPointPlan.x(), endPointPlan.y(), define._xyCrs,
                            define._latLonCrs)

                    else:
                        startPointGeodetic = self.startPoint
                        endPointGeodetic = self.endPoint

                        startPointPlan = QgisHelper.CrsTransformPoint(
                            startPointGeodetic.x(), startPointGeodetic.y(),
                            define._latLonCrs, define._xyCrs)
                        endPointPlan = QgisHelper.CrsTransformPoint(
                            endPointGeodetic.x(), endPointGeodetic.y(),
                            define._latLonCrs, define._xyCrs)
                    unitDefault = QGis.Meters

                pass
            except:
                return

            if isinstance(self.txtBearing, NumberBoxPanel):
                al = MathHelper.getBearing(startPointPlan, endPointPlan,
                                           unitDefault)
                al = Unit.ConvertRadToDeg(al)
                self.txtBearing.Value = round(al, 4)
            else:
                al = MathHelper.getBearing(startPointPlan, endPointPlan,
                                           unitDefault)
                al = Unit.ConvertRadToDeg(al)
                self.txtBearing.setText(str(round(al, 4)))

            if self.txtBearingGeodetic != None:
                al = MathHelper.getBearing(startPointGeodetic,
                                           endPointGeodetic,
                                           QGis.DecimalDegrees)
                al = Unit.ConvertRadToDeg(al)
                self.txtBearingGeodetic.Value = round(al, 4)