Changeset 0a38dfe in osmose-frontend


Ignore:
Timestamp:
Oct 26, 2012 8:53:49 PM (5 years ago)
Author:
Jocelyn Jaubert <jocelyn.jaubert@…>
Branches:
master
Children:
6344f27
Parents:
01f9ce4
git-author:
Frédéric Rodrigo <frodrigo@…> (20/10/2012 17:28:57)
git-committer:
Jocelyn Jaubert <jocelyn.jaubert@…> (26/10/2012 20:53:49)
Message:

Split markers load into marker only+popup

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • map.py

    r01f9ce4 r0a38dfe  
    132132    response.set_cookie('lastItem', request.params.item, expires=expires, path=path) 
    133133 
    134     data_type = { "N": "node", "W": "way", "R": "relation", "I": "infos"} 
    135  
    136134    if (not user) and (not source) and (zoom < 6): 
    137135        return 
     136 
     137    sqlbase  = """ 
     138    SELECT 
     139        marker.id, 
     140        marker.item, 
     141        marker.lat, 
     142        marker.lon 
     143    FROM 
     144        marker 
     145        JOIN dynpoi_class ON 
     146            marker.source = dynpoi_class.source AND 
     147            marker.class = dynpoi_class.class 
     148        JOIN dynpoi_update_last ON 
     149            marker.source = dynpoi_update_last.source 
     150        JOIN dynpoi_item ON 
     151            marker.item = dynpoi_item.item 
     152    WHERE 
     153        %s AND 
     154        (marker.lat BETWEEN %d AND %d) AND (marker.lon BETWEEN %d AND %d) AND 
     155        dynpoi_update_last.timestamp > (now() - interval '3 months') 
     156    ORDER BY 
     157        point(marker.lat, marker.lon) <-> point(%d, %d) 
     158    LIMIT 200 
     159    """ 
     160 
     161    if source: 
     162        sources = source.split(",") 
     163        source2 = [] 
     164        for source in sources: 
     165            source = source.split("-") 
     166            if len(source)==1: 
     167                source2.append("(marker.source=%d)"%int(source[0])) 
     168            else: 
     169                source2.append("(marker.source=%d AND marker.class=%d)"%(int(source[0]), int(source[1]))) 
     170        sources2 = " OR ".join(source2) 
     171        where = "(%s)" % sources2 
     172    elif err_id: 
     173        where = "(marker.item IN (%s))" % err_id 
     174    else: 
     175        where = "1=1" 
     176 
     177    if level: 
     178        where += " AND dynpoi_class.level IN (%s)" % level 
     179 
     180    if user: 
     181        where += " AND (" 
     182        s = [] 
     183        for f in xrange(3): 
     184            s.append("elem%d.username = '%s'" % (f, user)) 
     185        where += " OR ".join(s) 
     186        where += ")" 
     187 
     188    db.execute(sqlbase % (where, minlat, maxlat, minlon, maxlon, lat, lon)) # FIXME pas de % 
     189    results = db.fetchall() 
     190 
     191    out = ["\t".join(["lat", "lon", "marker_id", "icon", "iconSize", "iconOffset", "html"])] 
     192    for res in results: 
     193        lat       = str(float(res["lat"])/1000000) 
     194        lon       = str(float(res["lon"])/1000000) 
     195        error_id  = res["id"] 
     196        item      = res["item"] or 0 
     197        marker = "../images/markers/marker-b-%d.png" % (res["item"]) 
     198        out.append("\t".join([lat, lon, str(error_id), marker, "17,33", "-8,-33", "plop"]).encode("utf8")) 
     199 
     200    response.content_type = "text/plain; charset=utf-8" 
     201    return "\n".join(out) 
     202 
     203 
     204@route('/map/marker/<id:int>') 
     205def markers(db, lang, id): 
     206    data_type = { "N": "node", "W": "way", "R": "relation", "I": "infos"} 
    138207 
    139208    # TRANSLATORS: link to tooltip help 
     
    199268    sqlbase += """ 
    200269    WHERE 
    201         %s AND %s AND 
    202         dynpoi_update_last.timestamp > (now() - interval '3 months') 
    203     ORDER BY 
    204         point(marker.lat, marker.lon) <-> point(%d, %d) 
    205     LIMIT 200 
     270        marker.id = %s 
    206271    """ 
    207272 
    208     if source: 
    209         sources = source.split(",") 
    210         source2 = [] 
    211         for source in sources: 
    212             source = source.split("-") 
    213             if len(source)==1: 
    214                 source2.append("(marker.source=%d)"%int(source[0])) 
    215             else: 
    216                 source2.append("(marker.source=%d AND marker.class=%d)"%(int(source[0]), int(source[1]))) 
    217         sources2 = " OR ".join(source2) 
    218         where = "(%s)" % sources2 
    219     elif err_id: 
    220         where = "(marker.item IN (%s))" % err_id 
    221     else: 
    222         where = "1=1" 
    223  
    224     if level: 
    225         where += " AND dynpoi_class.level IN (%s)" % level 
    226  
    227     if user: 
    228         where += " AND (" 
    229         s = [] 
    230         for f in xrange(3): 
    231             s.append("elem%d.username = '%s'" % (f, user)) 
    232         where += " OR ".join(s) 
    233         where += ")" 
    234  
    235  
    236     ## sql querry 
    237     if bbox: 
    238         lat = (minlat+maxlat) / 2 
    239         lon = (minlon+maxlon) / 2 
    240         bboxsql = ("(marker.lat BETWEEN %d AND %d) AND (marker.lon BETWEEN %d and %d)" % (minlat, maxlat, minlon, maxlon)) 
    241     else: 
    242         bboxsql = "1=1" 
    243  
    244     sql = sqlbase % (where, bboxsql, lat, lon) 
    245     sql = sql.replace("--","+") 
    246  
    247  
    248     db.execute(sql) 
    249     results = db.fetchall() 
    250  
    251     out = ["\t".join(["lat", "lon", "marker_id", "icon", "iconSize", "iconOffset", "html"])] 
     273    db.execute(sqlbase, (id,) ) 
     274    res = db.fetchone() 
    252275 
    253276    translate = utils.translator(lang) 
    254277 
    255     ## print results 
    256     for res in results: 
     278    try: 
    257279        lat       = str(float(res["lat"])/1000000) 
    258280        lon       = str(float(res["lon"])/1000000) 
     
    367389        html += "</div>" 
    368390 
    369         ## 
    370  
    371         marker = "../images/markers/marker-b-%d.png" % (res["item"]) 
    372         out.append("\t".join([lat, lon, str(error_id), marker, "17,33", "-8,-33", html]).encode("utf8")) 
    373  
    374     response.content_type = "text/plain; charset=utf-8" 
    375     return "\n".join(out) 
     391        out = html.encode("utf8") 
     392    except: 
     393        pass 
     394 
     395    return out 
  • static/map/DynPoi.js

    r73e2c35 r0a38dfe  
    315315                this.popup.minSize = new OpenLayers.Size(180, 30); 
    316316                this.popup.maxSize = new OpenLayers.Size(280, 300); 
    317                 map.addPopup(this.popup); 
     317                OpenLayers.Request.GET({ 
     318                    url: 'marker/' + this.popup.feature.data.marker_id, 
     319                    success: function (ajaxRequest) { 
     320                        this.popup.setContentHTML(ajaxRequest.responseText); 
     321                        if (this.popup == this.activePopup) { 
     322                            map.addPopup(this.popup); 
     323                        } 
     324                    }, 
     325                    scope: this 
     326                }); 
    318327            } else { 
    319328                this.popup.toggle(); 
     
    326335    onOutHandler: function (evt) { 
    327336        if (!this.clicked && this.activePopup != null) this.activePopup.hide(); 
     337        this.activePopup = null; 
    328338        OpenLayers.Event.stop(evt); 
    329339    }, 
Note: See TracChangeset for help on using the changeset viewer.