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)
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()
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()