예제 #1
0
    def __init__(self, parent, layers, **kwargs):
        from stars.visualization.dialogs import choose_field_name
        ShapeMap.__init__(self, parent, layers)

        try:
            layer = layers[0]
            map_type = kwargs["map_type"]
            title = kwargs["title"]
            if "field_name" in kwargs and "data" in kwargs:
                field_name = kwargs["field_name"]
                data = np.array(kwargs["data"])
            else:
                field_name = choose_field_name(self, layer)
                if field_name == None:
                    raise Exception("No field name")

                data = np.array(layer.dbf.by_col(field_name))

            self.k = None
            self.hinge = None
            self.bins = None

            self.parentFrame.SetTitle('%s-%s (%s)' %
                                      (title, layer.name, field_name))
            self.updateMap(title, map_type, field_name, data, layer)

        except Exception as err:
            self.ShowMsgBox(
                """Map could not be classified. Please choose a valid numeric variable.
            
Details: """ + str(err.message))
            self.UnRegister()
            self.parentFrame.Close(True)
            return
예제 #2
0
    def __init__(self, parent, layers, **kwargs):
        from stars.visualization.dialogs import choose_field_name
        ShapeMap.__init__(self,parent, layers)
        
        try:
            layer = layers[0]
            map_type = kwargs["map_type"]
            title = kwargs["title"]
            if "field_name" in kwargs and "data" in kwargs:
                field_name = kwargs["field_name"]
                data = np.array(kwargs["data"])
            else:
                field_name = choose_field_name(self,layer)
                if field_name == None:
                    raise Exception("No field name")
                
                data = np.array(layer.dbf.by_col(field_name))
           
            self.k = None
            self.hinge = None
            self.bins = None
            
            self.parentFrame.SetTitle('%s-%s (%s)' % (title, layer.name, field_name))
            self.updateMap(title,map_type, field_name,data,layer)
            
        except Exception as err:
            self.ShowMsgBox("""Map could not be classified. Please choose a valid numeric variable.
            
Details: """ + str(err.message))
            self.UnRegister()
            self.parentFrame.Close(True)
            return
예제 #3
0
파일: LisaMap.py 프로젝트: lixun910/CAST
    def __init__(self, parent, layers, **kwargs):
        ShapeMap.__init__(self, parent, layers)

        try:
            layer = layers[0]
            dbf = layer.dbf
            field_name = ''
            weight_path = ''

            # let user choose weight_path and field_name
            var_list = dbf.header
            var_dlg = wx.SingleChoiceDialog(self, "Select variable for LISA",
                                            "LISA Map", var_list,
                                            wx.CHOICEDLG_STYLE)
            var_dlg.CenterOnScreen()
            if var_dlg.ShowModal() != wx.ID_OK:
                var_dlg.Destroy()
                raise Exception(
                    'LISA maps cannot be created without ID variable.')
            field_name = var_dlg.GetStringSelection()
            var_dlg.Destroy()

            weight_dlg = SelectWeightDlg(self.main, self.main.dialog_res)
            if weight_dlg.ShowModal() != wx.ID_OK:
                weight_dlg.Destroy()
                raise Exception(
                    'LISA maps cannot be created without spatial weights.')

            weight_path = weight_dlg.GetWeightPath()
            weight_dlg.Destroy()
            if weight_path == None or len(weight_path) <= 0:
                raise Exception('Please select a valid weights file.')

            self.siglevel = 0.05
            self.parentFrame.SetTitle('LISA - %s(%s)' %
                                      (layer.name, field_name))
            self.draw_layers[layer].set_edge_color(
                stars.DEFAULT_MAP_EDGE_COLOR)

            data = np.array(dbf.by_col(field_name))
            id_groups = self.process_LISA(self, data, weight_path)

            # default color schema
            color_group = [
                stars.LISA_NOT_SIG_COLOR, stars.LISA_HH_COLOR,
                stars.LISA_LL_COLOR, stars.LISA_LH_COLOR, stars.LISA_HL_COLOR,
                stars.LISA_OBSOLETE_COLOR
            ]
            label_group = [
                "Not Significant", "High-High", "Low-Low", "Low-High",
                "High-Low", "Neighborless"
            ]
            self.color_schema_dict[layer.name] = ColorSchema(
                color_group, label_group)
            #self.draw_layers[layer].set_edge_color(stars.LISA_MAP_EDGE_COLOR)
            self.draw_layers[layer].set_data_group(id_groups)
            self.draw_layers[layer].set_fill_color_group(color_group)

        except Exception as err:
            self.ShowMsgBox(str(err.message))
            self.UnRegister()
            self.parentFrame.Close(True)
            return None
예제 #4
0
    def __init__(self, parent, layers, **kwargs):
        ShapeMap.__init__(self, parent, layers)

        try:
            layer = layers[0]
            dbf = layer.dbf
            field_name = ''
            weight_path = ''

            # let user choose weight_path and field_name
            var_list = dbf.header
            #var_dlg = VariableSelDialog(self,var_list,bDisable2nd=True)
            var_dlg = wx.SingleChoiceDialog(self, "Select variable for LISA",
                                            "LISA Map", var_list,
                                            wx.CHOICEDLG_STYLE)
            var_dlg.CenterOnScreen()
            if var_dlg.ShowModal() != wx.ID_OK:
                var_dlg.Destroy()
                raise Exception(
                    'Local G maps cannot be created without ID variable.')
            field_name = var_dlg.GetStringSelection()
            var_dlg.Destroy()

            weight_dlg = SelectWeightDlg(self.main, self.main.dialog_res)
            if weight_dlg.ShowModal() != wx.ID_OK:
                weight_dlg.Destroy()
                raise Exception(
                    'Local G maps cannot be created without spatial weights.')

            weight_path = weight_dlg.GetWeightPath()
            weight_dlg.Destroy()
            if weight_path == None or len(weight_path) <= 0:
                raise Exception('Please select a valid weights file.')
            self.weight = pysal.open(weight_path).read()

            b_gstar, b_binary = choose_local_g_settings(self)
            map_type = 'Gi*' if b_gstar else 'Gi'
            add_type = 'binary' if b_binary else 'row-standardized'
            self.parentFrame.SetTitle('Local G Map (%s,%s)-%s' %
                                      (map_type, add_type, layer.name))

            y = np.array(dbf.by_col(field_name))

            if b_binary == False:
                lg = pysal.esda.getisord.G_Local(y, self.weight, star=b_gstar)
            else:
                lg = pysal.esda.getisord.G_Local(y,
                                                 self.weight,
                                                 star=b_gstar,
                                                 transform='B')
            self.gstar_p = lg.p_sim
            self.gstar_z = lg.Zs

            self.siglevel = 0.05
            # 0 not significant, 6 significant change
            not_sig = list(np.where(self.gstar_p > self.siglevel)[0])
            sig = set(np.where(self.gstar_p <= self.siglevel)[0])
            hotspots = list(
                sig.intersection(set(np.where(self.gstar_z >= 0)[0])))
            coldspots = list(
                sig.intersection(set(np.where(self.gstar_z < 0)[0])))
            id_groups = [not_sig, hotspots, coldspots]

            # default color schema for Gi*
            self.HH_color = stars.LISA_HH_COLOR
            self.LL_color = stars.LISA_LL_COLOR
            self.NOT_SIG_color = stars.LISA_NOT_SIG_COLOR
            #self.OBSOLETE_color = stars.LISA_OBSOLETE_COLOR
            color_group = [self.NOT_SIG_color, self.HH_color, self.LL_color]
            label_group = ["Not Significant", "High-High", "Low-Low"]
            self.color_schema_dict[layer.name] = ColorSchema(
                color_group, label_group)

            self.draw_layers[layer].set_edge_color(
                stars.DEFAULT_MAP_EDGE_COLOR)
            self.draw_layers[layer].set_data_group(id_groups)
            self.draw_layers[layer].set_fill_color_group(color_group)

        except Exception as err:
            self.ShowMsgBox(str(err.message))
            self.UnRegister()
            self.parentFrame.Close(True)
            return None
예제 #5
0
    def __init__(self,parent, layers, **kwargs):
        ShapeMap.__init__(self,parent,layers)
        
        try:
            self.point_layer  = self.layers[0]
            #self.bg_layer     = kwargs["background"]
            self.cell_size    = kwargs["cell_size"]
            self.bandwidth    = kwargs["bandwidth"]
            self.kernel       = kwargs["kernel"]
            self.color_band   = kwargs["color_band"]
            self.opaque       = kwargs["opaque"]
            self.bufferWidth, self.bufferHeight = kwargs["size"]
            self.points = self.point_layer.shape_objects
            self.extent = self.point_layer.extent
            self.view   = View2ScreenTransform(
                self.extent, 
                self.bufferWidth, 
                self.bufferHeight
                )
            
            if kwargs.has_key("query_points"):
                self.query_points = kwargs["query_points"]
            else:
                self.query_points = range(len(self.points))
               
            """
            if self.bg_layer: 
                self.layers.append(self.bg_layer)
            """
            
            if len(self.query_points) < len(self.points):
                id_group         = [self.query_points]
                color_group      = [self.color_schema_dict[self.point_layer.name].colors[0]]
                edge_color_group = [self.color_schema_dict[self.point_layer.name].edge_color]
                """
                non_query_points = list(set(range(len(self.points))) - set(self.query_points))
                id_group.append(non_query_points)
                color_group.append(wx.Colour(255,255,255,0))
                edge_color_group.append(wx.Colour(255,255,255,0))
                """
                self.draw_layers[self.point_layer].set_data_group(id_group)
                self.draw_layers[self.point_layer].set_fill_color_group(color_group)
                self.draw_layers[self.point_layer].set_edge_color_group(edge_color_group)
            
            # setup gradient color
            self.gradient_color = GradientColor(self.color_band)
            # for tree node
            self.color_schema_dict["Density Map"] = GradientColorSchema(self.color_band)
            self.isHideDensityMap = False
            # for export gif
            self.img_array_rgb = None
            
            self.isResizing = False
            self.cells_Updated = False
            self.bmp = None
           
            self.setup_densityMap()
            self.createDensityMap()
           
            # dummy Layer for density map
            self.layer_seq_list = []
            self.layer_seq_list.insert(0,"Density Map")
            self.layer_name_list.insert(0,"Density Map")
            
        except Exception as err:
            self.ShowMsgBox("""Density map could not be created. Please choose/input valid parameters.
            
Details: """ + str(err.message))
            self.UnRegister()
            self.parentFrame.Close(True)
            return None
예제 #6
0
    def __init__(self, parent, layers, **kwargs):
        ShapeMap.__init__(self, parent, layers)

        try:
            self.point_layer = self.layers[0]
            #self.bg_layer     = kwargs["background"]
            self.cell_size = kwargs["cell_size"]
            self.bandwidth = kwargs["bandwidth"]
            self.kernel = kwargs["kernel"]
            self.color_band = kwargs["color_band"]
            self.opaque = kwargs["opaque"]
            self.bufferWidth, self.bufferHeight = kwargs["size"]
            self.points = self.point_layer.shape_objects
            self.extent = self.point_layer.extent
            self.view = View2ScreenTransform(self.extent, self.bufferWidth,
                                             self.bufferHeight)

            if kwargs.has_key("query_points"):
                self.query_points = kwargs["query_points"]
            else:
                self.query_points = range(len(self.points))
            """
            if self.bg_layer: 
                self.layers.append(self.bg_layer)
            """

            if len(self.query_points) < len(self.points):
                id_group = [self.query_points]
                color_group = [
                    self.color_schema_dict[self.point_layer.name].colors[0]
                ]
                edge_color_group = [
                    self.color_schema_dict[self.point_layer.name].edge_color
                ]
                """
                non_query_points = list(set(range(len(self.points))) - set(self.query_points))
                id_group.append(non_query_points)
                color_group.append(wx.Colour(255,255,255,0))
                edge_color_group.append(wx.Colour(255,255,255,0))
                """
                self.draw_layers[self.point_layer].set_data_group(id_group)
                self.draw_layers[self.point_layer].set_fill_color_group(
                    color_group)
                self.draw_layers[self.point_layer].set_edge_color_group(
                    edge_color_group)

            # setup gradient color
            self.gradient_color = GradientColor(self.color_band)
            # for tree node
            self.color_schema_dict["Density Map"] = GradientColorSchema(
                self.color_band)
            self.isHideDensityMap = False
            # for export gif
            self.img_array_rgb = None

            self.isResizing = False
            self.cells_Updated = False
            self.bmp = None

            self.setup_densityMap()
            self.createDensityMap()

            # dummy Layer for density map
            self.layer_seq_list = []
            self.layer_seq_list.insert(0, "Density Map")
            self.layer_name_list.insert(0, "Density Map")

        except Exception as err:
            self.ShowMsgBox(
                """Density map could not be created. Please choose/input valid parameters.
            
Details: """ + str(err.message))
            self.UnRegister()
            self.parentFrame.Close(True)
            return None
예제 #7
0
    def __init__(self, parent, layers, **kwargs):
        ShapeMap.__init__(self, parent, layers)
        try:
            # setup point layer color to white
            self.bufferWidth, self.bufferHeight = kwargs["size"]
            self.date_field = kwargs["date_field"]

            self.parent = parent
            layer = layers[0]
            self.layer = layer
            self.layers = layers

            self.extent = self.layer.extent
            self.view = View2ScreenTransform(self.extent,
                                             self.bufferWidth - 500,
                                             self.bufferHeight - 150,
                                             offset_x=500,
                                             offset_y=150)

            self.isDynamic = False
            self.all_date = self.layer.dbf.by_col(self.date_field,
                                                  ctype='datetime')
            self.start_date = min(self.all_date)
            self.end_date = max(self.all_date)
            self.gradient_color = ColorBrewer()
            #self.gradient_color.set_colorschema(self.gradient_color.RdYlGn6, reverse=True)
            self.gradient_color.set_colorschema(self.gradient_color.BuGn9,
                                                reverse=False)

            if not isinstance(self.start_date, datetime.date):
                raise Exception(
                    "Please select a DateTime field to create Calendar Map!")

            # variables
            self.weekday_list = [
                'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'
            ]
            self.mt_text_list = [
                'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
                'Oct', 'Nov', 'Dec'
            ]
            self.mt_text_list_full = [
                'January', 'Febuary', 'March', 'April', 'May', 'June', 'July',
                'August', 'September', 'October', 'November', 'December'
            ]
            self.start_year = self.start_date.year
            self.start_month = self.start_date.month
            self.end_year = self.end_date.year
            self.end_month = self.end_date.month

            self.selected_day = 0
            self.selected_year = 0
            self.selected_month = self.start_month - 1
            self.num_years = self.end_year - self.start_year + 1
            self.current_date = self.start_date

            self.year_histogram = [False for i in range(self.num_years)]
            self.month_histogram = [False for i in range(12)]

            self.data_min, self.data_max = self.parseData()
            self.selected_obj_ids = []

        except Exception as err:
            self.ShowMsgBox(
                """Calendar map could not be created. Please choose a valid datetime variable.

Details: """ + str(err.message))
            self.UnRegister()
            self.parentFrame.Close(True)
            return None
예제 #8
0
파일: LisaMap.py 프로젝트: GeoDaCenter/CAST
 def __init__(self, parent, layers, **kwargs):
     ShapeMap.__init__(self,parent, layers)
    
     try:
         layer = layers[0]
         dbf = layer.dbf
         field_name = ''
         weight_path = ''
        
         # let user choose weight_path and field_name
         var_list = dbf.header
         var_dlg = wx.SingleChoiceDialog(self, "Select variable for LISA","LISA Map", var_list, wx.CHOICEDLG_STYLE)
         var_dlg.CenterOnScreen()
         if var_dlg.ShowModal() != wx.ID_OK:
             var_dlg.Destroy()
             raise Exception('LISA maps cannot be created without ID variable.')
         field_name = var_dlg.GetStringSelection()
         var_dlg.Destroy()
         
         weight_dlg = SelectWeightDlg(self.main,self.main.dialog_res)
         if weight_dlg.ShowModal() != wx.ID_OK:
             weight_dlg.Destroy()
             raise Exception('LISA maps cannot be created without spatial weights.')
         
         weight_path = weight_dlg.GetWeightPath()
         weight_dlg.Destroy()
         if weight_path == None or len(weight_path) <=0:
             raise Exception('Please select a valid weights file.')
         
         self.siglevel = 0.05
         self.parentFrame.SetTitle('LISA - %s(%s)'% (layer.name,field_name))
         self.draw_layers[layer].set_edge_color(stars.DEFAULT_MAP_EDGE_COLOR)
         
         data = np.array(dbf.by_col(field_name))
         id_groups = self.process_LISA(self,data, weight_path)
         
         # default color schema
         color_group =[
             stars.LISA_NOT_SIG_COLOR, 
             stars.LISA_HH_COLOR,
             stars.LISA_LL_COLOR, 
             stars.LISA_LH_COLOR,
             stars.LISA_HL_COLOR, 
             stars.LISA_OBSOLETE_COLOR
             ]
         label_group = [
             "Not Significant",
             "High-High",
             "Low-Low",
             "Low-High",
             "High-Low",
             "Neighborless"
             ]
         self.color_schema_dict[layer.name] = ColorSchema(color_group,label_group)
         #self.draw_layers[layer].set_edge_color(stars.LISA_MAP_EDGE_COLOR)
         self.draw_layers[layer].set_data_group(id_groups)
         self.draw_layers[layer].set_fill_color_group(color_group)
         
     except Exception as err:
         self.ShowMsgBox(str(err.message))
         self.UnRegister()
         self.parentFrame.Close(True)
         return None
예제 #9
0
 def __init__(self, parent, layers, **kwargs):
     ShapeMap.__init__(self,parent, layers)
    
     try:
         layer = layers[0]
         dbf = layer.dbf
         field_name = ''
         weight_path = ''
        
         # let user choose weight_path and field_name
         var_list = dbf.header
         #var_dlg = VariableSelDialog(self,var_list,bDisable2nd=True)
         var_dlg = wx.SingleChoiceDialog(self, "Select variable for LISA","LISA Map", var_list, wx.CHOICEDLG_STYLE)
         var_dlg.CenterOnScreen()
         if var_dlg.ShowModal() != wx.ID_OK:
             var_dlg.Destroy()
             raise Exception('Local G maps cannot be created without ID variable.')
         field_name = var_dlg.GetStringSelection()
         var_dlg.Destroy()
         
         weight_dlg = SelectWeightDlg(self.main,self.main.dialog_res)
         if weight_dlg.ShowModal() != wx.ID_OK:
             weight_dlg.Destroy()
             raise Exception('Local G maps cannot be created without spatial weights.')
         
         weight_path = weight_dlg.GetWeightPath()
         weight_dlg.Destroy()
         if weight_path == None or len(weight_path) <=0:
             raise Exception('Please select a valid weights file.')
         self.weight = pysal.open(weight_path).read()
         
         
         b_gstar, b_binary = choose_local_g_settings(self)
         map_type = 'Gi*' if b_gstar else 'Gi'
         add_type = 'binary' if b_binary else 'row-standardized'
         self.parentFrame.SetTitle('Local G Map (%s,%s)-%s' % (map_type,add_type,layer.name))
         
         y = np.array(dbf.by_col(field_name))
         
         if b_binary == False:
             lg = pysal.esda.getisord.G_Local(y,self.weight,star=b_gstar)
         else:
             lg = pysal.esda.getisord.G_Local(y,self.weight,star=b_gstar,transform='B')
         self.gstar_p   = lg.p_sim
         self.gstar_z = lg.Zs
         
         self.siglevel = 0.05
         # 0 not significant, 6 significant change
         not_sig = list(np.where(self.gstar_p>self.siglevel)[0])
         sig     = set(np.where(self.gstar_p<=self.siglevel)[0])
         hotspots = list(sig.intersection(set(np.where(self.gstar_z>=0)[0])) )
         coldspots = list(sig.intersection(set(np.where(self.gstar_z<0)[0])) )
         id_groups = [not_sig,hotspots,coldspots]
         
         # default color schema for Gi*
         self.HH_color = stars.LISA_HH_COLOR
         self.LL_color = stars.LISA_LL_COLOR
         self.NOT_SIG_color = stars.LISA_NOT_SIG_COLOR
         #self.OBSOLETE_color = stars.LISA_OBSOLETE_COLOR
         color_group =[self.NOT_SIG_color,self.HH_color,self.LL_color]
         label_group = ["Not Significant","High-High","Low-Low"]
         self.color_schema_dict[layer.name] = ColorSchema(color_group,label_group)
         
         self.draw_layers[layer].set_edge_color(stars.DEFAULT_MAP_EDGE_COLOR)
         self.draw_layers[layer].set_data_group(id_groups)
         self.draw_layers[layer].set_fill_color_group(color_group)
         
     except Exception as err:
         self.ShowMsgBox(str(err.message))
         self.UnRegister()
         self.parentFrame.Close(True)
         return None
예제 #10
0
    def __init__(self, parent, layers, **kwargs):
        ShapeMap.__init__(self,parent, layers)
        try:
            # setup point layer color to white
            self.bufferWidth, self.bufferHeight = kwargs["size"]
            self.date_field = kwargs["date_field"]
            
            self.parent = parent
            layer = layers[0]
            self.layer = layer
            self.layers = layers
            
            self.extent = self.layer.extent
            self.view   = View2ScreenTransform(
                self.extent, 
                self.bufferWidth - 500, 
                self.bufferHeight - 150,
                offset_x = 500,
                offset_y = 150 
                )
           
            self.isDynamic = False
            self.all_date= self.layer.dbf.by_col(self.date_field,ctype='datetime')
            self.start_date = min(self.all_date)
            self.end_date = max(self.all_date)
            self.gradient_color = ColorBrewer()
            #self.gradient_color.set_colorschema(self.gradient_color.RdYlGn6, reverse=True)
            self.gradient_color.set_colorschema(self.gradient_color.BuGn9, reverse=False)
            
            if not isinstance(self.start_date, datetime.date):
                raise Exception("Please select a DateTime field to create Calendar Map!")
            
            # variables
            self.weekday_list = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun']
            self.mt_text_list = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
            self.mt_text_list_full = ['January','Febuary','March','April','May','June','July',
                                      'August','September','October','November','December']
            self.start_year = self.start_date.year
            self.start_month = self.start_date.month
            self.end_year = self.end_date.year
            self.end_month = self.end_date.month
            
            self.selected_day = 0
            self.selected_year = 0
            self.selected_month = self.start_month - 1 
            self.num_years = self.end_year - self.start_year + 1
            self.current_date = self.start_date
            
            self.year_histogram = [False for i in range(self.num_years)]
            self.month_histogram = [False for i in range(12)]
            
            self.data_min,self.data_max = self.parseData()
            self.selected_obj_ids = []
            
        except Exception as err:
            self.ShowMsgBox("""Calendar map could not be created. Please choose a valid datetime variable.

Details: """ + str(err.message))
            self.UnRegister()
            self.parentFrame.Close(True)
            return None