Example #1
0
 def __init__(self, agsOutFolder, agsOutName, tmpOutFolder, \
              serverName, serverPort, username, password):
     '''
      构造器
     '''
     if not AIUtils.isEmpty(agsOutFolder) and not AIUtils.isEmpty(agsOutName) and not AIUtils.isEmpty(tmpOutFolder):
         self.__agsOutFolder = agsOutFolder
         self.__agsOutName = agsOutName
         self.__tmpOutFolder = tmpOutFolder
         if not self.__agsOutName.endswith('.ags'):
             self.__agsOutName += '.ags'
         server_url_part = self.__serverUrlPre = 'http://' + serverName + ':' + serverPort + '/arcgis'
         server_url = server_url_part + '/admin'
         use_arcgis_desktop_staging_folder = False
         staging_folder_path = self.__agsOutFolder
         self.__agsOutFolder = self.__agsOutFolder.replace('\\', '/')
         self.__agsOutFullName = os.path.join(self.__agsOutFolder, self.__agsOutName).replace('\\', '/')
         
         if not os.path.exists(self.__agsOutFullName):
             arcpy.mapping.CreateGISServerConnectionFile("PUBLISH_GIS_SERVICES",
                                                         self.__agsOutFolder,
                                                         self.__agsOutName,
                                                         server_url,
                                                         "ARCGIS_SERVER",
                                                         use_arcgis_desktop_staging_folder,
                                                         staging_folder_path,
                                                         username,
                                                         password,
                                                         "SAVE_USERNAME") 
Example #2
0
 def __init__(self, name=None, minScale=0, maxScale=0, transparency=0, visible=True):
     """
     构造器
     """
     self.__name = name
     self.__minScale = 0 if AIUtils.isEmpty(minScale) else minScale
     self.__maxScale = 0 if AIUtils.isEmpty(maxScale) else maxScale
     self.__transparency = 0 if AIUtils.isEmpty(transparency) else transparency
     self.__visible = True if AIUtils.isEmpty(visible) else visible
Example #3
0
 def __init__(self, name = None, alias = None, ftype = None, wkid = 4326, fds = None, fields = []):
     '''
     构造器
     '''
     self.__name = name
     self.__alias = alias
     self.__ftype = ftype
     self.__wkid = 4326 if AIUtils.isEmpty(wkid) else wkid
     self.__fds = None if AIUtils.isEmpty(fds) else fds
     self.__fields = [] if AIUtils.isEmpty(fields) else fields
Example #4
0
 def __init__(self, name = None, alias = None, ftype = None, scale = 0, length = 0, isNullable = True):
     '''
     构造器
     '''
     self.__name = name
     self.__alias = alias
     self.__ftype = ftype
     self.__scale = 0 if AIUtils.isEmpty(scale) else scale
     self.__length = 0 if AIUtils.isEmpty(length) else length
     self.__isNullable = True if AIUtils.isEmpty(isNullable) else isNullable
Example #5
0
 def __init__(self, wksName, userName = None):
     '''
     构造器
     '''
     if not AIUtils.isEmpty(wksName):
         arcpy.env.workspace = self.__wksName = wksName.replace('\\', '/')
         self.__userName = userName
Example #6
0
 def queryFdsList(self, fds):
     '''
 查询要素集列表
     '''
     qrs = []
     if isinstance(fds, AIFds):
         name = fds.getName()
         datasets = arcpy.ListDatasets(None if AIUtils.isEmpty(name) else ('*'+ name + '*'), \
                                       'Feature')
         for dataset in datasets:
             desc = arcpy.Describe(dataset)
             sr = desc.spatialReference
             qrs.append(AIFds(AIUtils.unicode2utf8(desc.name), None if AIUtils.isEmpty(sr) else sr.factoryCode)) 
     else:
         raise Exception('input parameter type not correct!')
     
     return qrs
Example #7
0
 def execute(self, sql):
     '''
     执行sql语句
     '''
     sde_conn = None
     sde_return = None
     try:
         sde_conn = None if AIUtils.isEmpty(self.__sdeOutFullName) else arcpy.ArcSDESQLExecute(self.__sdeOutFullName)
         if not AIUtils.isEmpty(sde_conn):
             try:
                 sde_return = sde_conn.execute(sql)
             except:
                 raise
     except:
         raise
     finally:
         del sde_conn
     
     return sde_return
Example #8
0
 def publish(self, svc):
     '''
      发布服务
     '''
     if not AIUtils.isEmpty(self.__agsOutFullName) and isinstance(svc, AISvc):
         mxdFullName = svc.getMxdFullName()
         serviceName = svc.getServiceName()
         serviceFolder = svc.getServiceFolder()
         description = svc.getDescription()
         serviceItems = svc.getServiceItems()
         
         try:    
             # 生成服务草稿文件
             sddraftFullName = os.path.join(self.__tmpOutFolder, serviceName + '.sddraft')
             sdFullName = os.path.join(self.__tmpOutFolder, serviceName + '.sd')
             mapDoc = arcpy.mapping.MapDocument(mxdFullName)
             arcpy.mapping.CreateMapSDDraft(mapDoc, sddraftFullName, serviceName, 'ARCGIS_SERVER', self.__agsFullName, False, serviceFolder)
             sDDraftEditor = AISEdit(sddraftFullName)
             
             # 添加服务描述
             sDDraftEditor.setItemInfo({'description' : description})
               
             # 添加额外服务能力
             for item in serviceItems:
                 if item.getEnabled():
                     sDDraftEditor.setSvcExtension(item.getTypeName(), 'true')
                 
             analysis = arcpy.mapping.AnalyzeForSD(sddraftFullName)
             
             if analysis['errors'] == {}:
                 # 过度服务草稿文件到SD文件
                 arcpy.StageService_server(sddraftFullName, sdFullName)
                 # 上传SD文件到GIS服务器
                 arcpy.UploadServiceDefinition_server(sdFullName, self.__agsServer)
                 
             # 发布成功存入服务地址
             for item in serviceItems:
                 if item.getEnabled():
                     typeName = item.getTypeName()
                     if AIStrUtils.isEqual(typeName, 'MapServer'):
                         svc.setUrl(self.__serverUrlPre + sDDraftEditor.getMapServerPartRestUrl())
                     elif AIStrUtils.isEqual(typeName, 'KmlServer'):
                         svc.setUrl(self.__serverUrlPre + sDDraftEditor.getKmlRestUrl())
                     elif AIStrUtils.isEqual(typeName, 'FeatureServer'):
                         svc.setUrl(self.__serverUrlPre + sDDraftEditor.getFeatureRestUrl())
                     elif AIStrUtils.isEqual(typeName, 'WFSServer'):
                         svc.setUrl(self.__serverUrlPre + sDDraftEditor.getWMSRestUrl())
                     else:
                         svc.setUrl(self.__serverUrlPre + sDDraftEditor.getWFSRestUrl())
             else: 
                 raise
         except:
             raise
         
         return svc
Example #9
0
 def __init__(self, sdeOutFolder, sdeOutName, instance, username, password, \
             databasePlatform = 'ORACLE', accountAuthentication='DATABASE_AUTH'):
     '''
      构造器
     '''
     if not AIUtils.isEmpty(sdeOutFolder) and not AIUtils.isEmpty(sdeOutName):
         self.__sdeOutFolder = sdeOutFolder
         self.__sdeOutName = sdeOutName
         if not self.__sdeOutName.endswith('.sde'):
             self.__sdeOutName += '.sde'
         self.__sdeOutFolder = self.__sdeOutFolder.replace('\\', '/')
         self.__sdeOutFullName = os.path.join(self.__sdeOutFolder, self.__sdeOutName).replace('\\', '/')
         self.__sdeUserName = username
         if not os.path.exists(self.__sdeOutFullName):
             arcpy.CreateDatabaseConnection_management(self.__sdeOutFolder,
                                                       self.__sdeOutName,
                                                       databasePlatform,
                                                       instance,
                                                       accountAuthentication,
                                                       username,
                                                       password)
Example #10
0
 def queryFds(self, fds):
     '''
 查询要素集
     '''
     qr = None
     if isinstance(fds, AIFds):
         name = fds.getName()
         if not AIUtils.isEmpty(name):
             name = name if ('.' in name) else name if AIUtils.isEmpty(self.__userName) else (self.__userName + '.') + name
             datasets = arcpy.ListDatasets(name, 'Feature')
             if len(datasets) > 0 and not AIUtils.isEmpty(datasets[0]):
                 dataset = datasets[0]
                 desc = arcpy.Describe(dataset)
                 sr = desc.spatialReference
                 qr = AIFds(AIUtils.unicode2utf8(desc.name), None if AIUtils.isEmpty(sr) else sr.factoryCode)
         else:
             raise Exception('dataset name cannot be empty!')
     else:
         raise Exception('input parameter type not correct!')
     
     return qr
Example #11
0
 def setFields(self, fields):
     nflds = [] 
     if not AIUtils.isEmpty(fields) and AIUtils.isList(fields):
         for fld in fields:
             nfld = AIFld()
             for key in fld:
                 func = getattr(nfld, 'set' + AIStrUtils.toUpperF(key))
                 if AIUtils.isFunc(func):
                     apply(func, [fld[key]])
             nflds.append(nfld)
         
     self.__fields = nflds
Example #12
0
 def queryFcList(self, fc):
     '''
 查询要素类列表
     '''
     qrs = []
     if isinstance(fc, AIFc):
         name = fc.getName()
         ftype = fc.getFtype()
         ftype = 'All' if AIUtils.isEmpty(ftype) else ftype
         fds = fc.getFds()
         # 要素集名称
         fdsName = None
         if not AIUtils.isEmpty(fds) and isinstance(fds, AIFds) and not AIUtils.isEmpty(fds.getName()):
             fdsName = fds.getName()
             fdsName = fdsName if ('.' in fdsName) else fdsName if AIUtils.isEmpty(self.__userName) else (self.__userName + '.') + fdsName
             fds = self.queryFds(fds)
         featureclasses = arcpy.ListFeatureClasses(None if AIUtils.isEmpty(name) else ('*'+ name + '*'), ftype, fdsName)
         for featureclass in featureclasses:
             desc = arcpy.Describe(featureclass)
             flds = []
             for field in desc.fields:
                 fld = AIFld(AIUtils.unicode2utf8(field.name), AIUtils.unicode2utf8(field.aliasName), \
                             AIUtils.unicode2utf8(field.type), field.scale, \
                             field.length, field.isNullable)
                 flds.append(fld)
             
             qrs.append(AIFc(AIUtils.unicode2utf8(desc.name), AIUtils.unicode2utf8(desc.aliasName), \
                       AIUtils.unicode2utf8(desc.shapeType), None if AIUtils.isEmpty(desc.spatialReference) else desc.spatialReference.factoryCode, \
                       fds, flds))
     else:
         raise Exception('input parameter type not correct!')
     
     return qrs
Example #13
0
    def connect(self):
        '''
         尝试连接数据库,  成功返回sde全路径
        '''
        connResult = None
        if not AIUtils.isEmpty(self.__sdeOutFullName):
            try:        
#                 sde_return = self.execute('select 1 from dual')
#                 if not AIUtils.isEmpty(sde_return):
#                     connResult = self.__sdeOutFullName
                connResult = self.__sdeOutFullName
            except:
                raise
#             except Exception as e:
#                 print 'failure, connect error'             
#                 print unicode(e.message).encode("utf-8") 
            
        return connResult
Example #14
0
 def toStr(self, obj):
     result = None
     if not AIUtils.isEmpty(obj):
         attrs = dir(obj)
         result = []
         for attr in attrs:
             if attr.startswith('get'):
                 prop = AIStrUtils.toLowerF(attr[3:])
                 func = getattr(obj, attr)
                 value = apply(func, [])
                 # 判断类型,不同的字符串转换方式
                 propValue = AIUtils.list2str(value) if AIUtils.isList(value) \
                 else AIUtils.dict2str(value) if AIUtils.isDict(value) \
                 else ('\'' + AIUtils.toStr(value) + '\'') if AIUtils.isStr(value) \
                 else AIUtils.toStr(value)
                 result.append('\'' + prop + '\':' + propValue + '')
         result = '{' + ','.join(result) + '}'
     else:
         raise Exception('input parameter type not correct!')
     
     return result
Example #15
0
 def removeFds(self, fds):
     '''
 删除要素集
     '''
     flag = False
     if isinstance(fds, AIFds):
         name = fds.getName()
         if not AIUtils.isEmpty(name):
             if arcpy.Exists(name):
                 try:
                     arcpy.Delete_management(name)
                     flag = True
                 except:
                     raise
             else:
                 raise Exception('dataset not exist!')
         else:
             raise Exception('dataset name cannot be empty!')
     else:
         raise Exception('input parameter type not correct!')
                 
     return flag
Example #16
0
 def removeFc(self, fc):
     '''
 删除要素类
     '''
     flag = False
     if isinstance(fc, AIFc):
         name = fc.getName()
         if not AIUtils.isEmpty(name):
             if arcpy.Exists(name):
                 try:
                     arcpy.Delete_management(name)
                     flag = True
                 except:
                     raise
             else:
                 raise Exception('featureclass not exist!')
         else:
             raise Exception('featureclass name cannot be empty!')
     else:
         raise Exception('input parameter type not correct!')
                 
     return flag
Example #17
0
 def addFds(self, fds):
     '''
 保存要素集
     '''  
     flag = False
     if isinstance(fds, AIFds):
         name = fds.getName()
         if not AIUtils.isEmpty(name):
             if not arcpy.Exists(name):
                 wkid = fds.getWkid()
                 sr = 4326 if not AIUtils.isInt(wkid) else arcpy.SpatialReference(wkid)
                 try:
                     arcpy.CreateFeatureDataset_management(self.__wksName, name, sr)
                     flag = True
                 except:
                     raise
             else:
                 raise Exception('dataset name cannot be duplicated!')
         else:
             raise Exception('dataset name cannot be empty!')
     else:
         raise Exception('input parameter type not correct!')
     
     return flag
Example #18
0
 # 查询要素类
 param2 = sys.argv[2]
 param2 = param2.replace('null', '\'\'')
 param2 = param2.replace('true', 'True')
 param2 = param2.replace('false', 'False')
 fcDict = AIUtils.str2dict(param2)
 keys = fcDict.keys()
 fcName = None if 'name' not in keys else fcDict['name']
 fcAlias = None if 'alias' not in keys else fcDict['alias']
 fcFtype = None if 'ftype' not in keys else fcDict['ftype']
 fcWkid = None if 'wkid' not in keys else fcDict['wkid']
 fcFds = None if 'fds' not in keys else fcDict['fds']
 fcFields = None if 'fields' not in keys else fcDict['fields']
 
 try:
     if not AIUtils.isEmpty(fcName):
         fcName = fcName if ('.' in fcName) else fcName if AIUtils.isEmpty(sdeUsername) else (sdeUsername + '.') + fcName
         fcFtype = 'All' if AIUtils.isEmpty(fcFtype) else fcFtype
         # 要素集名称
         fdsName = None
         if AIUtils.isDict(fcFds) and not AIUtils.isEmpty(fcFds['name']):
             fdsName = fcFds['name']
             fdsName = fdsName if ('.' in fdsName) else fdsName if AIUtils.isEmpty(sdeUsername) else (sdeUsername + '.') + fdsName
             try:
                 if not AIUtils.isEmpty(fdsName):
                     fdsName = fdsName if ('.' in fdsName) else fdsName if AIUtils.isEmpty(sdeUsername) else (sdeUsername + '.') + fdsName
                     datasets = arcpy.ListDatasets(fdsName, 'Feature')
                     if len(datasets) > 0 and not AIUtils.isEmpty(datasets[0]):
                         dataset = datasets[0]
                         desc = arcpy.Describe(dataset)
                         sr = desc.spatialReference
Example #19
0
 def isEqual(v1, v2):
     return not AIUtils.isEmpty(v1) and not AIUtils.isEmpty(v2)  and v1 == v2
Example #20
0
 def getKmlRestUrl(self):
     '''
      获取局部Kml服务Rest地址
     '''
     return '/rest/services/' + '' if AIUtils.isEmpty(self.getServiceFolder()) else (self.getServiceFolder() + '/') + (self.getServiceName() + '/MapServer/KmlServer')
Example #21
0
            sdePassword = sdeInfos[3]

            try:
                sde = AISde(
                    os.path.join(rootPath, "resources", "sde"),
                    wksId,
                    sdeServer + "/" + sdeInstance,
                    sdeUsername,
                    sdePassword,
                )
                sde.connect()
            except Exception as e:
                logger.info(unicode(e.message).encode("utf-8"))
                logger.info("数据库服务器" + sdeServer + "上空间数据库" + sdeInstance + "实例连接失败")
            logger.info("数据库服务器" + sdeServer + "上空间数据库" + sdeInstance + "实例连接成功")
            wks = AIWks(sde.getSdeOutFullName(), sde.getSdeUserName())
            logger.info("工作空间" + sde.getSdeOutFullName() + "初始化成功")
            # 查询要素集
            param2 = sys.argv[2]
            param2 = param2.replace("null", "''")
            fds = AIFds()
            fds = fds.fromStr(param2)
            try:
                fdss = wks.queryFdsList(fds)
                if not AIUtils.isEmpty(fdss) and len(fdss) > 0:
                    qr = AIUtils.list2json([AIUtils.str2dict(str(fds)) for fds in fdss])
            except Exception as e:
                logger.info(unicode(e.message).encode("utf-8"))
                logger.info("要素集" + fds.getName() + "查询失败")
    print qr
Example #22
0
            sdeInfos = sdeInfo.split("/")
            sdeServer = sdeInfos[0]
            sdeInstance = sdeInfos[1]
            sdeUsername = sdeInfos[2]
            sdePassword = sdeInfos[3]

            # 默认文件已经存在
            sdeOutFullName = os.path.join(rootPath, "resources", "sde", wksId + ".sde").replace("\\", "/")
            # 设置当前工作空间
            arcpy.env.workspace = sdeOutFullName
            logger.info("工作空间" + sdeOutFullName + "初始化成功")
            # 新增要素集
            param2 = sys.argv[2]
            param2 = param2.replace("null", "''")
            param2 = param2.replace("true", "True")
            param2 = param2.replace("false", "False")
            fdsDict = AIUtils.str2dict(param2)
            keys = fdsDict.keys()
            fdsName = None if "name" not in keys else fdsDict["name"]
            fdsWkid = 4326 if "wkid" not in keys else fdsDict["wkid"]
            try:
                if not AIUtils.isEmpty(fdsName):
                    fdsWkid = 4326 if not AIUtils.isInt(fdsWkid) else fdsWkid
                    arcpy.CreateFeatureDataset_management(sdeOutFullName, fdsName, arcpy.SpatialReference(fdsWkid))
                    flag = "true"
            except Exception as e:
                logger.info(unicode(e.message).encode("utf-8"))
                logger.info("要素集" + fdsName + "新增失败")

    print flag
Example #23
0
 def getFeatureRestUrl(self):
     '''
      获取局部要素服务Rest地址
     '''
     if self.getSvcExtension('FeatureServer'):
         return '/rest/services/' + '' if AIUtils.isEmpty(self.getServiceFolder()) else (self.getServiceFolder() + '/') + (self.getServiceName() + '/FeatureServer')
Example #24
0
 def setVisible(self, visible):
     self.__visible = True if AIUtils.isEmpty(visible) else visible
Example #25
0
 def setTransparency(self, transparency):
     self.__transparency = 0 if AIUtils.isEmpty(transparency) else transparency
Example #26
0
 def setMaxScale(self, maxScale):
     self.__maxScale = 0 if AIUtils.isEmpty(maxScale) else maxScale
Example #27
0
 def setMinScale(self, minScale):
     self.__minScale = 0 if AIUtils.isEmpty(minScale) else minScale
Example #28
0
 def setWkid(self, wkid):
     self.__wkid = 4326 if AIUtils.isEmpty(wkid) else wkid
Example #29
0
 def getWFSRestUrl(self):
     '''
      获取局部WFS服务Rest地址
     '''
     if self.getSvcExtension('WFSServer'):
         return '/rest/services/' + '' if AIUtils.isEmpty(self.getServiceFolder()) else (self.getServiceFolder() + '/') + (self.getServiceName() + '/MapServer/WFSServer')
Example #30
0
 def __init__(self, name = None, wkid = 4326):
     '''
     构造器
     '''
     self.__name = name
     self.__wkid = 4326 if AIUtils.isEmpty(wkid) else wkid