Changeset 644582b in observatorio


Ignore:
Timestamp:
Aug 14, 2014, 5:27:11 PM (10 years ago)
Author:
Ing. Roldan Vargas <rvargas@…>
Branches:
master
Children:
ce62ea6
Parents:
75c8054
Message:

se incorpora función de vista que permite consultar las capas en la base de datos para posteriormente mostrarlas en formato GeoJSON

File:
1 edited

Legend:

Unmodified
Added
Removed
  • procesos/apps/geocadena/views.py

    r7c9f979 r644582b  
    1111
    1212## Muestra el autor del script cuando es invocado
     13from django.http import HttpResponse
     14
    1315__author__ = 'Ing. Roldan D. Vargas G. (rvargas@cenditel.gob.ve)'
    1416## Muestra una descripción breve del script
     
    1921from django.template.context import RequestContext
    2022from django.conf import settings
     23from django.db.models.loading import get_model
    2124from pygraphviz import AGraph
     25from djgeojson.serializers import Serializer as GeoJSONSerializer
    2226
    2327from sigesic.unidadecon.identifica.models import Unidad_Economica
     
    179183        en el mapa
    180184    """
    181     grafo = AGraph(settings.PATH + "/tmp/" + usuario + ".dot")
    182185    cadena = []
    183186
    184     nodos = [n for n in grafo.nodes_iter() if n.attr['label'][0] == 'J']
    185 
    186     for c in nodos:
    187         nivel = ""
    188         rif = grafo.get_node(c).attr['label'][0:10]
    189         ue = getUE(rif)
    190 
    191         icono = ''
    192 
    193         if ue:
    194             if grafo.get_node(c).attr['color'] == 'darkgreen':
    195                 icono = '/sig/mapmedia/imgs/markers/mark_center.png'
    196                 #icono = 'http://www.openlayers.org/dev/img/marker-green.png'
    197                 nivel = "C"
    198             elif grafo.get_node(c).attr['color'] == 'yellow':
    199                 icono = '/sig/mapmedia/imgs/markers/mark_down.png'
    200                 #icono = 'http://www.openlayers.org/dev/img/marker-gold.png'
    201                 nivel = "A"
    202             elif grafo.get_node(c).attr['color'] == 'dodgerblue':
    203                 icono = '/sig/mapmedia/imgs/markers/mark_up.png'
    204                 #icono = 'http://www.openlayers.org/dev/img/marker-blue.png'
    205                 nivel = "P"
    206 
    207             nombre = ''
    208             detalles = ''
    209             dir = ''
    210             try:
    211                 if ue.nombre is not None:
    212                     nombre = ue.nombre
    213                 else:
    214                     nombre = ue.razon_social
    215 
     187    try:
     188        grafo = AGraph(settings.PATH + "/tmp/" + usuario + ".dot")
     189
     190        nodos = [n for n in grafo.nodes_iter() if n.attr['label'][0] == 'J']
     191
     192        for c in nodos:
     193            nivel = ""
     194            rif = grafo.get_node(c).attr['label'][0:10]
     195            ue = getUE(rif)
     196
     197            icono = ''
     198
     199            if ue:
     200                if grafo.get_node(c).attr['color'] == 'darkgreen':
     201                    icono = '/sig/mapmedia/imgs/markers/mark_center.png'
     202                    #icono = 'http://www.openlayers.org/dev/img/marker-green.png'
     203                    nivel = "C"
     204                elif grafo.get_node(c).attr['color'] == 'yellow':
     205                    icono = '/sig/mapmedia/imgs/markers/mark_down.png'
     206                    #icono = 'http://www.openlayers.org/dev/img/marker-gold.png'
     207                    nivel = "A"
     208                elif grafo.get_node(c).attr['color'] == 'dodgerblue':
     209                    icono = '/sig/mapmedia/imgs/markers/mark_up.png'
     210                    #icono = 'http://www.openlayers.org/dev/img/marker-blue.png'
     211                    nivel = "P"
     212
     213                nombre = ''
     214                detalles = ''
     215                dir = ''
    216216                try:
    217                     if not ue.ciudad is None:
    218                         detalles += 'Ciudad: %s<br>' % ue.ciudad
    219                     if not ue.dir1 is None:
    220                         dir += "%s. " % ue.dir1
    221                     if not ue.dir2 is None:
    222                         dir += "%s. " % ue.dir2
    223                     if not ue.dir3 is None:
    224                         dir += "%s. " % ue.dir3
    225                     if not ue.dir4 is None:
    226                         dir += "%s. " % ue.dir4
     217                    if ue.nombre is not None:
     218                        nombre = ue.nombre
     219                    else:
     220                        nombre = ue.razon_social
     221
     222                    try:
     223                        if not ue.ciudad is None:
     224                            detalles += 'Ciudad: %s<br>' % ue.ciudad
     225                        if not ue.dir1 is None:
     226                            dir += "%s. " % ue.dir1
     227                        if not ue.dir2 is None:
     228                            dir += "%s. " % ue.dir2
     229                        if not ue.dir3 is None:
     230                            dir += "%s. " % ue.dir3
     231                        if not ue.dir4 is None:
     232                            dir += "%s. " % ue.dir4
     233                    except AttributeError:
     234                        dir += ue.direccion
     235
    227236                except AttributeError:
     237                    try:
     238                        nombre = ue.nombreestablecimiento
     239                    except AttributeError:
     240                        nombre = ue.nombre_comercial
    228241                    dir += ue.direccion
    229242
    230             except AttributeError:
     243                if dir.__len__() > 11:
     244                    detalles = dir
     245
     246                coordxy = getCoordenadas(ue)
     247
    231248                try:
    232                     nombre = ue.nombreestablecimiento
     249                    estado = ue.parroquia.municipio.entidad
     250                    municipio = ue.parroquia.municipio
     251                    parroquia = ue.parroquia
    233252                except AttributeError:
    234                     nombre = ue.nombre_comercial
    235                 dir += ue.direccion
    236 
    237             if dir.__len__() > 11:
    238                 detalles = dir
    239 
    240             coordxy = getCoordenadas(ue)
    241 
    242             try:
    243                 estado = ue.parroquia.municipio.entidad
    244                 municipio = ue.parroquia.municipio
    245                 parroquia = ue.parroquia
    246             except AttributeError:
    247                 estado = ''
    248                 municipio = ''
    249                 parroquia = ''
    250 
    251             produce = ""
    252             consume = ""
    253             conn = [g for g in grafo.edges() if c in g]
    254             # Verifica la producción e insumos de las Unidades Económicas
    255             for cx in conn:
    256                 if cx[0] == c and cx[1].attr['label'][0] != "J" and cx[1].attr['label'].split("\\n")[1] != "":
    257                     produce += "<li>%s</li>" % cx[1].attr['label'].split("\\n")[1]
    258                 elif cx[1] == c and cx[0].attr['label'][0] != "J" and cx[0].attr['label'].split("\\n")[1] != "":
    259                     consume += "<li>%s</li>" % cx[0].attr['label'].split("\\n")[1]
    260 
    261             if produce != "":
    262                 produce = "<ul style='list-style-type: circle;'>%s</ul>" % produce
    263             if consume != "":
    264                 consume = "<ul style='list-style-type: circle;'>%s</ul>" % consume
    265 
    266             if coordxy:
    267                 cadena.append({'lon': coordxy[0],
    268                                'lat': coordxy[1],
    269                                'icono': icono,
    270                                'uerif': grafo.get_node(c).attr['label'][0:10],
    271                                'uenombre': nombre,
    272                                'uedetalles': detalles,
    273                                'ueproduce': produce,
    274                                'ueconsume': consume,
    275                                'ueedo': estado,
    276                                'uemun': municipio,
    277                                'ueparr': parroquia,
    278                                'nivel': nivel})
     253                    estado = ''
     254                    municipio = ''
     255                    parroquia = ''
     256
     257                produce = ""
     258                consume = ""
     259                conn = [g for g in grafo.edges() if c in g]
     260                # Verifica la producción e insumos de las Unidades Económicas
     261                for cx in conn:
     262                    if cx[0] == c and cx[1].attr['label'][0] != "J" and cx[1].attr['label'].split("\\n")[1] != "":
     263                        produce += "<li>%s</li>" % cx[1].attr['label'].split("\\n")[1]
     264                    elif cx[1] == c and cx[0].attr['label'][0] != "J" and cx[0].attr['label'].split("\\n")[1] != "":
     265                        consume += "<li>%s</li>" % cx[0].attr['label'].split("\\n")[1]
     266
     267                if produce != "":
     268                    produce = "<ul style='list-style-type: circle;'>%s</ul>" % produce
     269                if consume != "":
     270                    consume = "<ul style='list-style-type: circle;'>%s</ul>" % consume
     271
     272                if coordxy:
     273                    cadena.append({'lon': coordxy[0],
     274                                   'lat': coordxy[1],
     275                                   'icono': icono,
     276                                   'uerif': grafo.get_node(c).attr['label'][0:10],
     277                                   'uenombre': nombre,
     278                                   'uedetalles': detalles,
     279                                   'ueproduce': produce,
     280                                   'ueconsume': consume,
     281                                   'ueedo': estado,
     282                                   'uemun': municipio,
     283                                   'ueparr': parroquia,
     284                                   'nivel': nivel})
     285    except Exception, e:
     286        pass
    279287
    280288    return cadena
     
    294302    @return Un diccionario con los puntos de enlace entrea las distintas Unidades Económicas a conectar
    295303    """
    296     grafo = AGraph(settings.PATH + "/tmp/" + usuario + ".dot")
    297304    enlace = []
    298     nodos = [0]
    299     P = True
    300     U = {}
    301 
    302     while P:
    303         sP = []
    304         subNodos = []
    305         for n in nodos:
    306             nodosRel = []
    307             P = grafo.predecessors(n)
    308             for pred in P:
    309                 if grafo.get_node(pred).attr['shape'] == "box" and grafo.predecessors(pred):
    310                     for i in grafo.predecessors(pred):
    311                         if grafo.get_node(i).attr["shape"] != "ellipse":
    312                             nodosRel.append(i)
    313                             subNodos.append(i)
    314             if nodosRel:
    315                 U[n] = nodosRel
    316 
    317         for x in U:
    318             for y in U[x]:
    319                 sP.append(y)
    320         nodos = sP
    321         if nodos is None:
    322             P = []
    323 
    324     for x in U:
    325         rif_ini = grafo.get_node(x).attr['label'][:10]
    326         ue_ini = getUE(rif_ini)
    327         if ue_ini:
    328             coordxy_ini = getCoordenadas(ue_ini)
    329 
    330         for y in U[x]:
    331             rif_fin = grafo.get_node(y).attr['label'][:10]
    332             ue_fin = getUE(rif_fin)
    333             if ue_fin:
    334                 coordxy_fin = getCoordenadas(ue_fin)
    335                 if not coordxy_fin:
    336                     print ue_fin.rif
    337 
    338                 enlace.append({
    339                     'ini_x': coordxy_ini[0],
    340                     'ini_y': coordxy_ini[1],
    341                     'fin_x': coordxy_fin[0],
    342                     'fin_y': coordxy_fin[1],
    343                     'nivel': 'up',
    344                     'capa': str(rif_ini) + " - " + str(rif_fin),
    345                 })
    346 
    347     nodos = [0]
    348     S = True
    349     U = {}
    350 
    351     while S:
    352         sS = []
    353         subNodos = []
    354         for n in nodos:
    355             nodosRel = []
    356             S = grafo.successors(n)
    357             for suc in S:
    358                 if grafo.get_node(suc).attr['shape'] == "box" and grafo.successors(suc):
    359                     for i in grafo.successors(suc):
    360                         if grafo.get_node(i).attr["shape"] != "ellipse":
    361                             nodosRel.append(i)
    362                             subNodos.append(i)
    363             if nodosRel:
    364                 U[n] = nodosRel
    365 
    366         for x in U:
    367             for y in U[x]:
    368                 sS.append(y)
    369         nodos = sS
    370         if nodos is None:
    371             S = []
    372 
    373     for x in U:
    374         rif_ini = grafo.get_node(x).attr['label'][:10]
    375         ue_ini = getUE(rif_ini)
    376         if ue_ini:
    377             coordxy_ini = getCoordenadas(ue_ini)
    378 
    379         for y in U[x]:
    380             rif_fin = grafo.get_node(y).attr['label'][:10]
    381             ue_fin = getUE(rif_fin)
    382             if ue_fin:
    383                 coordxy_fin = getCoordenadas(ue_fin)
    384                 enlace.append({
    385                     'ini_x': coordxy_ini[0],
    386                     'ini_y': coordxy_ini[1],
    387                     'fin_x': coordxy_fin[0],
    388                     'fin_y': coordxy_fin[1],
    389                     'nivel': 'down',
    390                     'capa': str(rif_ini) + " - " + str(rif_fin),
    391                 })
     305
     306    if getNodos(usuario):
     307        try:
     308            grafo = AGraph(settings.PATH + "/tmp/" + usuario + ".dot")
     309
     310            nodos = [0]
     311            P = True
     312            U = {}
     313
     314            while P:
     315                sP = []
     316                subNodos = []
     317                for n in nodos:
     318                    nodosRel = []
     319                    P = grafo.predecessors(n)
     320                    for pred in P:
     321                        if grafo.get_node(pred).attr['shape'] == "box" and grafo.predecessors(pred):
     322                            for i in grafo.predecessors(pred):
     323                                if grafo.get_node(i).attr["shape"] != "ellipse":
     324                                    nodosRel.append(i)
     325                                    subNodos.append(i)
     326                    if nodosRel:
     327                        U[n] = nodosRel
     328
     329                for x in U:
     330                    for y in U[x]:
     331                        sP.append(y)
     332                nodos = sP
     333                if nodos is None:
     334                    P = []
     335
     336            for x in U:
     337                rif_ini = grafo.get_node(x).attr['label'][:10]
     338                ue_ini = getUE(rif_ini)
     339                if ue_ini:
     340                    coordxy_ini = getCoordenadas(ue_ini)
     341
     342                for y in U[x]:
     343                    rif_fin = grafo.get_node(y).attr['label'][:10]
     344                    ue_fin = getUE(rif_fin)
     345                    if ue_fin:
     346                        coordxy_fin = getCoordenadas(ue_fin)
     347                        if not coordxy_fin:
     348                            print ue_fin.rif
     349
     350                        enlace.append({
     351                            'ini_x': coordxy_ini[0],
     352                            'ini_y': coordxy_ini[1],
     353                            'fin_x': coordxy_fin[0],
     354                            'fin_y': coordxy_fin[1],
     355                            'nivel': 'up',
     356                            'capa': str(rif_ini) + " - " + str(rif_fin),
     357                        })
     358
     359            nodos = [0]
     360            S = True
     361            U = {}
     362
     363            while S:
     364                sS = []
     365                subNodos = []
     366                for n in nodos:
     367                    nodosRel = []
     368                    S = grafo.successors(n)
     369                    for suc in S:
     370                        if grafo.get_node(suc).attr['shape'] == "box" and grafo.successors(suc):
     371                            for i in grafo.successors(suc):
     372                                if grafo.get_node(i).attr["shape"] != "ellipse":
     373                                    nodosRel.append(i)
     374                                    subNodos.append(i)
     375                    if nodosRel:
     376                        U[n] = nodosRel
     377
     378                for x in U:
     379                    for y in U[x]:
     380                        sS.append(y)
     381                nodos = sS
     382                if nodos is None:
     383                    S = []
     384
     385            for x in U:
     386                rif_ini = grafo.get_node(x).attr['label'][:10]
     387                ue_ini = getUE(rif_ini)
     388                if ue_ini:
     389                    coordxy_ini = getCoordenadas(ue_ini)
     390
     391                for y in U[x]:
     392                    rif_fin = grafo.get_node(y).attr['label'][:10]
     393                    ue_fin = getUE(rif_fin)
     394                    if ue_fin:
     395                        coordxy_fin = getCoordenadas(ue_fin)
     396                        enlace.append({
     397                            'ini_x': coordxy_ini[0],
     398                            'ini_y': coordxy_ini[1],
     399                            'fin_x': coordxy_fin[0],
     400                            'fin_y': coordxy_fin[1],
     401                            'nivel': 'down',
     402                            'capa': str(rif_ini) + " - " + str(rif_fin),
     403                        })
     404        except Exception, e:
     405            pass
    392406
    393407    return enlace
    394408
    395409
    396 @login_required
     410@login_required()
    397411def geoCadena(request):
    398412    """!
     
    411425                                                 'debug': settings.DEBUG},
    412426                              context_instance=RequestContext(request))
     427
     428
     429@login_required()
     430def json(request):
     431    capa = request.GET.get('capa', None)
     432    field = request.GET.get('field', None)
     433    cod = request.GET.get('cod', None)
     434
     435    if capa and field:
     436        tabla = get_model('geocadena', capa)
     437        qs = tabla.objects.all()
     438        if cod:
     439            qs = tabla.objects.filter(pk=cod)
     440
     441        return HttpResponse(str(GeoJSONSerializer().serialize(qs, use_natural_keys=True,
     442                                                              properties={'field_name': field})),
     443                            content_type="text/plain")
     444
     445    return HttpResponse(content_type='text/plain')
Note: See TracChangeset for help on using the changeset viewer.