def loadXML(self, xmlfile, strict=False): tmp_map = Map(0,0) load_map (tmp_map, xmlfile, strict) for lyr in tmp_map.layers: style_count = len(lyr.styles) if style_count == 0: raise ServerConfigurationError("Cannot register Layer '%s' without a style" % lyr.name) elif style_count == 1: style_obj = tmp_map.find_style(lyr.styles[0]) style_obj = copy_style(style_obj) style_name = lyr.styles[0] if style_name not in self.aggregatestyles.keys() and style_name not in self.styles.keys(): self.register_style(style_name, style_obj) self.register_layer(copy_layer(lyr), style_name, extrastyles=(style_name,)) elif style_count > 1: for style_name in lyr.styles: style_obj = tmp_map.find_style(style_name) style_obj = copy_style(style_obj) if style_name not in self.aggregatestyles.keys() and style_name not in self.styles.keys(): self.register_style(style_name, style_obj) aggregates = tuple([sty for sty in lyr.styles]) aggregates_name = '%s_aggregates' % lyr.name self.register_aggregate_style(aggregates_name,aggregates) self.register_layer(copy_layer(lyr), aggregates_name, extrastyles=aggregates)
def loadXML(self, xmlfile=None, strict=False, xmlstring='', basepath=''): config = ConfigParser.SafeConfigParser() map_wms_srs = None if self.configpath: config.readfp(open(self.configpath)) if config.has_option('map', 'wms_srs'): map_wms_srs = config.get('map', 'wms_srs') tmp_map = Map(0, 0) if xmlfile: load_map(tmp_map, xmlfile, strict) elif xmlstring: load_map_from_string(tmp_map, xmlstring, strict, basepath) else: raise ServerConfigurationError( "Mapnik configuration XML is not specified - 'xmlfile' and 'xmlstring' variables are empty.\ Please set one of this variables to load mapnik map object.") # get the map scale if tmp_map.parameters: if tmp_map.parameters['scale']: self.map_scale = float(tmp_map.parameters['scale']) # parse map level attributes if tmp_map.background: self.map_attributes['bgcolor'] = tmp_map.background if tmp_map.buffer_size: self.map_attributes['buffer_size'] = tmp_map.buffer_size for lyr in tmp_map.layers: layer_section = 'layer_%s' % lyr.name layer_wms_srs = None if config.has_option(layer_section, 'wms_srs'): layer_wms_srs = config.get(layer_section, 'wms_srs') else: layer_wms_srs = map_wms_srs if config.has_option(layer_section, 'title'): lyr.title = config.get(layer_section, 'title') else: lyr.title = '' if config.has_option(layer_section, 'abstract'): lyr.abstract = config.get(layer_section, 'abstract') else: lyr.abstract = '' style_count = len(lyr.styles) if style_count == 0: raise ServerConfigurationError( "Cannot register Layer '%s' without a style" % lyr.name) elif style_count == 1: style_obj = tmp_map.find_style(lyr.styles[0]) style_name = lyr.styles[0] meta_s = extract_named_rules(style_obj) if meta_s: self.meta_styles['%s_meta' % lyr.name] = meta_s if hasattr(lyr, 'abstract'): name_ = lyr.abstract else: name_ = lyr.name meta_layer_name = '%s:%s' % (name_, '-'.join(meta_s.names)) meta_layer_name = meta_layer_name.replace(' ', '_') self.meta_styles[meta_layer_name] = meta_s meta_lyr = common.copy_layer(lyr) meta_lyr.meta_style = meta_layer_name meta_lyr.name = meta_layer_name meta_lyr.wmsextrastyles = () meta_lyr.defaultstyle = meta_layer_name meta_lyr.wms_srs = layer_wms_srs self.ordered_layers.append(meta_lyr) self.meta_layers[meta_layer_name] = meta_lyr print meta_layer_name if style_name not in self.aggregatestyles.keys( ) and style_name not in self.styles.keys(): self.register_style(style_name, style_obj) # must copy layer here otherwise we'll segfault lyr_ = common.copy_layer(lyr) lyr_.wms_srs = layer_wms_srs self.register_layer(lyr_, style_name, extrastyles=(style_name, )) elif style_count > 1: for style_name in lyr.styles: style_obj = tmp_map.find_style(style_name) meta_s = extract_named_rules(style_obj) if meta_s: self.meta_styles['%s_meta' % lyr.name] = meta_s if hasattr(lyr, 'abstract'): name_ = lyr.abstract else: name_ = lyr.name meta_layer_name = '%s:%s' % (name_, '-'.join( meta_s.names)) meta_layer_name = meta_layer_name.replace(' ', '_') self.meta_styles[meta_layer_name] = meta_s meta_lyr = common.copy_layer(lyr) meta_lyr.meta_style = meta_layer_name print meta_layer_name meta_lyr.name = meta_layer_name meta_lyr.wmsextrastyles = () meta_lyr.defaultstyle = meta_layer_name meta_lyr.wms_srs = layer_wms_srs self.ordered_layers.append(meta_lyr) self.meta_layers[meta_layer_name] = meta_lyr if style_name not in self.aggregatestyles.keys( ) and style_name not in self.styles.keys(): self.register_style(style_name, style_obj) aggregates = tuple([sty for sty in lyr.styles]) aggregates_name = '%s_aggregates' % lyr.name self.register_aggregate_style(aggregates_name, aggregates) # must copy layer here otherwise we'll segfault lyr_ = common.copy_layer(lyr) lyr_.wms_srs = layer_wms_srs self.register_layer(lyr_, aggregates_name, extrastyles=aggregates) if 'default' in aggregates: sys.stderr.write( "Warning: Multi-style layer '%s' contains a regular style named 'default'. \ This style will effectively be hidden by the 'all styles' default style for multi-style layers.\n" % lyr_.name)
def loadXML(self, xmlfile=None, strict=False, xmlstring='', basepath=''): config = ConfigParser.SafeConfigParser() map_wms_srs = None if self.configpath: config.readfp(open(self.configpath)) if config.has_option('map', 'wms_srs'): map_wms_srs = config.get('map', 'wms_srs') tmp_map = Map(0,0) if xmlfile: load_map(tmp_map, xmlfile, strict) elif xmlstring: load_map_from_string(tmp_map, xmlstring, strict, basepath) else: raise ServerConfigurationError("Mapnik configuration XML is not specified - 'xmlfile' and 'xmlstring' variables are empty.\ Please set one of this variables to load mapnik map object.") # parse map level attributes if tmp_map.background: self.map_attributes['bgcolor'] = tmp_map.background if tmp_map.buffer_size: self.map_attributes['buffer_size'] = tmp_map.buffer_size for lyr in tmp_map.layers: layer_section = 'layer_%s' % lyr.name layer_wms_srs = None if config.has_option(layer_section, 'wms_srs'): layer_wms_srs = config.get(layer_section, 'wms_srs') else: layer_wms_srs = map_wms_srs if config.has_option(layer_section, 'title'): lyr.title = config.get(layer_section, 'title') else: lyr.title = '' if config.has_option(layer_section, 'abstract'): lyr.abstract = config.get(layer_section, 'abstract') else: lyr.abstract = '' style_count = len(lyr.styles) if style_count == 0: raise ServerConfigurationError("Cannot register Layer '%s' without a style" % lyr.name) elif style_count == 1: style_obj = tmp_map.find_style(lyr.styles[0]) style_name = lyr.styles[0] meta_s = extract_named_rules(style_obj) if meta_s: self.meta_styles['%s_meta' % lyr.name] = meta_s if hasattr(lyr,'abstract'): name_ = lyr.abstract else: name_ = lyr.name meta_layer_name = '%s:%s' % (name_,'-'.join(meta_s.names)) meta_layer_name = meta_layer_name.replace(' ','_') self.meta_styles[meta_layer_name] = meta_s meta_lyr = common.copy_layer(lyr) meta_lyr.meta_style = meta_layer_name meta_lyr.name = meta_layer_name meta_lyr.wmsextrastyles = () meta_lyr.defaultstyle = meta_layer_name meta_lyr.wms_srs = layer_wms_srs self.ordered_layers.append(meta_lyr) self.meta_layers[meta_layer_name] = meta_lyr print meta_layer_name if style_name not in self.aggregatestyles.keys() and style_name not in self.styles.keys(): self.register_style(style_name, style_obj) # must copy layer here otherwise we'll segfault lyr_ = common.copy_layer(lyr) lyr_.wms_srs = layer_wms_srs self.register_layer(lyr_, style_name, extrastyles=(style_name,)) elif style_count > 1: for style_name in lyr.styles: style_obj = tmp_map.find_style(style_name) meta_s = extract_named_rules(style_obj) if meta_s: self.meta_styles['%s_meta' % lyr.name] = meta_s if hasattr(lyr,'abstract'): name_ = lyr.abstract else: name_ = lyr.name meta_layer_name = '%s:%s' % (name_,'-'.join(meta_s.names)) meta_layer_name = meta_layer_name.replace(' ','_') self.meta_styles[meta_layer_name] = meta_s meta_lyr = common.copy_layer(lyr) meta_lyr.meta_style = meta_layer_name print meta_layer_name meta_lyr.name = meta_layer_name meta_lyr.wmsextrastyles = () meta_lyr.defaultstyle = meta_layer_name meta_lyr.wms_srs = layer_wms_srs self.ordered_layers.append(meta_lyr) self.meta_layers[meta_layer_name] = meta_lyr if style_name not in self.aggregatestyles.keys() and style_name not in self.styles.keys(): self.register_style(style_name, style_obj) aggregates = tuple([sty for sty in lyr.styles]) aggregates_name = '%s_aggregates' % lyr.name self.register_aggregate_style(aggregates_name,aggregates) # must copy layer here otherwise we'll segfault lyr_ = common.copy_layer(lyr) lyr_.wms_srs = layer_wms_srs self.register_layer(lyr_, aggregates_name, extrastyles=aggregates)
def loadXML(self, xmlfile, strict=False): config = ConfigParser.SafeConfigParser() map_wms_srs = None if self.configpath: config.readfp(open(self.configpath)) if config.has_option("map", "wms_srs"): map_wms_srs = config.get("map", "wms_srs") tmp_map = Map(0, 0) load_map(tmp_map, xmlfile, strict) # parse map level attributes if tmp_map.background: self.map_attributes["bgcolor"] = tmp_map.background if tmp_map.buffer_size: self.map_attributes["buffer_size"] = tmp_map.buffer_size for lyr in tmp_map.layers: layer_section = "layer_%s" % lyr.name layer_wms_srs = None if config.has_option(layer_section, "wms_srs"): layer_wms_srs = config.get(layer_section, "wms_srs") else: layer_wms_srs = map_wms_srs if config.has_option(layer_section, "title"): lyr.title = config.get(layer_section, "title") else: lyr.title = "" if config.has_option(layer_section, "abstract"): lyr.abstract = config.get(layer_section, "abstract") else: lyr.abstract = "" style_count = len(lyr.styles) if style_count == 0: raise ServerConfigurationError("Cannot register Layer '%s' without a style" % lyr.name) elif style_count == 1: style_obj = tmp_map.find_style(lyr.styles[0]) style_name = lyr.styles[0] meta_s = extract_named_rules(style_obj) if meta_s: self.meta_styles["%s_meta" % lyr.name] = meta_s if hasattr(lyr, "abstract"): name_ = lyr.abstract else: name_ = lyr.name meta_layer_name = "%s:%s" % (name_, "-".join(meta_s.names)) meta_layer_name = meta_layer_name.replace(" ", "_") self.meta_styles[meta_layer_name] = meta_s meta_lyr = common.copy_layer(lyr) meta_lyr.meta_style = meta_layer_name meta_lyr.name = meta_layer_name meta_lyr.wmsextrastyles = () meta_lyr.defaultstyle = meta_layer_name meta_lyr.wms_srs = layer_wms_srs self.ordered_layers.append(meta_lyr) self.meta_layers[meta_layer_name] = meta_lyr print meta_layer_name if style_name not in self.aggregatestyles.keys() and style_name not in self.styles.keys(): self.register_style(style_name, style_obj) # must copy layer here otherwise we'll segfault lyr_ = common.copy_layer(lyr) lyr_.wms_srs = layer_wms_srs self.register_layer(lyr_, style_name, extrastyles=(style_name,)) elif style_count > 1: for style_name in lyr.styles: style_obj = tmp_map.find_style(style_name) meta_s = extract_named_rules(style_obj) if meta_s: self.meta_styles["%s_meta" % lyr.name] = meta_s if hasattr(lyr, "abstract"): name_ = lyr.abstract else: name_ = lyr.name meta_layer_name = "%s:%s" % (name_, "-".join(meta_s.names)) meta_layer_name = meta_layer_name.replace(" ", "_") self.meta_styles[meta_layer_name] = meta_s meta_lyr = common.copy_layer(lyr) meta_lyr.meta_style = meta_layer_name print meta_layer_name meta_lyr.name = meta_layer_name meta_lyr.wmsextrastyles = () meta_lyr.defaultstyle = meta_layer_name meta_lyr.wms_srs = layer_wms_srs self.ordered_layers.append(meta_lyr) self.meta_layers[meta_layer_name] = meta_lyr if style_name not in self.aggregatestyles.keys() and style_name not in self.styles.keys(): self.register_style(style_name, style_obj) aggregates = tuple([sty for sty in lyr.styles]) aggregates_name = "%s_aggregates" % lyr.name self.register_aggregate_style(aggregates_name, aggregates) # must copy layer here otherwise we'll segfault lyr_ = common.copy_layer(lyr) lyr_.wms_srs = layer_wms_srs self.register_layer(lyr_, aggregates_name, extrastyles=aggregates)
def loadXML(self, xmlfile=None, strict=False, xmlstring='', basepath=''): config = ConfigParser.SafeConfigParser() #声明变量,用于保存 map中的wms_srs map_wms_srs = None if self.configpath: config.readfp(open(self.configpath)) if config.has_option('map', 'wms_srs'): map_wms_srs = config.get('map', 'wms_srs') #声明变量tmp_map保存Map(0,0),Map从mapnik模块中导入,此处详见doc/mapnik_help.text tmp_map = Map(0, 0) #支持文件模式和字符串格式的输入 if xmlfile: load_map(tmp_map, xmlfile, strict) elif xmlstring: load_map_from_string(tmp_map, xmlstring, strict, basepath) else: #差错机制 raise ServerConfigurationError( "Mapnik configuration XML is not specified - 'xmlfile' and 'xmlstring' variables are empty.\ Please set one of this variables to load mapnik map object.") # parse map level attributes #解析地图图层特征参数 #背景颜色(待查) if tmp_map.background: self.map_attributes['bgcolor'] = tmp_map.background #buffer大小(待查) if tmp_map.buffer_size: self.map_attributes['buffer_size'] = tmp_map.buffer_size #对tmp_map中layers中所有lyr,进行参数解析 for lyr in tmp_map.layers: layer_section = 'layer_%s' % lyr.name layer_wms_srs = None if config.has_option(layer_section, 'wms_srs'): layer_wms_srs = config.get(layer_section, 'wms_srs') else: layer_wms_srs = map_wms_srs if config.has_option(layer_section, 'title'): lyr.title = config.get(layer_section, 'title') else: lyr.title = '' if config.has_option(layer_section, 'abstract'): lyr.abstract = config.get(layer_section, 'abstract') else: lyr.abstract = '' style_count = len(lyr.styles) #必须设定有lyr.styles if style_count == 0: raise ServerConfigurationError( "Cannot register Layer '%s' without a style" % lyr.name) elif style_count == 1: #.find_style方法为mapnik中Map类的方法????? style_obj = tmp_map.find_style(lyr.styles[0]) style_name = lyr.styles[0] # 对style_obj进行处理,提取参数返回为 style类 meta_s = extract_named_rules(style_obj) if meta_s: # BaseWMSFactory类的meta_styles属性 self.meta_styles['%s_meta' % lyr.name] = meta_s # 判断lyr是否含有abstract属性 if hasattr(lyr, 'abstract'): name_ = lyr.abstract else: name_ = lyr.name # 将meta_s.names中的字符串序列用“-”连接 meta_layer_name = '%s:%s' % (name_, '-'.join(meta_s.names)) # 将meta_layer_name中的空格全部替换为“_” meta_layer_name = meta_layer_name.replace(' ', '_') self.meta_styles[meta_layer_name] = meta_s meta_lyr = common.copy_layer(lyr) meta_lyr.meta_style = meta_layer_name meta_lyr.name = meta_layer_name meta_lyr.wmsextrastyles = () meta_lyr.defaultstyle = meta_layer_name meta_lyr.wms_srs = layer_wms_srs self.ordered_layers.append(meta_lyr) self.meta_layers[meta_layer_name] = meta_lyr print meta_layer_name # 如果aggregatestyles和styles中没有style_name的关键字,则注册style。.register_style为本类定义的方法 if style_name not in self.aggregatestyles.keys( ) and style_name not in self.styles.keys(): self.register_style(style_name, style_obj) # must copy layer here otherwise we'll segfault # c此处必须拷贝图层,否则将出现段错误 # common lyr_ = common.copy_layer(lyr) lyr_.wms_srs = layer_wms_srs #register_layer为本类定义的一个方法, self.register_layer(lyr_, style_name, extrastyles=(style_name, )) # 当style_count > 1时,处理步骤与style_count = 1时大致相同, elif style_count > 1: for style_name in lyr.styles: style_obj = tmp_map.find_style(style_name) meta_s = extract_named_rules(style_obj) if meta_s: self.meta_styles['%s_meta' % lyr.name] = meta_s if hasattr(lyr, 'abstract'): name_ = lyr.abstract else: name_ = lyr.name meta_layer_name = '%s:%s' % (name_, '-'.join( meta_s.names)) meta_layer_name = meta_layer_name.replace(' ', '_') self.meta_styles[meta_layer_name] = meta_s meta_lyr = common.copy_layer(lyr) meta_lyr.meta_style = meta_layer_name print meta_layer_name meta_lyr.name = meta_layer_name meta_lyr.wmsextrastyles = () meta_lyr.defaultstyle = meta_layer_name meta_lyr.wms_srs = layer_wms_srs self.ordered_layers.append(meta_lyr) self.meta_layers[meta_layer_name] = meta_lyr if style_name not in self.aggregatestyles.keys( ) and style_name not in self.styles.keys(): self.register_style(style_name, style_obj) # 与style_count = 1时的不同之处, aggregates = tuple([sty for sty in lyr.styles]) aggregates_name = '%s_aggregates' % lyr.name self.register_aggregate_style(aggregates_name, aggregates) # must copy layer here otherwise we'll segfault lyr_ = common.copy_layer(lyr) lyr_.wms_srs = layer_wms_srs self.register_layer(lyr_, aggregates_name, extrastyles=aggregates) if 'default' in aggregates: sys.stderr.write( "Warning: Multi-style layer '%s' contains a regular style named 'default'. \ This style will effectively be hidden by the 'all styles' default style for multi-style layers.\n" % lyr_.name)