|
30 | 30 |
|
31 | 31 | <script> |
32 | 32 | var map = map.init({lat: 53.814, lon: 55.679, z: 5, update_hash: false}) |
| 33 | +var g_points = [] |
33 | 34 |
|
34 | 35 | function str_replace(x, from, to) |
35 | 36 | { |
|
70 | 71 | } |
71 | 72 | if (data.hqs) |
72 | 73 | { |
| 74 | + let _h = (x) => { |
| 75 | + const a={'пн':'Mo','вт':'Tu','ср':'We','чт':'Th','пт':'Fr','сб':'Sa','вс':'Su'} |
| 76 | + for (let day in a) x = x.replace(new RegExp(day, 'i'), a[day]) |
| 77 | + x = x.replace('открыт ', '') |
| 78 | + x = x.replace(': ', ' ') |
| 79 | + x = x.replace(/–/g, '-') |
| 80 | + x = x.replace(/с /g, '') |
| 81 | + x = x.replace(/ до /g, '-') |
| 82 | + x = x.replace(/,/g, ';') |
| 83 | + return x |
| 84 | + } |
73 | 85 | a = data |
74 | 86 | st += '<h2>'+a.city+'</h2>' |
75 | | - st += 'Адрес: '+data.hqs[0].address |
| 87 | + st += '<br>Адрес: '+data.hqs[0].address |
| 88 | + st += '<br>Телефон: '+data.hqs[0].phone.replace(/[^+0-9]/g, '') |
| 89 | + st += '<br>email: '+data.hqs[0].email |
| 90 | + st += '<br>Часы работы: '+_h(data.hqs[0].hours) |
76 | 91 | st += '<br>'+data.hqs[0].person |
77 | | - st += '<br><br><a href="https://shtab.navalny.com'+data.hqs[0].page+'">официальная страница</a>' |
| 92 | + data.website = 'https://shtab.navalny.com'+data.hqs[0].page |
| 93 | + st += '<br><br><a href="'+data.website+'">официальная страница</a>' |
78 | 94 | st += '<br><hr><small>Данные с сайта <a href="https://shtab.navalny.com" target="_blank">shtab.navalny.com</a>' |
| 95 | + |
| 96 | + // ищем точку OSM для привязки |
| 97 | + if (josm.running) |
| 98 | + { |
| 99 | + var i, a |
| 100 | + var near = function(a, b) { var dlat=dlon=0.001, _=function(x){return x>0?x:-x}; |
| 101 | + if (_(a.lat-b.lat) < dlat && _(a.lon-b.lon) < dlon) return true; return false } |
| 102 | + var d, di, dmin = -1 |
| 103 | + for (i=0; i<g_points.length;i++) |
| 104 | + { |
| 105 | + d = map.distance(g_points[i], data) |
| 106 | + if (d > 10000) continue // ищем точку на расстоянии не более 5км |
| 107 | + if (dmin < 0 || d < dmin) { dmin = d; di = i } |
| 108 | + } |
| 109 | + if (dmin != -1) |
| 110 | + { |
| 111 | + var tags = { |
| 112 | + 'opening_hours': _h(data.hqs[0].hours), |
| 113 | + 'contact:phone': data.hqs[0].phone.replace(/[^+0-9]/g, ''), |
| 114 | + 'contact:website': data.website, |
| 115 | + } |
| 116 | + if (re = data.hqs[0].address.match(/(\d) эт/)) tags['level'] = re[1] |
| 117 | + st += '<br> <a href="'+josm.link_edit(g_points[di], tags)+'" target="josm">Копировать в JOSM</a>' |
| 118 | + st += ' | <a href="'+josm.link_zoom(data)+'" target="josm">Открыть в JOSM</a>' |
| 119 | + L.polyline([data, g_points[di]], {color: 'red'}).addTo(map); |
| 120 | + if (dmin > 20) map.setZoomAround(data, 16) // зумим, если дальше 20 метров |
| 121 | + } |
| 122 | + } |
79 | 123 | } |
80 | 124 | return st; |
81 | 125 | } |
|
94 | 138 | ajax('map.php', function(a){ |
95 | 139 | var i, j |
96 | 140 | var add_point = function(a){ |
97 | | - L.circleMarker([a.coords[1], a.coords[0]], {radius: a.opened?10:5, color: "#55F"}).addTo(map).bindPopup(0, { data: a }) |
| 141 | + a.lat = a.coords[1] |
| 142 | + a.lon = a.coords[0] |
| 143 | + L.circleMarker(a, {radius: a.opened?10:5, color: "#55F"}).addTo(map).bindPopup(0, { data: a }) |
98 | 144 | stat.n++ |
99 | 145 | } |
100 | 146 | for (i in a) |
|
104 | 150 | }) |
105 | 151 | osm.search({'name': 'Штаб Алексея Навального', 'node': true}, function(data){ |
106 | 152 | if (!data.length) return $('info', 'Нет данных') |
| 153 | + g_points = data |
107 | 154 | $('info', 'Данные загружены') |
108 | 155 | var i |
109 | 156 | for (i=0; i<data.length; i++) |
|
0 commit comments