def add(self): # 获取并处理填写的信息 site_id = self.site_id.text().strip() # 基站ID(新建基站ID前自动添加N) site_name = self.site_name.text().strip() # 基站名字 rnc_bsc = self.rnc_bsc.text().strip() # RNC-BSC operator = self.operator.currentText().strip() # 运营商 region = self.region.currentText().strip() # 区域类型 system = self.system.currentText().strip() # 网络制式 frequency = self.frequency.currentText().strip() # 频段 system_flag = u"W" # 默认 W if system == u"900": system_flag = u"G" elif system == u"1800": system_flag = u"D" elif system == u"CDMA": system_flag = u"C" elif system == u"WCDMA": system_flag = u"W" elif system == u"TD-LTE": system_flag = u"T" elif system == u"FDD-LTE": system_flag = u"F" elif system == u"TDSCDMA": system_flag = u"TDS" lon = self.lon.text().strip() # 经度 lat = self.lat.text().strip() # 纬度 azimuth_1 = self.azimuth_1.text().strip() tilt_1 = self.tilt_1.text().strip() etilt_1 = self.etilt_1.text().strip() mtilt_1 = self.mtilt_1.text().strip() azimuth_2 = self.azimuth_2.text().strip() tilt_2 = self.tilt_2.text().strip() etilt_2 = self.etilt_2.text().strip() mtilt_2 = self.mtilt_2.text().strip() azimuth_3 = self.azimuth_3.text().strip() tilt_3 = self.tilt_3.text().strip() etilt_3 = self.etilt_3.text().strip() mtilt_3 = self.mtilt_3.text().strip() azimuth_4 = self.azimuth_4.text().strip() tilt_4 = self.tilt_4.text().strip() etilt_4 = self.etilt_4.text().strip() mtilt_4 = self.mtilt_4.text().strip() # 判断必填项是否已填 if site_name == "": QMessageBox.critical(self, u"提示", u"请填写基站名字!") return False if site_id == "": QMessageBox.critical(self, u"提示", u"请填写基站ID!") return False if rnc_bsc == "": # 赋值随机数 rnc_bsc = str(random.randint(1, 9999)) if (lon == "") or (lat == ""): QMessageBox.critical(self, u"提示", u"请填写经纬度,或通过点击画布选择坐标!") return False # 先添加基站 # 检查ID和名字是否重复 self.sitelayer = getLayerByName(u'基站', self.iface) # 基站图层 allsite = self.sitelayer.getFeatures() for site in allsite: if site_name == site[u'基站名']: QMessageBox.critical(self, u"提示", u"所填写的基站名与项目中的数据有重复,请更改!") return False if site_id == site[u'基站ID']: QMessageBox.critical(self, u"提示", u"所填写的基站ID与项目中的数据有重复,请更改!") return False siteFeatureAttrs = ['NULL'] * 20 siteFeatureAttrs[0] = site_id siteFeatureAttrs[1] = site_name siteFeatureAttrs[2] = rnc_bsc siteFeatureAttrs[3] = lon siteFeatureAttrs[4] = lat siteFeatureAttrs[5] = system_flag siteFeatureAttrs[6] = region siteFeatureAttrs[8] = operator # 生成基站Feature add_site_list = [] siteFeature = createASiteFeature(QgsPoint(float(lon), float(lat)), siteFeatureAttrs) add_site_list.append(siteFeature) # 判断是否需要顺带添加小区 azimuth_list = [] if azimuth_1 != "": if not tilt_1: tilt_1 = None if not etilt_1: etilt_1 = None if not mtilt_1: mtilt_1 = None azimuth_1_info = (int(azimuth_1), tilt_1, etilt_1, mtilt_1) azimuth_list.append(azimuth_1_info) if azimuth_2 != "": if not tilt_2: tilt_2 = None if not etilt_2: etilt_2 = None if not mtilt_2: mtilt_2 = None azimuth_2_info = (int(azimuth_2), tilt_2, etilt_2, mtilt_2) azimuth_list.append(azimuth_2_info) if azimuth_3 != "": if not tilt_3: tilt_3 = None if not etilt_3: etilt_3 = None if not mtilt_3: mtilt_3 = None azimuth_3_info = (int(azimuth_3), tilt_3, etilt_3, mtilt_3) azimuth_list.append(azimuth_3_info) if azimuth_4 != "": if not tilt_4: tilt_4 = None if not etilt_4: etilt_4 = None if not mtilt_4: mtilt_4 = None azimuth_4_info = (int(azimuth_4), tilt_4, etilt_4, mtilt_4) azimuth_list.append(azimuth_4_info) if len(azimuth_list) != 0: # 获取小区大小和长度设置 setting = getCellGraphicParam(self.iface) # 判断是否读取到参数设置 if not setting: QMessageBox.Critical(self.parent, u"错误", u"无法获取小区图形参数设置") return add_cell_list = [] # 要添加的小区list # 若填写了小区 for index, azimuth_info in enumerate(azimuth_list): cell_feature = ['NULL'] * 54 cell_feature[0] = site_id # 基站ID cell_feature[1] = site_name # 所属基站名字 cell_id = u"%s%s" % (site_id, str(index + 1)) # 小区ID cell_feature[2] = cell_id # 小区ID cell_name = u"%s-%s" % (site_name, str(index + 1)) # # 小区名字 cell_feature[3] = cell_name cell_feature[4] = index # Sector ID cell_feature[6] = rnc_bsc cell_feature[7] = azimuth_info[0] # Azimuth cell_feature[8] = lon cell_feature[9] = lat cell_feature[10] = system_flag cell_feature[11] = region # 典型环境 cell_feature[12] = frequency # 频段 cell_feature[13] = azimuth_info[1] cell_feature[14] = azimuth_info[2] cell_feature[15] = azimuth_info[3] cell_feature[18] = operator # 识别图形设置 if setting["type"] == 0: if operator == u'移动': szAngle = setting[u"移动"][0] szLength = setting[u"移动"][1] elif operator == u'联通': szAngle = setting[u"联通"][0] szLength = setting[u"联通"][1] elif operator == u'电信': szAngle = setting[u"电信"][0] szLength = setting[u"电信"][1] elif operator == u'铁塔': szAngle = setting[u"铁塔"][0] szLength = setting[u"铁塔"][1] else: # 自定义 system = cell_feature[10] frequency = cell_feature[12] # 获取默认设置 szAngle = setting[u"默认"][0] szLength = setting[u"默认"][1] # 获取分类 case_list = setting["case_list"] for (c_system, c_frequency, c_angle, c_length) in case_list: if c_system and (not c_frequency): if system == c_system: szAngle = c_angle szLength = c_length elif (not c_system) and c_frequency: if frequency == c_frequency: szAngle = c_angle szLength = c_length elif c_system and c_frequency: if (system == c_system) and (frequency == c_frequency): szAngle = c_angle szLength = c_length # 生成小区扇形geometry cellGeometry = createSector(QgsPoint(float(lon), float(lat)), szLength, self.iface, True, cell_feature[7], szAngle) # 判断小区名字和小区ID是否已于现有数据中 self.celllayer = getLayerByName(u'小区', self.iface) # 小区图层 # 检查是否已勾选了小图特曾 if not self.celllayer: QMessageBox.critical(self.parent, u"错误", u"没有找到小区图层!") return False allcell = self.celllayer.getFeatures() for cell in allcell: if cell_name == cell[u'小区名']: QMessageBox.critical( self.parent, u"提示", u"生成的小区名: " + cell_name + u" 与项目中的数据有重复,请更改!") return False if cell_id == cell[u"小区ID"]: QMessageBox.critical( self.parent, u"提示", u"生成的小区ID: " + cell_id + u" 与项目中的数据有重复,请更改!") return False # 生成小区feature并添加到list中 cell = createACellFeature(cellGeometry, cell_feature) add_cell_list.append(cell) button = QMessageBox.question(self, "Question", u"添加后将无法撤回,是否继续?", QMessageBox.Ok | QMessageBox.Cancel, QMessageBox.Ok) if button == QMessageBox.Ok: # 向图层中导入新增的数据 if len(add_site_list) != 0: siteLayer = getLayerByName(u"基站", self.iface) result1 = importFeaturesToLayer(siteLayer, add_site_list) if len(add_cell_list) != 0 and result1: cellLayer = getLayerByName(u"小区", self.iface) result2 = importFeaturesToLayer(cellLayer, add_cell_list) if not result2: QMessageBox.critical(self, u"添加基站", u"添加基站数据失败!") self.accept() return elif not result1: QMessageBox.critical(self, u"添加基站", u"添加基站数据失败!") self.accept() return self.iface.actionDraw().trigger() # 刷新地图 else: return if result1 or result2: QMessageBox.information(self, u"添加基站", u"添加基站数据成功!") self.accept()