Separate hoods into layers
Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
This commit is contained in:
parent
3fd731a5a2
commit
73895af3d9
|
@ -0,0 +1,89 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE Map>
|
||||||
|
<Map background-color="transparent" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
|
||||||
|
<Style name="routerpoint" filter-mode="first">
|
||||||
|
<Rule>
|
||||||
|
<Filter>([status] = 'online')</Filter>
|
||||||
|
<!-- For directed antenna
|
||||||
|
<PointSymbolizer file="static/img/router_direct_green.svg" allow-overlap="true" transform="rotate(45)" />
|
||||||
|
-->
|
||||||
|
<PointSymbolizer file="static/img/router_green.svg" allow-overlap="true" />
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Filter>([status] = 'offline')</Filter>
|
||||||
|
<PointSymbolizer file="static/img/router_red.svg" allow-overlap="true" />
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Filter>([status] = 'unknown')</Filter>
|
||||||
|
<PointSymbolizer file="static/img/router_yellow.svg" allow-overlap="true" />
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Filter>([status] = 'orphaned')</Filter>
|
||||||
|
<PointSymbolizer file="static/img/router_grey.svg" allow-overlap="true" />
|
||||||
|
</Rule>
|
||||||
|
</Style>
|
||||||
|
<Style name="color" filter-mode="first">
|
||||||
|
<Rule>
|
||||||
|
<Filter>([quality] < 105)</Filter>
|
||||||
|
<LineSymbolizer stroke-width="3" stroke="#ff1e1e" stroke-linecap="butt" clip="false" />
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Filter>([quality] < 130)</Filter>
|
||||||
|
<LineSymbolizer stroke-width="3" stroke="#ff4949" stroke-linecap="butt" clip="false" />
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Filter>([quality] < 155)</Filter>
|
||||||
|
<LineSymbolizer stroke-width="3" stroke="#ff6a6a" stroke-linecap="butt" clip="false" />
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Filter>([quality] < 180)</Filter>
|
||||||
|
<LineSymbolizer stroke-width="3" stroke="#ffac53" stroke-linecap="butt" clip="false" />
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Filter>([quality] < 205)</Filter>
|
||||||
|
<LineSymbolizer stroke-width="3" stroke="#ffeb79" stroke-linecap="butt" clip="false" />
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Filter>([quality] < 230)</Filter>
|
||||||
|
<LineSymbolizer stroke-width="3" stroke="#79ff7c" stroke-linecap="butt" clip="false" />
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Filter>([quality] < 300)</Filter>
|
||||||
|
<LineSymbolizer stroke-width="3" stroke="#04ff0a" stroke-linecap="butt" clip="false" />
|
||||||
|
</Rule>
|
||||||
|
</Style>
|
||||||
|
<Style name="l3_color" filter-mode="first">
|
||||||
|
<Rule>
|
||||||
|
<LineSymbolizer stroke-width="3" stroke="#0684c4" stroke-linecap="butt" clip="false" />
|
||||||
|
</Rule>
|
||||||
|
</Style>
|
||||||
|
<Style name="shadow1">
|
||||||
|
<Rule>
|
||||||
|
<LineSymbolizer stroke-width="4" stroke="#333333" stroke-linecap="round" stroke-opacity="0.5" />
|
||||||
|
</Rule>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Layer name="links" srs="+proj=latlong +ellps=WGS84 +datum=WGS84 +no_defs">
|
||||||
|
<StyleName>shadow1</StyleName>
|
||||||
|
<StyleName>color</StyleName>
|
||||||
|
<Datasource>
|
||||||
|
<Parameter name="type">csv</Parameter>
|
||||||
|
<Parameter name="file">csv/links_v2.csv</Parameter>
|
||||||
|
</Datasource>
|
||||||
|
</Layer>
|
||||||
|
<Layer name="l3_links" srs="+proj=latlong +ellps=WGS84 +datum=WGS84 +no_defs">
|
||||||
|
<StyleName>shadow1</StyleName>
|
||||||
|
<StyleName>l3_color</StyleName>
|
||||||
|
<Datasource>
|
||||||
|
<Parameter name="type">csv</Parameter>
|
||||||
|
<Parameter name="file">csv/l3_links_v2.csv</Parameter>
|
||||||
|
</Datasource>
|
||||||
|
</Layer>
|
||||||
|
<Layer name="routers" srs="+proj=latlong +ellps=WGS84 +datum=WGS84 +no_defs">
|
||||||
|
<StyleName>routerpoint</StyleName>
|
||||||
|
<Datasource>
|
||||||
|
<Parameter name="type">csv</Parameter>
|
||||||
|
<Parameter name="file">csv/routers_v2.csv</Parameter>
|
||||||
|
</Datasource>
|
||||||
|
</Layer>
|
||||||
|
</Map>
|
|
@ -1,6 +1,7 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
liteserv.py links_and_routers.xml --processes=5 &
|
liteserv.py routers.xml --processes=5 &
|
||||||
|
liteserv.py routers_v2.xml -p 8003 --processes=5 &
|
||||||
liteserv.py hoods.xml -p 8001 --processes=5 &
|
liteserv.py hoods.xml -p 8001 --processes=5 &
|
||||||
liteserv.py hoodsv2.xml -p 8002 --processes=5
|
liteserv.py hoodsv2.xml -p 8002 --processes=5
|
||||||
|
|
||||||
|
|
|
@ -4,11 +4,21 @@
|
||||||
"path": "/var/cache/ffmap/tiles/"
|
"path": "/var/cache/ffmap/tiles/"
|
||||||
},
|
},
|
||||||
"layers": {
|
"layers": {
|
||||||
"tiles/links_and_routers": {
|
"tiles/routers": {
|
||||||
"provider": {
|
"provider": {
|
||||||
"class": "dynmapnik:DynMapnik",
|
"class": "dynmapnik:DynMapnik",
|
||||||
"kwargs": {
|
"kwargs": {
|
||||||
"mapfile": "/usr/share/ffmap/links_and_routers.xml"
|
"mapfile": "/usr/share/ffmap/routers.xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"metatile": {"buffer": 128},
|
||||||
|
"cache lifespan": 300
|
||||||
|
},
|
||||||
|
"tiles/routers_v2": {
|
||||||
|
"provider": {
|
||||||
|
"class": "dynmapnik:DynMapnik",
|
||||||
|
"kwargs": {
|
||||||
|
"mapfile": "/usr/share/ffmap/routers_v2.xml"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"metatile": {"buffer": 128},
|
"metatile": {"buffer": 128},
|
||||||
|
|
|
@ -72,22 +72,35 @@ def draw_voronoi_lines(csv, hoods):
|
||||||
|
|
||||||
|
|
||||||
def update_mapnik_csv(mysql):
|
def update_mapnik_csv(mysql):
|
||||||
|
routers = mysql.fetchall("""
|
||||||
|
SELECT router.status, router.lat, router.lng, hoods.name AS hood FROM router
|
||||||
|
LEFT JOIN hoods ON router.hood = hoods.name
|
||||||
|
WHERE router.lat IS NOT NULL AND router.lng IS NOT NULL
|
||||||
|
""")
|
||||||
|
|
||||||
|
rv1 = "lng,lat,status\n"
|
||||||
|
rv2 = "lng,lat,status\n"
|
||||||
|
|
||||||
|
for router in routers:
|
||||||
|
tmp = "%f,%f,%s\n" % (
|
||||||
|
router["lng"],
|
||||||
|
router["lat"],
|
||||||
|
router["status"]
|
||||||
|
)
|
||||||
|
if router["hood"]:
|
||||||
|
rv1 += tmp
|
||||||
|
else:
|
||||||
|
rv2 += tmp
|
||||||
|
|
||||||
with open(os.path.join(CONFIG["csv_dir"], "routers.csv"), "w") as csv:
|
with open(os.path.join(CONFIG["csv_dir"], "routers.csv"), "w") as csv:
|
||||||
csv.write("lng,lat,status\n")
|
csv.write(rv1)
|
||||||
routers = mysql.fetchall("""
|
with open(os.path.join(CONFIG["csv_dir"], "routers_v2.csv"), "w") as csv:
|
||||||
SELECT status, lat, lng FROM router
|
csv.write(rv2)
|
||||||
WHERE lat IS NOT NULL AND lng IS NOT NULL
|
|
||||||
""")
|
|
||||||
for router in routers:
|
|
||||||
csv.write("%f,%f,%s\n" % (
|
|
||||||
router["lng"],
|
|
||||||
router["lat"],
|
|
||||||
router["status"]
|
|
||||||
))
|
|
||||||
|
|
||||||
dblinks = mysql.fetchall("""
|
dblinks = mysql.fetchall("""
|
||||||
SELECT r1.lat AS rlat, r1.lng AS rlng, r2.lat AS nlat, r2.lng AS nlng, n.type AS type, quality
|
SELECT r1.lat AS rlat, r1.lng AS rlng, r2.lat AS nlat, r2.lng AS nlng, n.type AS type, quality, hoods.name AS hood
|
||||||
FROM router AS r1
|
FROM router AS r1
|
||||||
|
LEFT JOIN hoods ON r1.hood = hoods.name
|
||||||
INNER JOIN router_neighbor AS n ON r1.id = n.router
|
INNER JOIN router_neighbor AS n ON r1.id = n.router
|
||||||
INNER JOIN (
|
INNER JOIN (
|
||||||
SELECT router, mac FROM router_netif GROUP BY mac, router
|
SELECT router, mac FROM router_netif GROUP BY mac, router
|
||||||
|
@ -98,32 +111,53 @@ def update_mapnik_csv(mysql):
|
||||||
""")
|
""")
|
||||||
links = []
|
links = []
|
||||||
linksl3 = []
|
linksl3 = []
|
||||||
|
linksv2 = []
|
||||||
|
linksl3v2 = []
|
||||||
for row in dblinks:
|
for row in dblinks:
|
||||||
if row.get("type")=="l3":
|
if row.get("type")=="l3":
|
||||||
linksl3.append((
|
tmp = (
|
||||||
row["rlng"],
|
row["rlng"],
|
||||||
row["rlat"],
|
row["rlat"],
|
||||||
row["nlng"],
|
row["nlng"],
|
||||||
row["nlat"]
|
row["nlat"]
|
||||||
))
|
)
|
||||||
|
if row["hood"]:
|
||||||
|
linksl3.append(tmp)
|
||||||
|
else:
|
||||||
|
linksl3v2.append(tmp)
|
||||||
else:
|
else:
|
||||||
links.append((
|
tmp = (
|
||||||
row["rlng"],
|
row["rlng"],
|
||||||
row["rlat"],
|
row["rlat"],
|
||||||
row["nlng"],
|
row["nlng"],
|
||||||
row["nlat"],
|
row["nlat"],
|
||||||
row["quality"]
|
row["quality"]
|
||||||
))
|
)
|
||||||
|
if row["hood"]:
|
||||||
|
links.append(tmp)
|
||||||
|
else:
|
||||||
|
linksv2.append(tmp)
|
||||||
|
|
||||||
with open(os.path.join(CONFIG["csv_dir"], "links.csv"), "w") as csv:
|
with open(os.path.join(CONFIG["csv_dir"], "links.csv"), "w") as csv:
|
||||||
csv.write("WKT,quality\n")
|
csv.write("WKT,quality\n")
|
||||||
for link in sorted(links, key=lambda l: l[4]):
|
for link in sorted(links, key=lambda l: l[4]):
|
||||||
csv.write("\"LINESTRING (%f %f,%f %f)\",%i\n" % link)
|
csv.write("\"LINESTRING (%f %f,%f %f)\",%i\n" % link)
|
||||||
|
|
||||||
|
with open(os.path.join(CONFIG["csv_dir"], "links_v2.csv"), "w") as csv:
|
||||||
|
csv.write("WKT,quality\n")
|
||||||
|
for link in sorted(linksv2, key=lambda l: l[4]):
|
||||||
|
csv.write("\"LINESTRING (%f %f,%f %f)\",%i\n" % link)
|
||||||
|
|
||||||
with open(os.path.join(CONFIG["csv_dir"], "l3_links.csv"), "w") as csv:
|
with open(os.path.join(CONFIG["csv_dir"], "l3_links.csv"), "w") as csv:
|
||||||
csv.write("WKT\n")
|
csv.write("WKT\n")
|
||||||
for link in linksl3:
|
for link in linksl3:
|
||||||
csv.write("\"LINESTRING (%f %f,%f %f)\"\n" % link)
|
csv.write("\"LINESTRING (%f %f,%f %f)\"\n" % link)
|
||||||
|
|
||||||
|
with open(os.path.join(CONFIG["csv_dir"], "l3_links_v2.csv"), "w") as csv:
|
||||||
|
csv.write("WKT\n")
|
||||||
|
for link in linksl3v2:
|
||||||
|
csv.write("\"LINESTRING (%f %f,%f %f)\"\n" % link)
|
||||||
|
|
||||||
dbhoods = mysql.fetchall("""
|
dbhoods = mysql.fetchall("""
|
||||||
SELECT name, lat, lng FROM hoods
|
SELECT name, lat, lng FROM hoods
|
||||||
WHERE lat IS NOT NULL AND lng IS NOT NULL
|
WHERE lat IS NOT NULL AND lng IS NOT NULL
|
||||||
|
@ -176,7 +210,8 @@ def update_mapnik_csv(mysql):
|
||||||
# touch mapnik XML files to trigger tilelite watcher
|
# touch mapnik XML files to trigger tilelite watcher
|
||||||
touch("/usr/share/ffmap/hoods.xml")
|
touch("/usr/share/ffmap/hoods.xml")
|
||||||
touch("/usr/share/ffmap/hoodsv2.xml")
|
touch("/usr/share/ffmap/hoodsv2.xml")
|
||||||
touch("/usr/share/ffmap/links_and_routers.xml")
|
touch("/usr/share/ffmap/routers.xml")
|
||||||
|
touch("/usr/share/ffmap/routers_v2.xml")
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
update_mapnik_csv()
|
update_mapnik_csv()
|
||||||
|
|
|
@ -24,7 +24,8 @@ app.register_blueprint(api, url_prefix='/api')
|
||||||
app.register_blueprint(filters)
|
app.register_blueprint(filters)
|
||||||
|
|
||||||
tileurls = {
|
tileurls = {
|
||||||
"links_and_routers": "/tiles/links_and_routers",
|
"routers": "/tiles/routers",
|
||||||
|
"routers_v2": "/tiles/routers_v2",
|
||||||
"hoods": "/tiles/hoods",
|
"hoods": "/tiles/hoods",
|
||||||
"hoodsv2": "/tiles/hoodsv2",
|
"hoodsv2": "/tiles/hoodsv2",
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,8 @@ var overlay_config = {
|
||||||
maximumAge: 1000*3600*24*10
|
maximumAge: 1000*3600*24*10
|
||||||
}
|
}
|
||||||
|
|
||||||
var links_and_routers = new L.TileLayer(tileurls.links_and_routers + '/{z}/{x}/{y}.png', overlay_config).addTo(map);
|
var routers = new L.TileLayer(tileurls.routers + '/{z}/{x}/{y}.png', overlay_config).addTo(map);
|
||||||
|
var routers_v2 = new L.TileLayer(tileurls.routers_v2 + '/{z}/{x}/{y}.png', overlay_config).addTo(map);
|
||||||
var hoods = new L.TileLayer(tileurls.hoods + '/{z}/{x}/{y}.png', overlay_config);
|
var hoods = new L.TileLayer(tileurls.hoods + '/{z}/{x}/{y}.png', overlay_config);
|
||||||
var hoodsv2 = new L.TileLayer(tileurls.hoodsv2 + '/{z}/{x}/{y}.png', overlay_config);
|
var hoodsv2 = new L.TileLayer(tileurls.hoodsv2 + '/{z}/{x}/{y}.png', overlay_config);
|
||||||
layersControl = new L.Control.Layers({
|
layersControl = new L.Control.Layers({
|
||||||
|
@ -34,7 +35,8 @@ layersControl = new L.Control.Layers({
|
||||||
"openstreetmap.de": tilesosmde,
|
"openstreetmap.de": tilesosmde,
|
||||||
"Thunderforest Outdoors": tilestfod
|
"Thunderforest Outdoors": tilestfod
|
||||||
}, {
|
}, {
|
||||||
"Links & Routers": links_and_routers,
|
"Routers": routers,
|
||||||
|
"Routers v2 und dezentral": routers_v2,
|
||||||
"Hoods": hoods,
|
"Hoods": hoods,
|
||||||
"Hoods v2": hoodsv2
|
"Hoods v2": hoodsv2
|
||||||
});
|
});
|
||||||
|
|
|
@ -5,9 +5,9 @@ mkdir -vp /var/lib/ffmap/csv
|
||||||
chown -R www-data:www-data /var/lib/ffmap
|
chown -R www-data:www-data /var/lib/ffmap
|
||||||
|
|
||||||
mkdir -vp /usr/share/ffmap
|
mkdir -vp /usr/share/ffmap
|
||||||
cp -v ffmap/mapnik/{hoods,hoodsv2,links_and_routers}.xml /usr/share/ffmap
|
cp -v ffmap/mapnik/{hoods,hoodsv2,routers,routers_v2}.xml /usr/share/ffmap
|
||||||
sed -i -e 's#>csv/#>/var/lib/ffmap/csv/#' /usr/share/ffmap/{hoods,hoodsv2,links_and_routers}.xml
|
sed -i -e 's#>csv/#>/var/lib/ffmap/csv/#' /usr/share/ffmap/{hoods,hoodsv2,routers,routers_v2}.xml
|
||||||
chown www-data:www-data /usr/share/ffmap/{hoods,hoodsv2,links_and_routers}.xml
|
chown www-data:www-data /usr/share/ffmap/{hoods,hoodsv2,routers,routers_v2}.xml
|
||||||
|
|
||||||
cp -v ffmap/mapnik/tilestache.cfg /usr/share/ffmap
|
cp -v ffmap/mapnik/tilestache.cfg /usr/share/ffmap
|
||||||
cp -rv ffmap/web/static /usr/share/ffmap
|
cp -rv ffmap/web/static /usr/share/ffmap
|
||||||
|
|
Loading…
Reference in New Issue