Example #1
0
 def exportDataToExcel(self, layer, saveFilePath):
     fieldsName_list = getLayerFieldNames(layer)
     datas = getFeaturesDataBtLayer(layer)
     if len(datas) >= 65500:
         QMessageBox.critical(self.parent, u"错误", u"该功能不支持导出超过65500条数据")
         return False
     progress = Progess(self.parent, len(datas), u"导出数据中")
     progress.show()
     try:
         wbk = xlwt.Workbook(style_compression=2)
         sheet = wbk.add_sheet(unicode(layer.name()), True)
         # 先写入表头
         for (i, itm) in enumerate(fieldsName_list):
             sheet.write(0, i, itm, self.set_style(220, True, True))
         progress.count()
         # 写入数据
         if datas != None and len(datas) > 0:
             for (a, aitm) in enumerate(datas):
                 for (b, bitm) in enumerate(aitm):
                     sheet.write(a + 1, b, bitm,
                                 self.set_style(220, False, False))
             progress.count()
         wbk.save(saveFilePath)
         return True
     except Exception:
         raise Exception, traceback.format_exc()
     finally:
         progress.kill()
Example #2
0
 def run(self):
     area_type_dict = {}  # (key: area_type, value: nsite index list)
     d = QgsDistanceArea()  # 计算距离
     allNSiteFeatures = getFeaturesList(self.nsiteLayer)
     # 把所有的nsite按区域类型分类
     for nsiteFeature in allNSiteFeatures:
         area_type = nsiteFeature[u"区域类型"]
         if area_type not in [u"普通市区", u"密集市区", u"农村", u"郊区乡镇"]:
             area_type = u"普通市区"
         if not area_type_dict.has_key(area_type):
             area_type_dict[area_type] = [nsiteFeature]
         else:
             t = area_type_dict[area_type]
             t.append(nsiteFeature)
             area_type_dict[area_type] = t
             del t
     total = len(allNSiteFeatures)  # 写进度条
     progess = Progess(self.parent, total, u"优化中...")
     progess.show()
     delete_list = []  # 要删除的 nsiteFeaures.id() list
     for (area_type, nsiteFeatures_list) in area_type_dict.items():
         if area_type == u"密集市区":
             mergeDis = 200
         elif area_type == u"郊区乡镇":
             mergeDis = 500
         elif area_type == u"农村":
             mergeDis = 800
         else:
             # 默认普通市区
             mergeDis = 300
         for nsiteFeatures1 in nsiteFeatures_list:
             progess.count()
             lon1 = nsiteFeatures1[u"经度"]
             lat1 = nsiteFeatures1[u"纬度"]
             point1 = QgsPoint(float(lon1), float(lat1))
             rectangle = createARectangleByCenterPoint(point1, 2000)
             if nsiteFeatures1.id() in delete_list:
                 progess.count()
                 continue
             else:
                 request = QgsFeatureRequest()
                 request.setFilterRect(rectangle)
                 for nsiteFeature2 in self.nsiteLayer.getFeatures(request):
                     if nsiteFeatures1.id() == nsiteFeature2.id():
                         continue
                     if nsiteFeature2.id() in delete_list:
                         continue
                     lon2 = nsiteFeatures1[u"经度"]
                     lat2 = nsiteFeatures1[u"纬度"]
                     point2 = QgsPoint(float(lon2), float(lat2))
                     distance = d.convertMeasurement(
                         d.measureLine(point1, point2), 2, 0, False)[0]
                     if distance <= mergeDis:
                         delete_list.append(nsiteFeature2.id())
                         break
     progess.kill()
     # 删除features
     delFeatures(self.nsiteLayer, delete_list)
     return True
Example #3
0
 def importSCellData(self):
     try:
         # 导入相邻小区数据
         features = []
         total = len(self.data_list)
         progess = Progess(self.parent, total, u"数据导入中")
         progess.show()
         for itm in self.data_list:
             feat = createASCellFeature(itm)
             if feat == False:
                 progess.kill()
                 break
             else:
                 features.append(feat)
                 progess.count()
         scellLayer = getLayerByName(u"相邻小区", self.iface)
         res = importFeaturesToLayer(scellLayer, features)
         if res is False:
             scellLayer.destroyEditCommand()
             return False
         else:
             scellLayer.endEditCommand()  # 事务提交
             return True
     except Exception:
         raise Exception, traceback.format_exc()
Example #4
0
def updatePolygonInfo(iface, polygonLayer, polygon_id_field, content_field, parent=None):
    siteLayer = getLayerByName(u"基站", iface)
    cellLayer = getLayerByName(u"小区", iface)
    update_site_dict = {}  # 要更新了的基站dict (key: site.id(), value: {field: value})
    update_cell_dict = {}  # 要更新了的小区dict (key: cell.id(), value: {field: value})

    all_polygon = polygonLayer.getFeatures()
    # 生成进度条
    total = polygonLayer.featureCount()
    progess = Progess(parent, total)
    progess.show()  # 显示进度条
    for polygon in all_polygon:
        polygon_geom = polygon.geometry()
        polygon_id = polygon[polygon_id_field]
        if content_field != '':
            content = polygon[content_field]
        else:
            content = None

        all_site = siteLayer.getFeatures()
        for site in all_site:
            if not update_site_dict.has_key(site.id()):
                site_geom = site.geometry()
                # 判断是否相交
                if site_geom.intersects(polygon_geom):
                    temp_dict = {}
                    temp_dict[site.fieldNameIndex(u'Polygon')] = polygon_id
                    if content != None:
                        temp_dict[site.fieldNameIndex(u'其他')] = content
                    update_site_dict[site.id()] = temp_dict
                    del temp_dict

        all_cell = cellLayer.getFeatures()
        for cell in all_cell:
            if not update_cell_dict.has_key(cell.id()):
                cell_gemo = cell.geometry()
                # 判断是否相交
                if cell_gemo.intersects(polygon_geom):
                    temp_dict = {}
                    temp_dict[cell.fieldNameIndex(u'Polygon')] = polygon_id
                    if content != None:
                        temp_dict[cell.fieldNameIndex(u'其他')] = content
                    update_cell_dict[cell.id()] = temp_dict
                    del temp_dict
        progess.count()

    result1 = modifyFeatures(siteLayer, update_site_dict)
    result2 = modifyFeatures(cellLayer, update_cell_dict)
    progess.kill()
    if result1 and result2:
        return True
    else:
        return False
Example #5
0
 def getDivDatas(self, searchRange, density=0.5, main_thread_flag=False):
     search_result = []
     # 根据搜索密度分块
     xmin = float(searchRange[0][0])
     xmax = float(searchRange[1][0])
     ymin = float(searchRange[0][1])
     ymax = float(searchRange[1][1])
     xNum = (xmax - xmin) * density
     yNum = (ymax - ymin) * density
     rows = int(1 / density)
     cols = int(1 / density)
     if main_thread_flag:
         progess_len = rows * cols
         progess = Progess(self.parent, progess_len)
         progess.show()
     for block_index in xrange(rows * cols):
         # 整理当前分块的搜索范围
         i = block_index / rows
         j = block_index % rows
         aa = ymin + j * yNum
         bb = xmin + i * xNum
         cc = aa + yNum
         dd = bb + xNum
         bottom_left_point = (bb, aa)
         upper_right_point = (dd, cc)
         # 获取该分块的第0页搜索结果
         url = self.createURL(bottom_left_point, upper_right_point)
         try:
             (total, datas) = self.getDatas(url)
             # 如果搜索结果大于400则将分块按0.5的搜索密度继续分块
             if total >= 400:
                 datas = self.getDivDatas(
                     (bottom_left_point, upper_right_point), 0.5)
                 if datas:
                     search_result.extend(datas)
             # 小于400获取该分块所有结果
             else:
                 # 添加第0页搜索结果
                 search_result.extend(datas)
                 # 遍历并添加余下页搜索结果
                 page_num = int(
                     math.ceil(total /
                               (self.page_size * len(self.keywords))))
                 for current_page_num in range(1, page_num):
                     url = self.createURL(bottom_left_point,
                                          upper_right_point,
                                          current_page_num)
                     (datas_result, datas) = self.getDatas(url)
                     if datas_result != False:
                         search_result.extend(datas)
                     else:
                         print url
                         return False
         except Exception, e:
             print url
             raise traceback.format_exc()
         if ("progess" in locals().keys()) and main_thread_flag:
             # 判断进度条是否存在
             progess.count()
    def createData(self):
        outputs = None
        datas = u''
        if self.type == TencentType.Site:
            # 基站
            # 数据分组,每组最多30
            points = []  # 已经分组的需要转换的点
            qq_points = []  # 已经转换好的点
            total = 0  # 总记录数
            if (len(self.site_datas) % 30) > 0:
                groupCount = len(self.site_datas) / 30 + 1
            else:
                groupCount = len(self.site_datas) / 30
            for i in range(groupCount):
                temp = []
                for j in range(30):
                    if total < len(self.site_datas):
                        temp.append(self.site_points[(i * 30) + j])
                    total = total + 1
                points.append(temp)
                del temp
            # 生成进度条
            total = len(points) + len(self.site_datas)
            progess = Progess(self.parent, total)
            progess.show()
            # 数据点转换
            for groups in points:
                locations = u''
                for (x, point) in enumerate(groups):
                    locations = locations + str(point[1]) + u"," + str(
                        point[0])  # 纬度在前,经度在后
                    if x != len(groups) - 1:
                        locations = locations + u";"
                url = u"http://apis.map.qq.com/ws/coord/v1/translate?locations=" + locations \
                      + u"&type=1&key=" + self.key
                req = urllib2.Request(url)
                time.sleep(0.4)  # 0.4s发送一次请求
                res_data = urllib2.urlopen(req)
                res = res_data.read()
                s = json.loads(res)
                if s[u'status'] != 0:
                    message = s[u'message']
                    print s[u'status']
                    print message
                    QMessageBox(
                        self.parent, u"错误",
                        u"错误代码:" + str(s[u'status']) + u"\n" + s[u'message'])
                    progess.kill()
                    return (False, outputs)
                else:
                    progess.count()

                for i in range(len(groups)):
                    qq_points.append((s[u'locations'][i][u'lng'],
                                      s[u'locations'][i][u'lat']))

            # 数据转换(用自定义算法)
            total = len(self.site_datas)
            progess = Progess(self.parent, total)
            progess.show()

            for (i, data) in enumerate(self.site_datas):
                qq_lon = qq_points[i][0]
                qq_lat = qq_points[i][1]

                datas =  datas + u"{SiteName:'" + data[0] + u"',SiteId:'" + data[1] + \
                        u"',lon:" + str(self.site_points[i][0]) + u",lat:" + str(self.site_points[i][1]) + \
                        u",qq_lon:" + str(qq_lon) + u",qq_lat:" + \
                        str(qq_lat) + u"}\n"
                if i != len(self.site_datas) - 1:
                    datas = datas + ","
                progess.count()
            outputs = u"var site = [ \n" + datas + u"\n" + u"]\n"

            if outputs != None:
                #print datas
                return (True, outputs)
            else:
                return (False, outputs)

        elif self.type == TencentType.Cell:
            # 小区
            # 生成进度条
            total = len(self.cell_datas) + 1
            progess = Progess(self.parent, total)
            progess.show()
            for (i, data) in enumerate(self.cell_datas):
                # 先转换基站的经纬度(纬度在前,经度在后)
                locations = str(data[5]) + u"," + str(data[4]) + u";"
                for (j, point) in enumerate(self.cell_points[i]):
                    # 数据点转换(纬度在前,经度在后)
                    if len(self.cell_points[i]) > 40:
                        # 如果小区是圆形则只转换基站坐标
                        locations = locations + str(data[5]) + u"," + str(
                            data[4])
                        break
                    else:
                        locations = locations + str(point[1]) + u"," + str(
                            point[0])
                        if j != len(self.cell_points[i]) - 1:
                            locations = locations + u";"
                url = u"http://apis.map.qq.com/ws/coord/v1/translate?locations=" + locations \
                      + u"&type=1&key=" + self.key
                req = urllib2.Request(url)
                time.sleep(0.4)  # 0.4s发送一次请求
                res_data = urllib2.urlopen(req)
                res = res_data.read()
                s = json.loads(res)  # s[u'locations'] 第一个数据为基站经纬度
                if s[u'status'] != 0:
                    print s[u'status']
                    message = s[u'message']
                    print message
                    QMessageBox(
                        self.parent, u"错误",
                        u"错误代码:" + str(s[u'status']) + u"\n" + s[u'message'])
                    progess.kill()
                    return (False, outputs)
                else:
                    polygon = u"["
                    qq_lon = u""  # 转换后的基站经度
                    qq_lat = u""  # 转换后的基站纬度
                    for (m, qq_point) in enumerate(s[u'locations']):
                        if m == 0:
                            qq_lon = str(qq_point[u'lng'])
                            qq_lat = str(qq_point[u'lat'])
                        else:
                            polygon = polygon + str(
                                qq_point[u'lng']) + u"," + str(
                                    qq_point[u'lat'])
                            if m != len(s[u'locations']) - 1:
                                polygon = polygon + u","
                    polygon = polygon + u"]"

                    datas =  datas + u"{CellName:'" + data[0] + u"',CellId:'" + data[1] + \
                            u"',SiteName:'" + data[2] + u"',SiteId:'" + data[3] + \
                            u"',lon:" + str(data[4]) + u",lat:" + str(data[5]) + \
                            u",qq_lon:" + qq_lon + u",qq_lat:" + qq_lat + \
                            u",WCDMA_PSC:'" + str(data[6]) + u"',LTE_PCI:'" + str(data[7]) + \
                            u"',CDMA_PN:'" + str(data[8]) + u"',GSM_BCCH:'" + str(data[9]) + \
                            u"',Azimuth:'" + str(data[10]) + u"',TILT:'" + str(data[11]) + \
                            u"',AntHeigth:'" + str(data[12]) + u"',RNC_BSC:'" + str(data[13]) + \
                            u"', Polygon:" + polygon + u"}\n"
                    if i != len(self.cell_datas) - 1:
                        datas = datas + u","
                    progess.count()
            outputs = u"var cell = [ \n" + datas + u"\n" + u"]\n"
            progess.count()

            if outputs != None:
                #print datas
                return (True, outputs)
            else:
                return (False, outputs)
Example #7
0
    def createData(self):
        outputs = None
        datas = u''
        if self.type == BaiduType.Site:
            # 基站
            # 数据分组,每组最多99
            points = []  # 已经分组的需要转换的点
            bd_points = []  # 已经转换好的点
            total = 0  # 总记录数
            if (len(self.site_datas) % 99) > 0:
                groupCount = len(self.site_datas) / 99 + 1
            else:
                groupCount = len(self.site_datas) / 99
            for i in range(groupCount):
                temp = []
                for j in range(99):
                    if total < len(self.site_datas):
                        temp.append(self.site_points[(i * 99) + j])
                    total = total + 1
                points.append(temp)
                del temp
            # 生成进度条
            total = len(points) + len(self.site_datas)
            progess = Progess(self.parent, total)
            progess.show()
            # 数据点转换
            for groups in points:
                coords = u''
                for (x, point) in enumerate(groups):
                    coords = coords + str(point[0]) + u"," + str(point[1])
                    if x != len(groups) - 1:
                        coords = coords + u";"
                url = u"https://api.map.baidu.com/geoconv/v1/?coords=" + coords \
                      + u"&from=1&to=5&ak=" + self.key
                req = urllib2.Request(url)
                res_data = urllib2.urlopen(req)
                res = res_data.read()
                s = json.loads(res)
                if s[u'status'] != 0:
                    status = s[u'status']
                    if status == 1:
                        print status
                        QMessageBox.critical(self.parent, u"错误", u"坐标转换出现内部错误")
                        return (False, outputs)
                    elif status == 21:
                        print status
                        QMessageBox.critical(self.parent, u"错误", u"坐标转换from非法")
                        return (False, outputs)
                    elif status == 22:
                        print status
                        QMessageBox.critical(self.parent, u"错误", u"坐标转换to非法")
                        return (False, outputs)
                    elif status == 24:
                        print status
                        QMessageBox.critical(self.parent, u"错误",
                                             u"坐标转换coords格式非法")
                        return (False, outputs)
                    elif status == 25:
                        print status
                        QMessageBox.critical(self.parent, u"错误",
                                             u"坐标转换coords个数非法")
                        return (False, outputs)
                progess.count()
                for i in range(len(groups)):
                    bd_points.append(
                        (s[u'result'][i][u'x'], s[u'result'][i][u'y']))

            for (i, data) in enumerate(self.site_datas):
                bd_lon = bd_points[i][0]
                bd_lat = bd_points[i][1]

                datas =  datas + u"{SiteName:'" + data[0] + u"',SiteId:'" + data[1] + \
                        u"',lon:" + str(self.site_points[i][0]) + u",lat:" + str(self.site_points[i][1]) + \
                        u",bd_lon:" + str(bd_lon) + u",bd_lat:" + \
                        str(bd_lat) + u"}\n"
                if i != len(self.site_datas) - 1:
                    datas = datas + ","
                progess.count()
            outputs = u"var site = [ \n" + datas + u"\n" + u"]\n"

            if outputs != None:
                return (True, outputs)
            else:
                return (False, outputs)

        elif self.type == BaiduType.Cell:
            # 小区
            # 生成进度条
            total = len(self.cell_datas) + 1
            progess = Progess(self.parent, total)
            progess.show()
            for (i, data) in enumerate(self.cell_datas):
                # 先转换基站的经纬度
                coords = str(data[4]) + u"," + str(data[5]) + u";"

                for (j, point) in enumerate(self.cell_points[i]):
                    #print 8
                    # 数据点转换
                    coords = coords + str(point[0]) + u"," + str(point[1])
                    if j != len(self.cell_points[i]) - 1:
                        coords = coords + u";"
                url = u"https://api.map.baidu.com/geoconv/v1/?coords=" + coords \
                        + u"&from=1&to=5&ak=" + self.key
                req = urllib2.Request(url)
                res_data = urllib2.urlopen(req)
                res = res_data.read()
                s = json.loads(res)  # s[u'result'] 第一个数据为基站经纬度
                if s[u'status'] != 0:
                    status = s[u'status']
                    if status == 1:
                        print u"坐标转换出现内部错误"
                        return (False, outputs)
                    elif status == 21:
                        print u"坐标转换from非法"
                        return (False, outputs)
                    elif status == 22:
                        print u"坐标转换to非法 "
                        return (False, outputs)
                    elif status == 24:
                        print u"坐标转换coords格式非法 "
                        return (False, outputs)
                    elif status == 25:
                        print u"坐标转换coords个数非法,超过限制 "
                        return (False, outputs)
                    else:
                        print status

                polygon = u"["
                bd_lon = u""  # 转换后的基站经度
                bd_lat = u""  # 转换后的基站纬度
                for (m, bd_point) in enumerate(s[u'result']):
                    if m == 0:
                        bd_lon = str(bd_point[u'x'])
                        bd_lat = str(bd_point[u'y'])
                    else:
                        polygon = polygon + str(bd_point[u'x']) + u"," + str(
                            bd_point[u'y'])
                        if m != len(s[u'result']) - 1:
                            polygon = polygon + u","
                polygon = polygon + u"]"

                datas =  datas + u"{CellName:'" + data[0] + u"',CellId:'" + data[1] + \
                        u"',SiteName:'" + data[2] + u"',SiteId:'" + data[3] + \
                        u"',lon:" + str(data[4]) + u",lat:" + str(data[5]) + \
                        u",bd_lon:" + bd_lon + u",bd_lat:" + bd_lat + \
                        u",WCDMA_PSC:'" + str(data[6]) + u"',LTE_PCI:'" + str(data[7]) + \
                        u"',CDMA_PN:'" + str(data[8]) + u"',GSM_BCCH:'" + str(data[9]) + \
                        u"',Azimuth:'" + str(data[10]) + u"',TILT:'" + str(data[11]) + \
                        u"',AntHeigth:'" + str(data[12]) + u"',RNC_BSC:'" + str(data[13]) + \
                        u"', Polygon:" + polygon + u"}\n"
                if i != len(self.cell_datas) - 1:
                    datas = datas + u","
                progess.count()
            outputs = u"var cell = [ \n" + datas + u"\n" + u"]\n"
            progess.count()

            if outputs != None:
                return (True, outputs)
            else:
                return (False, outputs)
Example #8
0
    def createData(self):
        outputs = None
        datas = u''
        if self.type == SogoType.Site:
            # 生成进度条
            total = len(self.site_datas)
            progess = Progess(self.parent, total)
            progess.show()

            for (i, data) in enumerate(self.site_datas):
                datas = datas + u"{SiteName:'" + data[0] + u"',SiteId:'" + data[1] + \
                        u"',lon:" + str(self.site_points[i][0]) + u",lat:" + str(self.site_points[i][1]) + \
                        u"}\n"
                if i != len(self.site_datas) - 1:
                    datas = datas + ","
                progess.count()
            outputs = u"var site = [ \n" + datas + u"\n" + u"]\n"

            if outputs != None:
                # print datas
                return (True, outputs)
            else:
                return (False, outputs)

        elif self.type == SogoType.Cell:
            # 小区
            # 生成进度条
            total = len(self.cell_datas) + 1
            progess = Progess(self.parent, total)
            progess.show()
            for (i, data) in enumerate(self.cell_datas):
                polygon = u"["
                for (j, point) in enumerate(self.cell_polygons[i]):
                    polygon = polygon + str(point[0]) + u"," + str(point[1])
                    if j != len(self.cell_polygons[i]) - 1:
                        polygon = polygon + u","
                polygon = polygon + u"]"
                datas = datas + u"{CellName:'" + data[0] + u"',CellId:'" + data[1] + \
                        u"',SiteName:'" + data[2] + u"',SiteId:'" + data[3] + \
                        u"',lon:" + str(data[4]) + u",lat:" + str(data[5]) + \
                        u",WCDMA_PSC:'" + str(data[6]) + u"',LTE_PCI:'" + str(data[7]) + \
                        u"',CDMA_PN:'" + str(data[8]) + u"',GSM_BCCH:'" + str(data[9]) + \
                        u"',Azimuth:'" + str(data[10]) + u"',TILT:'" + str(data[11]) + \
                        u"',AntHeigth:'" + str(data[12]) + u"',RNC_BSC:'" + str(data[13]) + \
                        u"', Polygon:" + polygon + u"}\n"
                if i != len(self.cell_datas) - 1:
                    datas = datas + u","
                progess.count()
            outputs = u"var cell = [ \n" + datas + u"\n" + u"]\n"
            progess.count()

            if outputs != None:
                return (True, outputs)
            else:
                return (False, outputs)
Example #9
0
    def create(self):
        try:
            outputs = None
            head = u'<?xml version="1.0" encoding="utf-8" ?>'
            Schema_label = KMLLabel('Schema')
            Schema_label.setAttribute(('name', self.filename))

            for (field, type) in KMLHead.items():
                SimpleField_label = KMLLabel('SimpleField')
                SimpleField_label.setAttribute(('name', field), ('type', type))
                SimpleField = SimpleField_label.create()
                Schema_label.addLabel(SimpleField)
            Schema = Schema_label.create()
            Document_label = KMLLabel('Document')
            Document_label.addLabel(Schema)

            # 基站
            if self.type == KMLType.Site:
                # 生成进度条
                total = len(self.site_datas) + 1
                progess = Progess(self.parent, total)
                progess.show()

                Folder_label = KMLLabel('Folder')
                name_label = KMLLabel('name')
                name_label.createTextNode(u"基站")
                name = name_label.create()
                Folder_label.addLabel(name)

                for (i, feature) in enumerate(self.site_datas):
                    Placemark_label = KMLLabel('Placemark')
                    ExtendedData_label = KMLLabel('ExtendedData')
                    SchemaData_label = KMLLabel('SchemaData')
                    SchemaData_label.setAttribute(
                        ('schemaUrl', u'#' + self.filename))
                    for (j, data) in enumerate(feature):
                        SimpleData_label = KMLLabel('SimpleData')
                        SimpleData_label.setAttribute(
                            ('name', self.site_fields[j]))
                        if data != None:
                            SimpleData_label.createTextNode(data)
                        else:
                            SimpleData_label.createTextNode('NULL')
                        SimpleData = SimpleData_label.create()
                        SchemaData_label.addLabel(SimpleData)
                    SchemaData = SchemaData_label.create()
                    ExtendedData_label.addLabel(SchemaData)
                    ExtendedData = ExtendedData_label.create()
                    Point_label = KMLLabel('Point')
                    coordinates_label = KMLLabel('coordinates')
                    coordinates_label.createTextNode(
                        str(self.site_points[i][0]) + ',' +
                        str(self.site_points[i][1]))
                    coordinates = coordinates_label.create()
                    Point_label.addLabel(coordinates)
                    Point = Point_label.create()
                    Sitename_label = KMLLabel('name')
                    Sitename_label.createTextNode(self.site_names[i])
                    sitename = Sitename_label.create()

                    Style_label = KMLLabel('Style')
                    labelScale_label = KMLLabel('labelScale')
                    labelScale_label.createTextNode('0.7')
                    labelScale = labelScale_label.create()
                    Style_label.addLabel(labelScale)
                    Style = Style_label.create()
                    Placemark_label.addLabel(Style)

                    Placemark_label.addLabel(sitename)
                    Placemark_label.addLabel(ExtendedData)
                    Placemark_label.addLabel(Point)
                    Placemark = Placemark_label.create()
                    Folder_label.addLabel(Placemark)
                    # 更新进度
                    progess.count()
                Folder = Folder_label.create()
                Document_label.addLabel(Folder)
                # 更新进度
                progess.count()

            #小区
            elif self.type == KMLType.Cell:
                # 生成进度条
                total = len(self.cell_infos) + 1 + len(self.cell_datas) + 2
                progess = Progess(self.parent, total)
                progess.show()

                Folder_label = KMLLabel('Folder')
                name_label = KMLLabel('name')
                name_label.createTextNode(u'小区')
                name = name_label.create()
                Folder_label.addLabel(name)

                # 小区信息
                Folder1_label = KMLLabel('Folder')
                name_label = KMLLabel('name')
                name_label.createTextNode(u'小区信息')
                name = name_label.create()
                Folder1_label.addLabel(name)
                for infos in self.cell_infos:
                    Placemark_label = KMLLabel('Placemark')
                    name_label = KMLLabel('name')
                    if infos[0] != None:
                        name_label.createTextNode(infos[0])
                    else:
                        name_label.createTextNode(u'无')
                    name = name_label.create()
                    Placemark_label.addLabel(name)
                    # 设置样式
                    Style_label = KMLLabel('Style')
                    # 设置IconStyle
                    IconStyle_label = KMLLabel('IconStyle')
                    # 把小区信息的图标设置为无图标模式
                    Icon_label = KMLLabel('Icon')
                    Icon = Icon_label.create()
                    IconStyle_label.addLabel(Icon)
                    IconStyle = IconStyle_label.create()
                    Style_label.addLabel(IconStyle)

                    # 设置LabelStyle
                    LabelStyle_label = KMLLabel('LabelStyle')
                    # 把label比例修改为0.7
                    labelScale_label = KMLLabel('labelScale')
                    labelScale_label.createTextNode('0.7')
                    labelScale = labelScale_label.create()
                    LabelStyle_label.addLabel(labelScale)
                    # 设置label颜色
                    color_label = KMLLabel('color')
                    color_label.createTextNode('ff7fffaa')
                    color = color_label.create()
                    LabelStyle_label.addLabel(color)
                    LabelStyle = LabelStyle_label.create()
                    # 设置LabelStyle到Style_label
                    Style_label.addLabel(LabelStyle)
                    Style = Style_label.create()
                    Placemark_label.addLabel(Style)

                    styleUrl_label = KMLLabel('styleUrl')
                    styleUrl_label.createTextNode('#onlytextname')
                    styleUrl = styleUrl_label.create()
                    Placemark_label.addLabel(styleUrl)
                    Point_label = KMLLabel('Point')
                    extrude_label = KMLLabel('extrude')
                    extrude_label.createTextNode(1)
                    extrude = extrude_label.create()
                    Point_label.addLabel(extrude)
                    altitudeMode_label = KMLLabel('altitudeMode')
                    altitudeMode_label.createTextNode('relativeToGround')
                    altitudeMode = altitudeMode_label.create()
                    Point_label.addLabel(altitudeMode)
                    coordinates_label = KMLLabel('coordinates')
                    coordinates_label.createTextNode(
                        str(infos[1]) + ',' + str(infos[2]) + ',' + '0')
                    coordinates = coordinates_label.create()
                    Point_label.addLabel(coordinates)
                    Point = Point_label.create()
                    Placemark_label.addLabel(Point)
                    Placemark = Placemark_label.create()
                    Folder1 = Folder1_label.addLabel(Placemark)
                    # 更新进度
                    progess.count()
                Folder1 = Folder1_label.create()
                Folder_label.addLabel(Folder1)
                # 更新进度
                progess.count()

                # 小区图形
                Folder2_label = KMLLabel('Folder')
                name_label = KMLLabel('name')
                name_label.createTextNode(u'小区图形')
                name = name_label.create()
                Folder2_label.addLabel(name)
                for (i, feature) in enumerate(self.cell_datas):
                    Placemark_label = KMLLabel('Placemark')
                    ExtendedData_label = KMLLabel('ExtendedData')
                    SchemaData_label = KMLLabel('SchemaData')
                    SchemaData_label.setAttribute(
                        ('schemaUrl', u'#' + self.filename))
                    for (j, data) in enumerate(feature):
                        SimpleData_label = KMLLabel('SimpleData')
                        SimpleData_label.setAttribute(
                            ('name', self.cell_fields[j]))
                        if data != None:
                            SimpleData_label.createTextNode(data)
                        else:
                            SimpleData_label.createTextNode('NULL')
                        SimpleData = SimpleData_label.create()
                        SchemaData_label.addLabel(SimpleData)
                    SchemaData = SchemaData_label.create()
                    ExtendedData_label.addLabel(SchemaData)
                    ExtendedData = ExtendedData_label.create()
                    Polygon_label = KMLLabel('Polygon')
                    altitudeMode_label = KMLLabel('altitudeMode')
                    altitudeMode_label.createTextNode('relativeToGround')
                    altitudeMode = altitudeMode_label.create()
                    Polygon_label.addLabel(altitudeMode)
                    outerBoundaryIs_label = KMLLabel('outerBoundaryIs')
                    LinearRing_label = KMLLabel('LinearRing')
                    LinearRing_label.addLabel(altitudeMode)
                    coordinates_label = KMLLabel('coordinates')
                    for cell_points in self.cell_points[i]:
                        for cell_point in cell_points:
                            coordinates_label.createTextNode(
                                str(cell_point[0]) + ',' + str(cell_point[1]) +
                                ' ')
                    coordinates = coordinates_label.create()
                    LinearRing_label.addLabel(coordinates)
                    LinearRing = LinearRing_label.create()
                    outerBoundaryIs_label.addLabel(LinearRing)
                    outerBoundaryIs = outerBoundaryIs_label.create()
                    Polygon_label.addLabel(outerBoundaryIs)
                    Polygon = Polygon_label.create()
                    Cellname_label = KMLLabel('name')
                    Cellname_label.createTextNode(self.cell_names[i])
                    cellname = Cellname_label.create()
                    Placemark_label.addLabel(cellname)
                    Style_label = KMLLabel('Style')
                    LineStyle_label = KMLLabel('LineStyle')
                    color_label = KMLLabel('color')
                    color_label.createTextNode('ff0000ff')
                    color = color_label.create()
                    LineStyle_label.addLabel(color)
                    # 将线的宽度定义为2
                    width_label = KMLLabel('width')
                    width_label.createTextNode('2')
                    width = width_label.create()
                    LineStyle_label.addLabel(width)

                    LineStyle = LineStyle_label.create()
                    Style_label.addLabel(LineStyle)
                    PolyStyle_label = KMLLabel('PolyStyle')
                    fill_label = KMLLabel('fill')
                    fill_label.createTextNode('0')
                    fill = fill_label.create()
                    PolyStyle_label.addLabel(fill)
                    PolyStyle = PolyStyle_label.create()
                    Style_label.addLabel(PolyStyle)
                    Style = Style_label.create()
                    Placemark_label.addLabel(Style)
                    Placemark_label.addLabel(ExtendedData)
                    Placemark_label.addLabel(Polygon)
                    Placemark = Placemark_label.create()
                    Folder2_label.addLabel(Placemark)
                    # 更新进度
                    progess.count()
                Folder2 = Folder2_label.create()
                Folder_label.addLabel(Folder2)
                # 更新进度
                progess.count()

                Folder = Folder_label.create()
                Document_label.addLabel(Folder)
                # 更新进度
                progess.count()

            # 基站+小区
            else:
                # 生成进度条
                total = len(self.site_datas) + 1 + len(
                    self.cell_infos) + 1 + len(self.cell_datas) + 2
                progess = Progess(self.parent, total)
                progess.show()
                # 基站
                Folder_label = KMLLabel('Folder')
                name_label = KMLLabel('name')
                name_label.createTextNode(u'基站')
                name = name_label.create()
                Folder_label.addLabel(name)

                for (i, feature) in enumerate(self.site_datas):
                    Placemark_label = KMLLabel('Placemark')
                    ExtendedData_label = KMLLabel('ExtendedData')
                    SchemaData_label = KMLLabel('SchemaData')
                    SchemaData_label.setAttribute(
                        ('schemaUrl', u'#' + self.filename))
                    for (j, data) in enumerate(feature):
                        SimpleData_label = KMLLabel('SimpleData')
                        SimpleData_label.setAttribute(
                            ('name', self.site_fields[j]))
                        if data != None:
                            SimpleData_label.createTextNode(data)
                        else:
                            SimpleData_label.createTextNode('NULL')
                        SimpleData = SimpleData_label.create()
                        SchemaData_label.addLabel(SimpleData)
                    SchemaData = SchemaData_label.create()
                    ExtendedData_label.addLabel(SchemaData)
                    ExtendedData = ExtendedData_label.create()
                    Point_label = KMLLabel('Point')
                    coordinates_label = KMLLabel('coordinates')
                    coordinates_label.createTextNode(
                        str(self.site_points[i][0]) + ',' +
                        str(self.site_points[i][1]))
                    coordinates = coordinates_label.create()
                    Point_label.addLabel(coordinates)
                    Point = Point_label.create()
                    Sitename_label = KMLLabel('name')
                    Sitename_label.createTextNode(self.site_names[i])
                    sitename = Sitename_label.create()
                    # 将名字显示比例设置为0.7
                    Style_label = KMLLabel('Style')
                    labelScale_label = KMLLabel('labelScale')
                    labelScale_label.createTextNode('0.7')
                    labelScale = labelScale_label.create()
                    Style_label.addLabel(labelScale)
                    Style = Style_label.create()
                    Placemark_label.addLabel(Style)

                    Placemark_label.addLabel(sitename)
                    Placemark_label.addLabel(ExtendedData)
                    Placemark_label.addLabel(Point)
                    Placemark = Placemark_label.create()
                    Folder_label.addLabel(Placemark)
                    # 更新进度
                    progess.count()
                Folder = Folder_label.create()
                Document_label.addLabel(Folder)
                # 更新进度
                progess.count()

                # 小区
                Folder_label = KMLLabel('Folder')
                name_label = KMLLabel('name')
                name_label.createTextNode(u'小区')
                name = name_label.create()
                Folder_label.addLabel(name)
                # 小区信息
                Folder1_label = KMLLabel('Folder')
                name_label = KMLLabel('name')
                name_label.createTextNode(u'小区信息')
                name = name_label.create()
                Folder1_label.addLabel(name)
                for infos in self.cell_infos:
                    Placemark_label = KMLLabel('Placemark')
                    name_label = KMLLabel('name')
                    if infos[0] != None:
                        name_label.createTextNode(infos[0])
                    else:
                        name_label.createTextNode(u'无')
                    name = name_label.create()

                    Style_label = KMLLabel('Style')

                    # 把小区信息的图标设置为无图标模式
                    IconStyle_label = KMLLabel('IconStyle')
                    Icon_label = KMLLabel('Icon')
                    Icon = Icon_label.create()
                    IconStyle_label.addLabel(Icon)
                    IconStyle = IconStyle_label.create()
                    Style_label.addLabel(IconStyle)

                    # 设置LabelStyle
                    LabelStyle_label = KMLLabel('LabelStyle')
                    # 把label比例修改为0.7
                    labelScale_label = KMLLabel('labelScale')
                    labelScale_label.createTextNode('0.7')
                    labelScale = labelScale_label.create()
                    LabelStyle_label.addLabel(labelScale)
                    # 设置label颜色
                    color_label = KMLLabel('color')
                    color_label.createTextNode('ff7fffaa')
                    color = color_label.create()
                    LabelStyle_label.addLabel(color)
                    LabelStyle = LabelStyle_label.create()
                    # 设置LabelStyle到Style_label
                    Style_label.addLabel(LabelStyle)

                    Style = Style_label.create()
                    Placemark_label.addLabel(Style)

                    Style = Style_label.create()
                    Placemark_label.addLabel(Style)

                    Placemark_label.addLabel(name)
                    styleUrl_label = KMLLabel('styleUrl')
                    styleUrl_label.createTextNode('#onlytextname')
                    styleUrl = styleUrl_label.create()
                    Placemark_label.addLabel(styleUrl)
                    Point_label = KMLLabel('Point')
                    extrude_label = KMLLabel('extrude')
                    extrude_label.createTextNode(1)
                    extrude = extrude_label.create()
                    Point_label.addLabel(extrude)
                    altitudeMode_label = KMLLabel('altitudeMode')
                    altitudeMode_label.createTextNode('relativeToGround')
                    altitudeMode = altitudeMode_label.create()
                    Point_label.addLabel(altitudeMode)
                    coordinates_label = KMLLabel('coordinates')
                    coordinates_label.createTextNode(
                        str(infos[1]) + ',' + str(infos[2]) + ',' + '0')
                    coordinates = coordinates_label.create()
                    Point_label.addLabel(coordinates)
                    Point = Point_label.create()
                    Placemark_label.addLabel(Point)
                    Placemark = Placemark_label.create()
                    Folder1_label.addLabel(Placemark)
                    # 更新进度
                    progess.count()
                Folder1 = Folder1_label.create()
                Folder_label.addLabel(Folder1)
                # 更新进度
                progess.count()
                # 小区图形
                Folder2_label = KMLLabel('Folder')
                name_label = KMLLabel('name')
                name_label.createTextNode(u'小区图形')
                name = name_label.create()
                Folder2_label.addLabel(name)
                for (i, feature) in enumerate(self.cell_datas):
                    Placemark_label = KMLLabel('Placemark')
                    ExtendedData_label = KMLLabel('ExtendedData')
                    SchemaData_label = KMLLabel('SchemaData')
                    SchemaData_label.setAttribute(
                        ('schemaUrl', u'#' + self.filename))
                    for (j, data) in enumerate(feature):
                        SimpleData_label = KMLLabel('SimpleData')
                        SimpleData_label.setAttribute(
                            ('name', self.cell_fields[j]))
                        if data != None:
                            SimpleData_label.createTextNode(data)
                        else:
                            SimpleData_label.createTextNode('NULL')
                        SimpleData = SimpleData_label.create()
                        SchemaData_label.addLabel(SimpleData)
                    SchemaData = SchemaData_label.create()
                    ExtendedData_label.addLabel(SchemaData)
                    ExtendedData = ExtendedData_label.create()
                    Polygon_label = KMLLabel('Polygon')
                    altitudeMode_label = KMLLabel('altitudeMode')
                    altitudeMode_label.createTextNode('relativeToGround')
                    altitudeMode = altitudeMode_label.create()
                    Polygon_label.addLabel(altitudeMode)
                    outerBoundaryIs_label = KMLLabel('outerBoundaryIs')
                    LinearRing_label = KMLLabel('LinearRing')
                    LinearRing_label.addLabel(altitudeMode)
                    coordinates_label = KMLLabel('coordinates')
                    for cell_points in self.cell_points[i]:
                        for cell_point in cell_points:
                            coordinates_label.createTextNode(
                                str(cell_point[0]) + ',' + str(cell_point[1]) +
                                ' ')
                    coordinates = coordinates_label.create()
                    LinearRing_label.addLabel(coordinates)
                    LinearRing = LinearRing_label.create()
                    outerBoundaryIs_label.addLabel(LinearRing)
                    outerBoundaryIs = outerBoundaryIs_label.create()
                    Polygon_label.addLabel(outerBoundaryIs)
                    Polygon = Polygon_label.create()
                    Cellname_label = KMLLabel('name')
                    Cellname_label.createTextNode(self.cell_names[i])
                    cellname = Cellname_label.create()
                    Placemark_label.addLabel(cellname)
                    Style_label = KMLLabel('Style')
                    LineStyle_label = KMLLabel('LineStyle')
                    color_label = KMLLabel('color')
                    color_label.createTextNode('ff0000ff')
                    color = color_label.create()
                    LineStyle_label.addLabel(color)
                    # 将线的宽度定义为2
                    width_label = KMLLabel('width')
                    width_label.createTextNode('2')
                    width = width_label.create()
                    LineStyle_label.addLabel(width)

                    LineStyle = LineStyle_label.create()
                    Style_label.addLabel(LineStyle)
                    PolyStyle_label = KMLLabel('PolyStyle')
                    fill_label = KMLLabel('fill')
                    fill_label.createTextNode('0')
                    fill = fill_label.create()
                    PolyStyle_label.addLabel(fill)
                    PolyStyle = PolyStyle_label.create()
                    Style_label.addLabel(PolyStyle)
                    Style = Style_label.create()
                    Placemark_label.addLabel(Style)
                    Placemark_label.addLabel(ExtendedData)
                    Placemark_label.addLabel(Polygon)
                    Placemark = Placemark_label.create()
                    Folder2_label.addLabel(Placemark)
                    # 更新进度
                    progess.count()
                Folder2 = Folder2_label.create()
                Folder_label.addLabel(Folder2)
                # 更新进度
                progess.count()
                Folder = Folder_label.create()
                Document_label.addLabel(Folder)
                # 更新进度
                progess.count()

            Document_label.setAttribute(('id', 'root_doc'))
            Document = Document_label.create()
            kml_label = KMLLabel('kml')
            kml_label.setAttribute(('xmlns', 'http://www.opengis.net/kml/2.2'))
            kml_label.addLabel(Document)
            kml = kml_label.create()

            outputs = head + kml
            return (True, outputs)

        except Exception as e:
            raise traceback.format_exc()
Example #10
0
    def run(self):
        allCellFeatures_list = getFeaturesList(self.cellLayer)
        d = QgsDistanceArea()

        marco_cells_dict = {}
        room_cells_dict = {}
        not_room_cells_list = []
        drip_cells_dict = {}
        PCI_dict = {} # key:cell.id() value:PCI

        # 先把室分小区筛选出来
        for cell in allCellFeatures_list:
            if cell[u"小区类型"] == u"室分":
                site_name = cell[u"基站名"]
                site_id = cell[u"基站ID"]
                site = (site_id, site_name)
                if not room_cells_dict.has_key(site):
                    temp_list = [cell]
                    room_cells_dict[site] = temp_list
                    del temp_list
                else:
                    temp_list = room_cells_dict[site]
                    temp_list.append(cell)
                    room_cells_dict[site] = temp_list
                    del temp_list
            else:
                not_room_cells_list.append(cell)
        # 将非室分的小区按基站来分类以筛选滴灌小区
        if not_room_cells_list:
            cells_dict = {}
            for cell in not_room_cells_list:
                site_name = cell[u"基站名"]
                site_id = cell[u"基站ID"]
                site = (site_id, site_name)
                if not cells_dict.has_key(site):
                    temp_list = [cell]
                    cells_dict[site] = temp_list
                    del temp_list
                else:
                    temp_list = cells_dict[site]
                    temp_list.append(cell)
                    cells_dict[site] = temp_list
                    del temp_list
            # 筛选宏站和滴灌小区
            for (site, cells_list) in cells_dict.iteritems():
                if len(cells_list) > 3:
                    drip_cells_dict[site] = cells_list
                else:
                    marco_cells_dict[site] = cells_list

        # 生成进度条
        progess_len = len(marco_cells_dict)+len(room_cells_dict)+len(drip_cells_dict)
        progess = Progess(self.parent, progess_len)
        progess.show()

        # 先为宏站分配PCI
        sss = self.marco_range[0]
        for (site0, cells_list0) in marco_cells_dict.iteritems():
            had_used_SSS_set = set()
            for (site1, cells_list1) in marco_cells_dict.iteritems():
                if site0 == site1:
                    continue
                lon0 = cells_list0[0][u"经度"]
                lat0 = cells_list0[0][u"纬度"]
                site_point0 = QgsPoint(lon0, lat0)
                lon1 = cells_list1[0][u"经度"]
                lat1 = cells_list1[0][u"纬度"]
                site_point1 = QgsPoint(lon1, lat1)
                distance = d.convertMeasurement(d.measureLine(site_point0, site_point1), 2, 0, False)[0]  # 单位(米)
                if distance > 5*self.coverage:
                    continue
                # 在5倍覆盖范围内
                if not PCI_dict.has_key(cells_list1[0].id()):
                    pci1 = cells_list1[0]["PCI"]
                else:
                    pci1 = PCI_dict[cells_list1[0].id()]
                if pci1:
                    sss1 = pci1 / 3
                    had_used_SSS_set.add(sss1)
            # 为同一基站下的小区分配PCI
            # 先确定可用SSS
            for i in range(self.marco_range[0], self.marco_range[1]+1):
                if sss in had_used_SSS_set:
                    sss = sss + 1
                    if sss > self.marco_range[1]:
                        sss = self.marco_range[0]
                else:
                    break
            cells_list0.sort(key=lambda x:x[u"方向角"])
            for index,cell in enumerate(cells_list0):
                pci = index + 3*sss
                PCI_dict[cell.id()] = pci

            progess.count()

        # 为室分站分配PCI
        pci_count = self.room_range[0]*3
        for (site, cells_list) in room_cells_dict.iteritems():
            for cell in cells_list:
                if pci_count > self.room_range[1]*3 + 2:
                    pci_count = self.room_range[0]*3
                PCI_dict[cell.id()] = pci_count
                pci_count = pci_count + 1
            progess.count()

        # 为滴灌站分配PCI
        pci_count = self.drip_range[0] * 3
        for (site, cells_list) in drip_cells_dict.iteritems():
            for cell in cells_list:
                if pci_count > self.drip_range[1]*3 + 2:
                    pci_count = self.drip_range[0]*3
                PCI_dict[cell.id()] = pci_count
                pci_count = pci_count + 1
            progess.count()

        # 修改图层数据
        if PCI_dict:
            update_dict = {}
            pci_field_index = self.cellLayer.fieldNameIndex('PCI')
            for (id, pci) in PCI_dict.iteritems():
                update_dict[id] = {pci_field_index:pci}
            modifyFeatures(self.cellLayer, update_dict)
            progess.count()
            return True
        else:
            return False
Example #11
0
    def run(self):
        totalDict = {}  # 用于保存所有基站的计算结果
        suit_jlist = {} # 保存符合条件的结点
        d = QgsDistanceArea()
        total = len(self.jlist)  #写进度条
        progess = Progess(self.parent,total, u"分析中...")
        progess.show()
        maxDistance = self.tlist[1]
        for (jindex, jsite) in enumerate(self.jlist):   #遍历结点
            perList = [] #临时列表,用于转化子字典
            SuitOrNot = True # 结点是否符合标准标志(默认为True符合)
            jnaDis = None     # 保存结点和基站之间的距离
            jnaAngle = None
            jnaminDis1,jnaminDis2,jnaminDis3,jnaminDis4,jnaminDis5,jnaminDis6=[self.tlist[1] for i in range(6)]
            asite1,asite2,asite3,asite4,asite5,asite6=[None for i in range(6)]
            if jsite[7]==u'农村':
                minDis=float(self.tlist[2])
            elif jsite[7]==u'郊区乡镇' :
                minDis=float(self.tlist[3])
            elif jsite[7]==u'密集市区' :
                minDis=float(self.tlist[5])
            else:       #区域类型的结点的最小辐射范围
                # 默认jsite[7]==u'普通市区'
                minDis=float(self.tlist[4])
            jpoint=jsite.geometry().asPoint()
            # 先找到结点附近设置搜索范围内的所有基站
            area = createARectangleByCenterPoint(jpoint, maxDistance)
            siteFeatures_list = getFeaturesListByArea(self.siteLayer, area)
            for asite in siteFeatures_list: #遍历找到的基站
                jnaDis = d.convertMeasurement(d.measureLine(jpoint,\
                            QgsPoint(asite[4], asite[5])), 2, 0, False)[0]
                if jnaDis < minDis:
                    # 如果存在一个基站与结点间距离小于所设定的范围,则忽略该结点
                    SuitOrNot = False
                    break
                jnaAngle = math.atan2(asite[5]-jpoint.y(), asite[4]-jpoint.x())
                jnaAngle =90.0 - 180 / math.pi * jnaAngle #弧度转角度(90-方位角,可转为以正北为0度角)

                if jnaDis <= jnaminDis1 and 0 < jnaAngle <= 60 :
                    jnaminDis1 = float('%0.4f' % jnaDis)  # 保留四位小数
                    asite1 = asite
                elif jnaDis <= jnaminDis2 and 60 < jnaAngle <= 120 :
                    jnaminDis2 = float('%0.4f' % jnaDis)  # 保留四位小数
                    asite2 = asite
                elif jnaDis <= jnaminDis3 and 120 < jnaAngle <= 180 :
                    jnaminDis3 = float('%0.4f' % jnaDis)  # 保留四位小数
                    asite3 = asite
                elif jnaDis <= jnaminDis4 and -180 < jnaAngle <= -120 :
                    jnaminDis4 = float('%0.4f' % jnaDis)  # 保留四位小数
                    asite4 = asite
                elif jnaDis <= jnaminDis5 and -120 < jnaAngle <= -60 :
                    jnaminDis5 = float('%0.4f' % jnaDis)  # 保留四位小数
                    asite5 = asite
                elif jnaDis <= jnaminDis6 and -60 < jnaAngle <= 0 :
                    jnaminDis6 = float('%0.4f' % jnaDis)  # 保留四位小数
                    asite6 = asite

            if jnaminDis1 and asite1 : perList.append([jnaminDis1,asite1])
            if jnaminDis2 and asite2 : perList.append([jnaminDis2,asite2])
            if jnaminDis3 and asite3 : perList.append([jnaminDis3,asite3])
            if jnaminDis4 and asite4 : perList.append([jnaminDis4,asite4])
            if jnaminDis5 and asite5 : perList.append([jnaminDis5,asite5])
            if jnaminDis6 and asite6 : perList.append([jnaminDis6,asite6])
            # 判断是否至少找到一个符合的基站
            if len(perList) == 0:
                # 如果一个符合的基站都没有,则判断该节点不符合,跳过此次循环
                SuitOrNot = False
            elif len(perList) < 6 :
                for i in range(6-len(perList)) :
                    perList.append(None)                            #若数量不足,给列表补None值
            if SuitOrNot == True:
                # 结点符合才添加
                totalDict[jindex] = perList  #记录新建基站的计算结果,{0:[[],[],[],……],1:[……],……}
                suit_jlist[jindex] = jsite
            progess.count() #进度条+1
        self.calculationResult.emit(suit_jlist, totalDict)