Skip to content

Commit 403b817

Browse files
committed
Навальный - привязка точек к josm
1 parent d265af4 commit 403b817

File tree

2 files changed

+55
-4
lines changed

2 files changed

+55
-4
lines changed

i/josm.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// https://josm.openstreetmap.de/wiki/Help/RemoteControlCommands
12
var josm = {
23
version: false, // версия JOSM
34
running: false, // запущен ли редактор
@@ -25,7 +26,6 @@ var josm = {
2526
if (!type) type = osm.getType(a.id)
2627
return 'http://127.0.0.1:8111/load_object?objects='+type[0]+a.id
2728
},
28-
// https://josm.openstreetmap.de/wiki/Help/RemoteControlCommands
2929
/** ссылка на изменение параметров */
3030
link_edit: function(a, params)
3131
{
@@ -35,6 +35,10 @@ var josm = {
3535
for (i in params) tags += (tags?'%7C':'')+i+'='+encodeURIComponent(params[i])
3636
return 'http://127.0.0.1:8111/load_object?objects='+type[0]+a.id+'&addtags='+tags
3737
},
38+
link_zoom: function(a, delta=0.00001)
39+
{
40+
return 'http://127.0.0.1:8111/load_and_zoom?left='+(a.lon-delta)+'&right='+(a.lon+delta)+'&top='+(a.lat+delta)+'&bottom='+(a.lat-delta)
41+
}
3842
}
3943

4044
/** проверка запущен JOSM или нет */

navalny/index.html

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
<script>
3232
var map = map.init({lat: 53.814, lon: 55.679, z: 5, update_hash: false})
33+
var g_points = []
3334

3435
function str_replace(x, from, to)
3536
{
@@ -70,12 +71,55 @@
7071
}
7172
if (data.hqs)
7273
{
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+
}
7385
a = data
7486
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)
7691
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>'
7894
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+
}
79123
}
80124
return st;
81125
}
@@ -94,7 +138,9 @@
94138
ajax('map.php', function(a){
95139
var i, j
96140
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 })
98144
stat.n++
99145
}
100146
for (i in a)
@@ -104,6 +150,7 @@
104150
})
105151
osm.search({'name': 'Штаб Алексея Навального', 'node': true}, function(data){
106152
if (!data.length) return $('info', 'Нет данных')
153+
g_points = data
107154
$('info', 'Данные загружены')
108155
var i
109156
for (i=0; i<data.length; i++)

0 commit comments

Comments
 (0)