42 |
from Thuban.Model.classification import ClassGroupDefault, \ |
from Thuban.Model.classification import ClassGroupDefault, \ |
43 |
ClassGroupSingleton, ClassGroupRange |
ClassGroupSingleton, ClassGroupRange |
44 |
|
|
|
from Thuban.Model.layer import RasterLayer |
|
|
from Extensions.umn_mapserver.mf_import import AnnotationLayer |
|
|
|
|
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 |
|
|
48 |
|
from Thuban.Model.layer import RasterLayer |
49 |
|
|
50 |
# ################################### |
# ################################### |
51 |
# |
# |
518 |
the class objects in the layer object will be stored in |
the class objects in the layer object will be stored in |
519 |
an array. The metadata are created as a new object. |
an array. The metadata are created as a new object. |
520 |
""" |
""" |
|
|
|
521 |
self._mf_layer = mf_layer |
self._mf_layer = mf_layer |
522 |
|
|
523 |
# Create Classes |
# Create Classes |
524 |
# there could be more then 1 |
# there could be more then 1 |
|
self._numclasses = mf_layer.numclasses |
|
525 |
i = -1 |
i = -1 |
526 |
self._classes = [] |
self._classes = [] |
527 |
while i < self._numclasses-1: |
while i < self._mf_layer.numclasses-1: |
528 |
i += 1 |
i += 1 |
529 |
self._classes.append(MF_Class(self._mf_layer.getClass(i))) |
self._classes.append(MF_Class(self._mf_layer.getClass(i))) |
530 |
|
|
533 |
# Create Metadata |
# Create Metadata |
534 |
self._metadata = MF_Metadata(self._mf_layer) |
self._metadata = MF_Metadata(self._mf_layer) |
535 |
|
|
536 |
|
def get_index(self): |
537 |
|
return self._mf_layer.index |
538 |
|
|
539 |
def get_name(self): |
def get_name(self): |
540 |
return self._mf_layer.name |
return self._mf_layer.name |
541 |
|
|
542 |
def get_data(self): |
def get_data(self): |
543 |
return self._mf_layer.data |
return self._mf_layer.data |
544 |
|
|
545 |
def get_classes(self): |
def get_classes(self): |
546 |
return self._classes |
return self._classes |
547 |
|
|
548 |
|
def set_classes(self, new_classes): |
549 |
|
self._classes = new_classes |
550 |
|
|
551 |
def get_metadata(self): |
def get_metadata(self): |
552 |
return self._metadata |
return self._metadata |
553 |
|
|
554 |
|
def set_metadata(self, new_metadata): |
555 |
|
self._metadata = new_metadata |
556 |
|
|
557 |
def get_type(self): |
def get_type(self): |
558 |
return shp_type[self._mf_layer.type] |
return shp_type[self._mf_layer.type] |
570 |
return False |
return False |
571 |
else: |
else: |
572 |
return True |
return True |
|
#return self._mf_layer.status |
|
573 |
|
|
574 |
def get_group(self): |
def get_group(self): |
575 |
return self._mf_layer.group |
return self._mf_layer.group |
577 |
def set_group(self, new_group): |
def set_group(self, new_group): |
578 |
self._mf_layer.group = new_group |
self._mf_layer.group = new_group |
579 |
|
|
|
|
|
580 |
def set_name(self, newname): |
def set_name(self, newname): |
581 |
self._mf_layer.name = newname |
self._mf_layer.name = newname |
582 |
|
|
585 |
self._mf_layer.data = newdata |
self._mf_layer.data = newdata |
586 |
else: |
else: |
587 |
self._mf_layer.data = newdata[:-4] |
self._mf_layer.data = newdata[:-4] |
|
|
|
588 |
|
|
589 |
def set_status(self, newstatus): |
def set_status(self, newstatus): |
590 |
# status can set to true or false from thuban. |
# status can set to true or false from thuban. |
620 |
def add_thubanclass(self, tb_class, type=""): |
def add_thubanclass(self, tb_class, type=""): |
621 |
""" |
""" |
622 |
Add a thuban class object |
Add a thuban class object |
623 |
""" |
""" |
624 |
new_class = MF_Class(classObj(self._mf_layer)) |
new_class = MF_Class(classObj(self._mf_layer)) |
625 |
|
self._classes.append(new_class) |
626 |
# set the class name to the Label form thuban if given, |
# set the class name to the Label form thuban if given, |
627 |
# else set it to the value |
# else set it to the value |
628 |
if tb_class.GetLabel() != "": |
if tb_class.GetLabel() != "": |
702 |
else: |
else: |
703 |
new_class.set_expressionstring(str(tb_class.GetValue())) |
new_class.set_expressionstring(str(tb_class.GetValue())) |
704 |
new_class.set_status(tb_class.IsVisible()) |
new_class.set_status(tb_class.IsVisible()) |
|
self._classes.append(new_class) |
|
705 |
|
|
706 |
|
def remove_allclasses(self): |
707 |
|
for i in range(0,len(self.get_classes()), 1): |
708 |
|
self._mf_layer.removeClass(i) |
709 |
|
self.set_classes([]) |
710 |
|
|
711 |
class MF_Scalebar: |
class MF_Scalebar: |
712 |
""" |
""" |
880 |
# Create Metadata |
# Create Metadata |
881 |
self._metadata = MF_Metadata(self._mf_map) |
self._metadata = MF_Metadata(self._mf_map) |
882 |
|
|
883 |
|
def create_new_layer(self): |
884 |
|
""" |
885 |
|
the new layer must create inside the mapobj, because mapscript |
886 |
|
need the mapscript object as parameter for layerObj |
887 |
|
""" |
888 |
|
new_layer = MF_Layer(layerObj(self._mf_map)) |
889 |
|
self._layers.append(new_layer) |
890 |
|
# the new created layer must remove from the mapobject |
891 |
|
# because all layer will create new in export. |
892 |
|
#self._mf_map.removeLayer(self._mf_map.numlayers-1) |
893 |
|
return new_layer |
894 |
|
|
895 |
def get_mappath(self): |
def get_mappath(self): |
896 |
return self._mf_map.mappath |
return self._mf_map.mappath |
897 |
|
|
964 |
# shows the order of layer as list |
# shows the order of layer as list |
965 |
return self._mf_map.getLayerOrder() |
return self._mf_map.getLayerOrder() |
966 |
|
|
967 |
|
def set_layerorder(self, new_order): |
968 |
|
self._mf_map.setLayerOrder(new_order) |
969 |
|
|
970 |
def get_size(self): |
def get_size(self): |
971 |
#returns the size |
#returns the size |
972 |
return (self._mf_map.width, self._mf_map.height) |
return (self._mf_map.width, self._mf_map.height) |
999 |
newextent[2],newextent[3])) |
newextent[2],newextent[3])) |
1000 |
self._mf_map.setExtent(newextent[0],newextent[1], \ |
self._mf_map.setExtent(newextent[0],newextent[1], \ |
1001 |
newextent[2],newextent[3]) |
newextent[2],newextent[3]) |
|
|
|
1002 |
|
|
1003 |
def set_size(self, newwidth, newheight): |
def set_size(self, newwidth, newheight): |
1004 |
self._mf_map.width = newwidth |
self._mf_map.width = newwidth |
1027 |
""" |
""" |
1028 |
Add a thuban layer |
Add a thuban layer |
1029 |
""" |
""" |
1030 |
new_layer = MF_Layer(layerObj(self._mf_map)) |
# this import statement placed here, because if it is placed at the |
1031 |
|
# beginning of this file, it produced the following error: |
1032 |
|
# NameError: global name 'AnnotationLayer' is not defined |
1033 |
|
# don't know why this error is produced and why it works |
1034 |
|
# if it is placed here instead of the beginning. |
1035 |
|
from Extensions.umn_mapserver.mf_import import AnnotationLayer |
1036 |
|
if hasattr(tb_layer,"extension_umn_layerobj"): |
1037 |
|
#print tb_layer.extension_umn_layerobj |
1038 |
|
#new_layer = MF_Layer(layerObj(self._mf_map)) |
1039 |
|
new_layer = tb_layer.extension_umn_layerobj |
1040 |
|
else: |
1041 |
|
new_layer = MF_Layer(layerObj(self._mf_map)) |
1042 |
|
self._layers.append(new_layer) |
1043 |
|
tb_layer.extension_umn_layerobj = new_layer |
1044 |
|
new_layer.remove_allclasses() |
1045 |
|
# init a list to set the layerorder |
1046 |
|
new_layer.get_index() |
1047 |
new_layer.set_name(tb_layer.Title()) |
new_layer.set_name(tb_layer.Title()) |
|
|
|
1048 |
# TODO: implement relative pathnames |
# TODO: implement relative pathnames |
1049 |
# yet only absolute pathnames in the LayerObj are set |
# yet only absolute pathnames in the LayerObj are set |
1050 |
if isinstance(tb_layer, RasterLayer ): |
if isinstance(tb_layer, RasterLayer ): |
1054 |
elif isinstance(tb_layer, AnnotationLayer): |
elif isinstance(tb_layer, AnnotationLayer): |
1055 |
new_layer.set_type("annotation") |
new_layer.set_type("annotation") |
1056 |
new_layer.set_status(tb_layer.Visible()) |
new_layer.set_status(tb_layer.Visible()) |
1057 |
|
new_layer.set_data(tb_layer.ShapeStore().FileName()) |
1058 |
else: |
else: |
1059 |
new_layer.set_data(tb_layer.ShapeStore().FileName()) |
new_layer.set_data(tb_layer.ShapeStore().FileName()) |
1060 |
new_layer.set_status(tb_layer.Visible()) |
new_layer.set_status(tb_layer.Visible()) |
1061 |
new_layer.set_type(tb_layer.ShapeType()) |
new_layer.set_type(tb_layer.ShapeType()) |
|
|
|
1062 |
if tb_layer.GetClassificationColumn(): |
if tb_layer.GetClassificationColumn(): |
1063 |
new_layer.set_classitem(tb_layer.GetClassificationColumn()) |
new_layer.set_classitem(tb_layer.GetClassificationColumn()) |
1064 |
if tb_layer.GetProjection(): |
if tb_layer.GetProjection(): |
1081 |
new_layer.add_thubanclass( \ |
new_layer.add_thubanclass( \ |
1082 |
tb_layer.GetClassification().GetDefaultGroup(), \ |
tb_layer.GetClassification().GetDefaultGroup(), \ |
1083 |
type="default") |
type="default") |
|
|
|
1084 |
# set the projection to the layer. |
# set the projection to the layer. |
1085 |
# if the layer has its own definition use is, |
# if the layer has its own definition use it, |
1086 |
# else use the main projection |
# else use the main projection |
1087 |
if tb_layer.GetProjection(): |
if tb_layer.GetProjection(): |
1088 |
new_layer.set_projection(tb_layer.GetProjection()) |
new_layer.set_projection(tb_layer.GetProjection()) |
1089 |
else: |
else: |
1090 |
new_layer.set_projection(self._projection.get_projection()) |
new_layer.set_projection(self._projection.get_projection()) |
|
self._layers.append(new_layer) |
|
1091 |
|
|
1092 |
def remove_layer(self, nr): |
def remove_layer(self, delnr): |
1093 |
#remove the last layer from the layer list and not the one which |
if delnr < len(self._layers): |
1094 |
# is removed in mapscript. This must be, becaus mapscript |
# if a layer is removed, the links for the mapscript layer and |
1095 |
# set the object links anew. Don't understand really :) |
# the metadata must set new |
1096 |
self._layers.pop() |
# TODO: All other object in a layer obj must set a new, e.g proj. |
1097 |
self._mf_map.removeLayer(nr) |
for ll in range(len(self._layers)-1, delnr, -1): |
1098 |
|
self._layers[ll]._mf_layer = self._layers[ll-1]._mf_layer |
1099 |
def remove_all_layers(self): |
self._layers[ll].set_metadata(self._layers[ll-1].get_metadata()) |
1100 |
for i in range (self._mf_map.numlayers,0,-1): |
|
1101 |
self.remove_layer(i-1) |
self._mf_map.removeLayer(delnr) |
1102 |
|
self._layers.pop(delnr) |
1103 |
|
|
1104 |
def save_map(self, filepath): |
def save_map(self, filepath): |
1105 |
# save the Map |
# save the Map |