Ejemplo n.º 1
0
    def test_point_from_latlng(self):
        gmaps = GoogleMaps(settings.GOOGLEMAPS_API_KEY)
        latlng = gmaps.address_to_latlng(u'Jose javier Diaz 440, cordoba, argentina', )
        point=None
        try:
            point =  MaapPoint(geom=Point(latlng).wkt)
            point.save()            
        except Exception, e:

            self.assertIsNotNone(point, msg=e)
Ejemplo n.º 2
0
    def xls_to_orm(self, columns=None):
        
        row_excluded = []
        
        file = self.attach

        errors = []

        #se seleccionan las columnas segun la decision del usuario. En caso de no elegir al menos una en particular el sistema importa la totalidad de las columnas    
        if columns:
            columns = self.column_set.filter(pk__in=columns)
        else:
            columns = self.column_set.all()

        self.delete_old_values()
        src = self.open_source()

        for column in columns:
            #Para cada columna que el usuario haya seleccionado para importar, se recorren todos sus valores creando objetos del tipo ValueX donde X es el tipo del valor que se esta recorriendo
            
            col_tp = src.col_types(column.csv_index,start_rowx=1)

            for i, val in enumerate(src.col_values(column.csv_index,start_rowx=1)):
                #Para cada valor asociado a la columna seleccionada (column) se crea una instancia del tipo Valor               
                if col_tp[i] == 1 and column.data_type=='point':
                    value = ValuePoint()
                elif col_tp[i] == 1 and column.data_type=='area':
                    value = ValueArea()
                elif col_tp[i] == 1 and column.data_type!='area' and column.data_type!='point':
                    value = ValueText()
                elif col_tp[i] == 2:
                    value = ValueFloat()
                elif col_tp[i] == 3:
                    value = ValueDate()
                elif col_tp[i] == 4:
                    value = ValueBool()

                value.value = val
                    
                value.data_type = col_tp[i]
                value.column = column

                
                try:
                    row_obj = Row.objects.filter(datasource=self,csv_index=i+1).first()
                except:
                    #Se crea una nueva instancia de fila
                    row_obj = Row(datasource=self,csv_index=i+1)
                    row_obj.save()

                value.row = row_obj

                value.save()

                search_term = slugify(value.value)
                self.geopositionated = False
                    
                #SI LOS DATOS SON GEOPOSICIONADOS
                if column.data_type == 'point':
                    gmaps = GoogleMaps(settings.GOOGLEMAPS_API_KEY)
                    self.geopositionated = True
                        
                    #se debe hacer primero una consulta a la base local
                    results = MaapPoint.objects.filter(slug=search_term)

                    if len(results) >= 1:
                        #En este caso quiere decir que la consulta a la base local fue exitosa

                        for point in results:
                            value.point = point
                            value.map_url = point.static_url
                            value.save()
    
                    if len(results) < 1: 
                        #Este caso quiere decir que la consulta a la base local no fue exitosa y por lo tanto se procede a buscarlo via web. Aca se debe controlar solo el caso que sea unico. Ahora esta asi porque hay muchos MaapPoint iguales

                        results = gmaps.local_search('%s, cordoba, argentina' %value.value )['responseData']['results']
                        for result in results:
                            latlng = [float(result.get('lng')), float(result.get('lat'))]

                            point =  MaapPoint(
                                geom=Point(latlng).wkt,
                                name=value.value,
                            )
                            
                            point.static_url = result.get('staticMapUrl', None)
                            point.save()
                            value.point = point
                            value.map_url = point.static_url
                            value.save()
                
                #SI LOS DATOS SON GEOPOSICIONADOS                        
                if column.data_type == 'area':
                    self.geopositionated = True
                    barrio = MaapArea.objects.filter(slug=search_term) 

                    if len(barrio) == 1:
                        value.area = barrio[0]
                        value.save()

        if len(errors) == 0:
            self.is_dirty = False 
            self.save() 
            
            if self.geopositionated:
                values_geo = Value.objects.filter(column__datasource=self,column__has_geodata=True)
                for t in values_geo:
                    qs = Value.objects.filter(column__datasource=self,column__has_geodata=False,row=t.row)        
                    for u in qs:
                        u.area = t.area
                        u.save()

        print errors
        return self.get_absolute_url()
Ejemplo n.º 3
0
    def xls_to_orm(self, columns=None):

        row_excluded = []

        file = self.attach

        errors = []

        #se seleccionan las columnas segun la decision del usuario. En caso de no elegir al menos una en particular el sistema importa la totalidad de las columnas
        if columns:
            columns = self.column_set.filter(pk__in=columns)
        else:
            columns = self.column_set.all()

        self.delete_old_values()
        src = self.open_source()

        for column in columns:
            #Para cada columna que el usuario haya seleccionado para importar, se recorren todos sus valores creando objetos del tipo ValueX donde X es el tipo del valor que se esta recorriendo

            col_tp = src.col_types(column.csv_index, start_rowx=1)

            for i, val in enumerate(
                    src.col_values(column.csv_index, start_rowx=1)):
                #Para cada valor asociado a la columna seleccionada (column) se crea una instancia del tipo Valor
                if col_tp[i] == 1 and column.data_type == 'point':
                    value = ValuePoint()
                elif col_tp[i] == 1 and column.data_type == 'area':
                    value = ValueArea()
                elif col_tp[
                        i] == 1 and column.data_type != 'area' and column.data_type != 'point':
                    value = ValueText()
                elif col_tp[i] == 2:
                    value = ValueFloat()
                elif col_tp[i] == 3:
                    value = ValueDate()
                elif col_tp[i] == 4:
                    value = ValueBool()

                value.value = val

                value.data_type = col_tp[i]
                value.column = column

                try:
                    row_obj = Row.objects.filter(datasource=self,
                                                 csv_index=i + 1).first()
                except:
                    #Se crea una nueva instancia de fila
                    row_obj = Row(datasource=self, csv_index=i + 1)
                    row_obj.save()

                value.row = row_obj

                value.save()

                search_term = slugify(value.value)
                self.geopositionated = False

                #SI LOS DATOS SON GEOPOSICIONADOS
                if column.data_type == 'point':
                    gmaps = GoogleMaps(settings.GOOGLEMAPS_API_KEY)
                    self.geopositionated = True

                    #se debe hacer primero una consulta a la base local
                    results = MaapPoint.objects.filter(slug=search_term)

                    if len(results) >= 1:
                        #En este caso quiere decir que la consulta a la base local fue exitosa

                        for point in results:
                            value.point = point
                            value.map_url = point.static_url
                            value.save()

                    if len(results) < 1:
                        #Este caso quiere decir que la consulta a la base local no fue exitosa y por lo tanto se procede a buscarlo via web. Aca se debe controlar solo el caso que sea unico. Ahora esta asi porque hay muchos MaapPoint iguales

                        results = gmaps.local_search(
                            '%s, cordoba, argentina' %
                            value.value)['responseData']['results']
                        for result in results:
                            latlng = [
                                float(result.get('lng')),
                                float(result.get('lat'))
                            ]

                            point = MaapPoint(
                                geom=Point(latlng).wkt,
                                name=value.value,
                            )

                            point.static_url = result.get('staticMapUrl', None)
                            point.save()
                            value.point = point
                            value.map_url = point.static_url
                            value.save()

                #SI LOS DATOS SON GEOPOSICIONADOS
                if column.data_type == 'area':
                    self.geopositionated = True
                    barrio = MaapArea.objects.filter(slug=search_term)

                    if len(barrio) == 1:
                        value.area = barrio[0]
                        value.save()

        if len(errors) == 0:
            self.is_dirty = False
            self.save()

            if self.geopositionated:
                values_geo = Value.objects.filter(column__datasource=self,
                                                  column__has_geodata=True)
                for t in values_geo:
                    qs = Value.objects.filter(column__datasource=self,
                                              column__has_geodata=False,
                                              row=t.row)
                    for u in qs:
                        u.area = t.area
                        u.save()

        print errors
        return self.get_absolute_url()