39 |
|
|
40 |
from Thuban.Model.color import Color, Transparent |
from Thuban.Model.color import Color, Transparent |
41 |
|
|
42 |
|
from Thuban.Model.classification import ClassGroupDefault, \ |
43 |
|
ClassGroupSingleton, ClassGroupRange |
44 |
|
|
45 |
from mapscript import layerObj, classObj, colorObj, styleObj, rectObj, symbolObj, \ |
from mapscript import layerObj, classObj, colorObj, styleObj, rectObj, symbolObj, \ |
46 |
pointObj, lineObj |
pointObj, lineObj |
47 |
|
|
357 |
|
|
358 |
# Initial Symbol List |
# Initial Symbol List |
359 |
self._symbols = [] |
self._symbols = [] |
|
self._numsymbols = self._symbolset.numsymbols |
|
360 |
self._i = 1 |
self._i = 1 |
361 |
while self._i < self._numsymbols: |
while self._i < self._symbolset.numsymbols: |
362 |
self._symbols.append(MF_Symbol(self._symbolset.getSymbol(self._i))) |
self._symbols.append(MF_Symbol(self._symbolset.getSymbol(self._i))) |
363 |
self._i += 1 |
self._i += 1 |
364 |
|
|
372 |
os.remove("tempsymbol") |
os.remove("tempsymbol") |
373 |
|
|
374 |
def get_symbol(self, symbolnr): |
def get_symbol(self, symbolnr): |
375 |
if symbolnr < self._numsymbols: |
if symbolnr < self._symbolset.numsymbols: |
376 |
return self._symbols[symbolnr-1] |
return self._symbols[symbolnr-1] |
377 |
else: |
else: |
378 |
return None |
return None |
411 |
self._expression = self._clazz.getExpressionString() |
self._expression = self._clazz.getExpressionString() |
412 |
|
|
413 |
self.metadata = MF_Metadata() |
self.metadata = MF_Metadata() |
414 |
|
# try to get the first metaDatakey. If it does not exists, the following |
415 |
|
# error will occur: |
416 |
|
# MapServerError: getFirstMetaDataKey: Hash table error. Key does not exist |
417 |
try: |
try: |
418 |
self.metafkey = mf_class.getFirstMetaDataKey() |
self.metafkey = mf_class.getFirstMetaDataKey() |
419 |
except: |
except: |
527 |
|
|
528 |
self._projection = MF_Projection(self._mf_layer.getProjection()) |
self._projection = MF_Projection(self._mf_layer.getProjection()) |
529 |
|
|
|
# Variable extent will not used for RasterLayer |
|
|
# this variable is not necessary, because it comes directly |
|
|
# from the shp file |
|
|
try: |
|
|
self._extent = MF_Rectangle(self._mf_layer.getExtent()) |
|
|
except: |
|
|
self._extent = None |
|
|
|
|
530 |
# Create Metadata |
# Create Metadata |
531 |
self._metadata = MF_Metadata() |
self._metadata = MF_Metadata() |
532 |
try: |
try: |
610 |
def add_thubanclass(self, tb_class, type=""): |
def add_thubanclass(self, tb_class, type=""): |
611 |
""" |
""" |
612 |
Add a thuban class object |
Add a thuban class object |
613 |
""" |
""" |
614 |
new_class = MF_Class(classObj(self._mf_layer)) |
new_class = MF_Class(classObj(self._mf_layer)) |
615 |
new_class.set_name(tb_class.GetLabel()) |
# set the class name to the Label form thuban if given, |
616 |
|
# else set it to the value |
617 |
|
if tb_class.GetLabel() != "": |
618 |
|
new_class.set_name(tb_class.GetLabel()) |
619 |
|
else: |
620 |
|
if isinstance(tb_class, ClassGroupDefault): |
621 |
|
new_class.set_name("default") |
622 |
|
elif isinstance(tb_class, ClassGroupSingleton): |
623 |
|
new_class.set_name(str(tb_class.GetValue())) |
624 |
|
else: |
625 |
|
# TODO: set a name if the expression is a ogical |
626 |
|
new_class.set_name("no name") |
627 |
if self.get_type() == "line": |
if self.get_type() == "line": |
628 |
new_class.add_thubanstyle(tb_class.GetProperties(), type="line") |
new_class.add_thubanstyle(tb_class.GetProperties(), type="line") |
629 |
elif self.get_type() == "point": |
elif self.get_type() == "point": |
632 |
new_class.add_thubanstyle(tb_class.GetProperties()) |
new_class.add_thubanstyle(tb_class.GetProperties()) |
633 |
if (type == "default"): |
if (type == "default"): |
634 |
return |
return |
635 |
|
# removed the following two lines to check if the expressionstring |
636 |
|
# is needed for points, because if expressionstring is a range type, |
637 |
|
# no expressionstring in the default group is allowed |
638 |
elif (tb_class.Matches("DEFAULT")): |
elif (tb_class.Matches("DEFAULT")): |
639 |
new_class.set_expressionstring('/./') |
return |
640 |
|
# new_class.set_expressionstring('/./') |
641 |
else: |
else: |
642 |
new_class.set_expressionstring(str(tb_class.GetValue())) |
#check which type of expression |
643 |
|
if isinstance(tb_class, ClassGroupRange): |
644 |
|
# get the needed infos from the Range-String |
645 |
|
self._range_begin = tb_class.GetRange()[0] |
646 |
|
self._range_min = str(tb_class.GetMin()) |
647 |
|
self._range_max = str(tb_class.GetMax()) |
648 |
|
self._range_end = tb_class.GetRange()[len(tb_class.GetRange())-1] |
649 |
|
self._range_umn = "" |
650 |
|
self._range_classitem = self.get_classitem() |
651 |
|
# generate the operator |
652 |
|
if self._range_begin == "[": |
653 |
|
self._range_op1 = ">=" |
654 |
|
elif self._range_begin == "]": |
655 |
|
self._range_op1 = ">" |
656 |
|
else: |
657 |
|
print "error in Thuban class properties" |
658 |
|
#build op1 string for the lower limit |
659 |
|
self._range_op1 = "[" + self._range_classitem + "] " + \ |
660 |
|
self._range_op1 + " " +\ |
661 |
|
self._range_min |
662 |
|
# build op2 string for the upper limit |
663 |
|
if self._range_end == "[": |
664 |
|
self._range_op2 = "<" |
665 |
|
elif self._range_end == "]": |
666 |
|
self._range_op2 = "<=" |
667 |
|
else: |
668 |
|
print "error in Thuban class properties" |
669 |
|
|
670 |
|
self._range_op2 = "[" + self._range_classitem + "] " + \ |
671 |
|
self._range_op2 + " " +\ |
672 |
|
self._range_max |
673 |
|
# we only need AND here at the moment, becaus of the limits |
674 |
|
# in thuban |
675 |
|
self._range_combine = "AND" |
676 |
|
# check if the one limit is set to inf and then |
677 |
|
# remove the second expression becaus is not needed. |
678 |
|
if self._range_min == "-inf": |
679 |
|
self._range_combine = "" |
680 |
|
self._range_op1 = "" |
681 |
|
elif self._range_max == "inf": |
682 |
|
self._range_combine = "" |
683 |
|
self._range_op2 = "" |
684 |
|
# build the expression together |
685 |
|
self._range_umn = "(" + self._range_umn + \ |
686 |
|
self._range_op1 + " " +\ |
687 |
|
self._range_combine + \ |
688 |
|
self._range_op2 + " )" |
689 |
|
#set the expression to the mapscript |
690 |
|
new_class.set_expressionstring(self._range_umn) |
691 |
|
else: |
692 |
|
new_class.set_expressionstring(str(tb_class.GetValue())) |
693 |
new_class.set_status(tb_class.IsVisible()) |
new_class.set_status(tb_class.IsVisible()) |
694 |
self._classes.append(new_class) |
self._classes.append(new_class) |
695 |
|
|
956 |
|
|
957 |
def set_extent(self, newextent): |
def set_extent(self, newextent): |
958 |
# TODO: add the shown extend here instead of the total |
# TODO: add the shown extend here instead of the total |
959 |
self._newrect = MF_Rectangle(rectObj()) |
# if no size is set or if it is zero, the size will set to 1. |
960 |
try: |
if self.get_size()[0] == - 1: |
961 |
self._newrect.set_rect(newextent[0],newextent[1], \ |
print "define the size first to set extent" |
962 |
newextent[2],newextent[3]) |
print "size is now set to (1,1)" |
963 |
self._mf_map.setExtent(newextent[0],newextent[1], \ |
self.set_size(1,1) |
964 |
|
self._newrect = MF_Rectangle(rectObj(newextent[0],newextent[1], \ |
965 |
|
newextent[2],newextent[3])) |
966 |
|
self._mf_map.setExtent(newextent[0],newextent[1], \ |
967 |
newextent[2],newextent[3]) |
newextent[2],newextent[3]) |
968 |
except: |
|
|
return |
|
969 |
|
|
970 |
def set_size(self, newwidth, newheight): |
def set_size(self, newwidth, newheight): |
971 |
self._mf_map.width = newwidth |
self._mf_map.width = newwidth |
1014 |
if tb_layer.GetProjection(): |
if tb_layer.GetProjection(): |
1015 |
new_layer.set_projection(tb_layer.GetProjection()) |
new_layer.set_projection(tb_layer.GetProjection()) |
1016 |
if tb_layer.GetClassification().GetNumGroups() > 0: |
if tb_layer.GetClassification().GetNumGroups() > 0: |
1017 |
|
singletonexists = False |
1018 |
for group in range(0, \ |
for group in range(0, \ |
1019 |
tb_layer.GetClassification().GetNumGroups(), 1): |
tb_layer.GetClassification().GetNumGroups(), 1): |
1020 |
|
if isinstance(tb_layer.GetClassification().GetGroup(group), \ |
1021 |
|
ClassGroupSingleton): |
1022 |
|
singletonexists = True |
1023 |
new_layer.add_thubanclass( \ |
new_layer.add_thubanclass( \ |
1024 |
tb_layer.GetClassification().GetGroup(group)) |
tb_layer.GetClassification().GetGroup(group)) |
1025 |
new_layer.add_thubanclass( \ |
new_layer.add_thubanclass( \ |
1026 |
tb_layer.GetClassification().GetDefaultGroup()) |
tb_layer.GetClassification().GetDefaultGroup()) |
1027 |
|
# remove the classitem if one singleton exists |
1028 |
|
if singletonexists == False: |
1029 |
|
new_layer.set_classitem(None) |
1030 |
else: |
else: |
1031 |
new_layer.add_thubanclass( \ |
new_layer.add_thubanclass( \ |
1032 |
tb_layer.GetClassification().GetDefaultGroup(), \ |
tb_layer.GetClassification().GetDefaultGroup(), \ |
1074 |
|
|
1075 |
def get_imageurl(self): |
def get_imageurl(self): |
1076 |
return self._mf_web.imageurl |
return self._mf_web.imageurl |
1077 |
|
|
1078 |
|
def get_template(self): |
1079 |
|
return self._mf_web.template |
1080 |
|
|
1081 |
|
def set_template(self, new_template): |
1082 |
|
self._mf_web.template = new_template |
1083 |
|
|
1084 |
def set_imageurl(self, new_imageurl): |
def set_imageurl(self, new_imageurl): |
1085 |
self._mf_web.imageurl = new_imageurl |
self._mf_web.imageurl = new_imageurl |