コード例 #1
0
ファイル: q_vertex.py プロジェクト: malien24/qVertex
    def prepareExportPoint(self, pointLayer, polygon, contour):
        ringq = 0
        csvdata = u''
        for ring in polygon:
            for pt in ring:
                for pointfeature in pointLayer.getFeatures():
                    if pointfeature.geometry().equals(QgsGeometry.fromPoint(QgsPoint(pt.x(), pt.y()))):
                        fullname = unicode(pointfeature.attribute(u'name'))
                        if fullname[0] == u'н':
                            name = fullname[1:]+u';'
                            prefix = u'Н;'
                        else:
                            name = fullname + u';'
                            prefix = u';'

                        x = round(QgsGeometry.fromPoint(pt).asPoint().y(), 2)
                        sx = unicode('{:.2f}'.format(x))+u';'
                        y = round(QgsGeometry.fromPoint(pt).asPoint().x(), 2)
                        sy = unicode('{:.2f}'.format(y))+u';'
                        pref = unicode(pointfeature.attribute(u'prec'))+u';'
                        hold = unicode(pointfeature.attribute(u'hold'))
                        if ringq > 0:
                            cnt = u'['+unicode(str(contour))+u'.'+unicode(str(ringq))+u'];'
                        else:
                            cnt = u'['+unicode(str(contour))+u'];'
                        csvdata += cnt+prefix+name+u';;'+sx+sy+u';;;'+pref+hold+u'\n'

            if len(polygon) >= ringq+2:
                csvdata +=u';;;;;;;;;;;\n'
            ringq += 1

        return csvdata
コード例 #2
0
    def getPoint(self, mapPoint):
        self.set_rad.setEnabled(True)
        # change tool so you don't get more than one POI
        self.canvas.unsetMapTool(self.emitPoint)
        self.canvas.setMapTool(self.userTool)
        # Get the click
        if mapPoint:
            self.atk_pt = QgsPoint(mapPoint)
            self.distance()
            # Specify the geometry type
            layer = QgsVectorLayer('Point?crs=epsg:28992', 'Attack Point',
                                   'memory')

            style = "style_attack.qml"
            qml_path = self.plugin_dir + "/data/" + style
            layer.loadNamedStyle(qml_path)
            layer.triggerRepaint()

            # Set the provider to accept the data source
            prov = layer.dataProvider()

            # Add a new feature and assign the geometry
            feat = QgsFeature()
            feat.setGeometry(QgsGeometry.fromPoint(mapPoint))
            prov.addFeatures([feat])

            # Update extent of the layer
            layer.updateExtents()

            # Add the layer to the Layers panel
            QgsMapLayerRegistry.instance().addMapLayers([layer])
コード例 #3
0
    def addPlaceMark(self, pos, name, description, category, timestamp):
        ''' adds a point to the layer

        :param pos: lat/lon position of the placemark
        :type pos: QgsPoint

        :param name: name of the placemark
        :type name: string

        :param description: extended text for the placemark
        :type description: string

        :param category: category to define the
        :type category: string

        :param timestamp: creation time of the placemark
        :type timestamp: string
        '''
        if self.hasLayer:
            feat = QgsFeature(self.layer.pendingFields())
            feat.setAttribute('name', name)
            feat.setAttribute('description', description)
            feat.setAttribute('class', category)
            feat.setAttribute('timestamp', timestamp)
            feat.setGeometry(QgsGeometry.fromPoint(pos))
            (res, _) = self.layer.dataProvider().addFeatures([feat])
            if res:
                self.layer.updateExtents()
            return res
        return False
コード例 #4
0
def createABasicPointFeature(point, attrs):
    feature = QgsFeature()
    feature.initAttributes(len(attrs))
    for (index, attr) in enumerate(attrs):
        feature.setAttribute(index, attr)
    geom = QgsGeometry.fromPoint(point)
    feature.setGeometry(geom)
    return feature
コード例 #5
0
def createASiteFeature(point, attrs):
    feature = QgsFeature()
    feature.initAttributes(len(attrs) + 1)
    for (index, attr) in enumerate(attrs):
        feature.setAttribute(index + 1, attr)
    # 如果是小区要素,id为(RNC-BSC_SiteId_CellId)
    feature.setAttribute(0, str(uuid4()).replace('-', ''))
    geom = QgsGeometry.fromPoint(point)
    feature.setGeometry(geom)
    return feature
コード例 #6
0
ファイル: q_vertex.py プロジェクト: malien24/qVertex
    def doCatalogMapPlan(self):
        pointLayer = self.getLayerByName(u'Точки')
        file_name = QFileDialog.getSaveFileName(None, u'Сохраните ведомость координат для карта(план)', self.lastDir, u'HTML файлы(*.html *.HTML)')
        if not file_name == u'':
            htmldata_start = u'<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=windows-1251"><meta name=ProgId content=Word.Document><meta name=Generator content="Microsoft Word 15"><meta name=Originator content="Microsoft Word 15"></head><body lang=RU link=blue vlink=purple style=\'tab-interval:35.4pt\'><table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0 width=718 style=\'width:19.0cm;margin-left:-1.7pt;border-collapse:collapse;border:none; mso-border-alt:solid windowtext .5pt;mso-yfti-tbllook:1184;mso-padding-alt: 0cm 5.4pt 0cm 5.4pt\'>'
            htmldata_row = u'<tr style=\'mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes\'>  <td width=85 style=\'width:63.8pt;border:solid windowtext 1.0pt;mso-border-alt:  solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt\'>  <p class=MsoNormal style=\'mso-margin-top-alt:auto;mso-margin-bottom-alt:auto\'><span  style=\'font-size:10.0pt;color:black\'>{0}<o:p></o:p></span></p>  </td> <td width=113 valign=top style=\'width:3.0cm;border:solid windowtext 1.0pt;  border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:  solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt\'>  <p class=MsoNormal align=center style=\'mso-margin-top-alt:auto;mso-margin-bottom-alt: auto;text-align:center\'><span style=\'font-size:10.0pt\'>{1}<o:p></o:p></span></p> </td> <td width=113 valign=top style=\'width:3.0cm;border:solid windowtext 1.0pt;  border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:  solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt\'>  <p class=MsoNormal align=center style=\'mso-margin-top-alt:auto;mso-margin-bottom-alt: auto;text-align:center\'><span style=\'font-size:10.0pt\'>{2}<o:p></o:p></span></p></td>  <td width=227 valign=top style=\'width:6.0cm;border:solid windowtext 1.0pt;  border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:  solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt\'>  <p class=MsoNormal align=center style=\'mso-margin-top-alt:auto;mso-margin-bottom-alt: auto;text-align:center\'><span style=\'font-size:10.0pt;color:black\'>{4}<o:p></o:p></span></p></td>  <td width=180 valign=top style=\'width:134.65pt;border:solid windowtext 1.0pt;  border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:  solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt\'> <p class=MsoNormal align=centerstyle=\'mso-margin-top-alt:auto;mso-margin-bottom-alt:  auto;text-align:center\'><b style=\'mso-bidi-font-weight:normal\'><sub><span style=\'font-size:10.0pt\'>{3}</span></sub></b><spanstyle=\'font-size:10.0pt\'><o:p></o:p></span></p> </td> </tr>'
            htmldata_end = u'</table></body></html>'

            exportData = htmldata_start
            for feat in self.iface.mapCanvas().currentLayer().selectedFeatures():
                polygone = feat.geometry().asPolygon()
                ringq = 0
                for ring in polygone:
                    for pt in ring:
                        for pointfeature in pointLayer.getFeatures():
                            if pointfeature.geometry().equals(QgsGeometry.fromPoint(QgsPoint(pt.x(), pt.y()))):
                                fullname = unicode(pointfeature.attribute(u'name'))
                                # if fullname[0] == u'н':
                                #     name = fullname[1:]+u';'
                                #     prefix = u'н;'
                                # else:
                                #     name = fullname + u';'
                                #     prefix = u';'

                                x = round(QgsGeometry.fromPoint(pt).asPoint().y(), 2)
                                sx = unicode('{:.2f}'.format(x))
                                y = round(QgsGeometry.fromPoint(pt).asPoint().x(), 2)
                                sy = unicode('{:.2f}'.format(y))
                                exportData += htmldata_row.format(fullname, sx, sy, u'–––––––', u'картометрический')
                                # pref = unicode(pointfeature.attribute(u'prec'))+u';'
                                # hold = unicode(pointfeature.attribute(u'hold'))

                    if len(polygone) >= ringq+2:
                        exportData += htmldata_row.format(u'', u'', u'', u'', u'')
                    ringq += 1
            exportData += htmldata_end
            try:
                ccf = open(file_name, 'w') # + u'.csv'
                ccf.write(exportData.encode('cp1251'))
            except Exception as err:
                print err
            finally:
                ccf.close()
コード例 #7
0
    def create_point(self, p1, name):
        layer = QgsVectorLayer('Point?crs=%s' % int(self.crs), name, "memory")
        mycrs = QgsCoordinateReferenceSystem(int(self.crs), 0)
        self.reprojectgeographic = QgsCoordinateTransform(
            self.iface.mapCanvas().mapRenderer().destinationCrs(), mycrs)
        pr = layer.dataProvider()
        point = QgsFeature()
        point.setGeometry(
            QgsGeometry.fromPoint(self.reprojectgeographic.transform(p1)))
        pr.addFeatures([point])
        #layer.setCrs(QgsCoordinateReferenceSystem(int(self.crs), 0))
        layer.updateExtents()

        QgsMapLayerRegistry.instance().addMapLayer(layer)

        return p1
コード例 #8
0
    def plotar(self):
        vl = QgsVectorLayer("Point", "temporary_points", "memory")
        pr = vl.dataProvider()

        # Enter editing mode
        vl.startEditing()

        # add fields
        pr.addAttributes([
            QgsField("estaca", QVariant.String),
            QgsField("descrição", QVariant.String),
            QgsField("north", QVariant.String),
            QgsField("este", QVariant.String),
            QgsField("cota", QVariant.String),
            QgsField("azimite", QVariant.String)
        ])
        fets = []

        for r in range(self.tableWidget.rowCount()):
            ident = self.tableWidget.item(r, 0).text()
            if ident in ["", None]: break
            fet = QgsFeature(vl.pendingFields())
            n = 0.0
            e = 0.0
            try:
                es = self.tableWidget.item(r, 0).text()
                d = self.tableWidget.item(r, 1).text()
                n = float(self.tableWidget.item(r, 3).text())
                e = float(self.tableWidget.item(r, 4).text())
                c = float(self.tableWidget.item(r, 5).text())
                a = self.tableWidget.item(r, 6).text()
            except:
                break
            fet.setGeometry(QgsGeometry.fromPoint(QgsPoint(e, n)))
            fet.setAttributes([es, d, n, e, c, a])
            fets.append(fet)
        pr.addFeatures(fets)
        vl.commitChanges()
        QgsMapLayerRegistry.instance().addMapLayer(vl)
コード例 #9
0
 def addPoint(self, ref, attrs):
     
     refLen = len(ref)
     
     if refLen > 3:
         code = ref[0:2].upper()
         #print code
         e = self.east[code]
         n = self.north[code]
         #print "East: ", e, " North: ", n
         # Should now have the northings and eastings values... now need to add some more precision
         metres = ref[2:]
         l = len(metres)
         # print l
         if l & 0x1: # bad news, shouldn't have an odd number of digits... bomb out!
             
             self.badGridError()
             return 1
         
         else:
             # Good news so far... even number of digits... split 'em in half and pad with zeroes
             l /= 2
             eMetres = metres[0:l]
             while len(eMetres) < 5:
                 eMetres = eMetres + "0"
             
             nMetres = metres[l:]
             while len(nMetres) < 5:
                 nMetres = nMetres + "0"
             
             # Add the metres onto the eastings and northings
             e += eMetres
             n += nMetres
             # print e
             # print n
             
             # Great... now have out coordinates in QGIS acceptable format... add a new point
             # Get active layer
             layer = qgis.utils.iface.activeLayer()
             caps = layer.dataProvider().capabilities()
             if caps:
                 
                 # Declare a feature
                 feat = QgsFeature()
                 
                 # Add attributes
                 if len(attrs) > 0: # Just use comma delimited attList
                     attList = attrs.split(",")
                     # print attList
                     feat.setAttributes(attList)
                 
                 # Add the points
                 feat.setGeometry(QgsGeometry.fromPoint(QgsPoint(int(e), int(n))))
                 res, outFeats = layer.dataProvider().addFeatures([feat])
                 if not res:
                     qgis.utils.iface.messageBar().pushMessage("Error", "An error occurred adding points", level=QgsMessageBar.CRITICAL)
                     self.stayOpen = False
                     return 1
                 
                 # Must update the UI for user to enjoy the new points
                 layer.triggerRepaint()
             
             else:
                 self.badGridError()    
     else:
         self.badGridError()
         return 1
     
     # Must be OK
     return 0
コード例 #10
0
ファイル: q_vertex.py プロジェクト: malien24/qVertex
 def createPart(self, layer, ring):
     c = len(ring)
     curr = 1
     pointLayer = self.getLayerByName(u'Точки')
     if pointLayer is None:
         idx = -1
     else:
         idx = pointLayer.fieldNameIndex('name')
     cadastreLayer = self.getLayerByName(u'Кадастр')
     for point in ring:
         if curr < c:
             point1 = point
             point2 = ring[curr]
             isEqual = False
             pt1stst = False
             pt2stst = False
             curr += 1
             #print point1, point2
             line_geometry=QgsGeometry.fromPolyline([QgsPoint(point1.x(), point1.y()),
                                                    QgsPoint(point2.x(), point2.y())])
             # find point
             for pointfeature in pointLayer.getFeatures():
                 if pointfeature.geometry().equals(QgsGeometry.fromPoint(QgsPoint(point1.x(), point1.y()))):
                     name = unicode(pointfeature.attribute(u'name'))
                     if name[0] == u'н':
                         pt1stst = True
                 if pointfeature.geometry().equals(QgsGeometry.fromPoint(QgsPoint(point2.x(), point2.y()))):
                     name = unicode(pointfeature.attribute(u'name'))
                     if name[0] == u'н':
                         pt2stst = True
             # check for identity
             features = layer.getFeatures()
             for f in features:
                 if line_geometry.equals(f.geometry()):
                     self.iface.messageBar().pushMessage(u'Найдена дублирующая часть границы, пропущена', level=QgsMessageBar.INFO)
                     isEqual = True
                     break
             #check for cadastre
             if not pt1stst and not pt2stst:
                 findInCadastre = False
                 print 'cadastre check'
                 if cadastreLayer is not None and not findInCadastre:
                     cadObjs = cadastreLayer.getFeatures()
                     for cadObj in cadObjs:
                         #print 'cadastre check iteration'
                         if cadObj.geometry().isMultipart():
                             for cpoly in cadObj.geometry().asMultiPolygon():
                                 if not findInCadastre:
                                     for cring in cpoly:
                                         cadCurr = 1
                                         if not findInCadastre:
                                             cc = len(cring)
                                             for cpoint in cring:
                                                 if cadCurr < cc:
                                                     cpoint1 = cpoint
                                                     cpoint2 = cring[cadCurr]
                                                     cadCurr += 1
                                                 cadLine=QgsGeometry.fromPolyline([QgsPoint(cpoint1.x(), cpoint1.y()), QgsPoint(cpoint2.x(), cpoint2.y())])
                                                 #print 'checking line'
                                                 if line_geometry.within(cadLine.buffer(0.000001, 16)):
                                                     print 'find in cadastre'
                                                     findInCadastre = True
                                                     break
                                                 else:
                                                     findInCadastre = False
                         else:
                             if not findInCadastre:
                                 for cring in cadObj.geometry().asPolygon():
                                     cadCurr = 1
                                     if not findInCadastre:
                                         cc = len(cring)
                                         for cpoint in cring:
                                             if cadCurr < cc:
                                                 cpoint1 = cpoint
                                                 cpoint2 = cring[cadCurr]
                                                 cadCurr += 1
                                             cadLine=QgsGeometry.fromPolyline([QgsPoint(cpoint1.x(), cpoint1.y()), QgsPoint(cpoint2.x(), cpoint2.y())])
                                             #print 'checking line'
                                             if  line_geometry.within(cadLine.buffer(0.000001, 16)):
                                                 print 'finded in cadastre'
                                                 findInCadastre = True
                                                 break
                                             else:
                                                 findInCadastre = False
                 if not findInCadastre:
                     pt2stst = True
             if not isEqual:
                 feat = QgsFeature()
                 feat.setGeometry(line_geometry)
                 typeidx = layer.fieldNameIndex('type')
                 feat.initAttributes(2)
                 if pt1stst or pt2stst:
                     feat.setAttribute(typeidx, 2)
                 else:
                     feat.setAttribute(typeidx, 0)
                 layer.dataProvider().addFeatures([feat])
コード例 #11
0
 def create_point(self, geometry):
     # add point to the layer
     self.seg = QgsFeature()
     self.seg.setGeometry(QgsGeometry.fromPoint(geometry))
     self.pr.addFeatures([self.seg])
     self.layer.updateExtents()