mirror of https://github.com/MISP/misp-dashboard
Geospatial now group too close markers
parent
a6dd63548d
commit
c137932770
36
server.py
36
server.py
|
@ -149,8 +149,15 @@ def getHitMap():
|
||||||
data = getZrange(keyCateg, dayNum, topNum)
|
data = getZrange(keyCateg, dayNum, topNum)
|
||||||
return jsonify(data)
|
return jsonify(data)
|
||||||
|
|
||||||
|
def isCloseTo(coord1, coord2):
|
||||||
|
if abs(float(coord1[0]) - float(coord2[0])) <= 0.0001:
|
||||||
|
if abs(float(coord1[1]) - float(coord2[1])) <= 0.0001:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
@app.route("/_getCoordsByRadius")
|
@app.route("/_getCoordsByRadius")
|
||||||
def getCoordsByRadius():
|
def getCoordsByRadius():
|
||||||
|
dico_coord = {}
|
||||||
to_return = []
|
to_return = []
|
||||||
try:
|
try:
|
||||||
dateStart = datetime.datetime.fromtimestamp(float(request.args.get('dateStart')))
|
dateStart = datetime.datetime.fromtimestamp(float(request.args.get('dateStart')))
|
||||||
|
@ -168,8 +175,33 @@ def getCoordsByRadius():
|
||||||
keyCateg = 'GEO_RAD'
|
keyCateg = 'GEO_RAD'
|
||||||
keyname = "{}:{}".format(keyCateg, date_str)
|
keyname = "{}:{}".format(keyCateg, date_str)
|
||||||
res = serv_redis_db.georadius(keyname, centerLon, centerLat, radius, unit='km', withcoord=True)
|
res = serv_redis_db.georadius(keyname, centerLon, centerLat, radius, unit='km', withcoord=True)
|
||||||
res = [ [json.loads(data), coord] for data, coord in res ] #correctly send the json
|
|
||||||
to_return.append(res)
|
#sum up really close coord
|
||||||
|
for data, coord in res:
|
||||||
|
flag_added = False
|
||||||
|
coord = [coord[0], coord[1]]
|
||||||
|
#list all coord
|
||||||
|
for dicoCoordStr in dico_coord.keys():
|
||||||
|
dicoCoord = json.loads(dicoCoordStr)
|
||||||
|
#if curCoord close to coord
|
||||||
|
if isCloseTo(dicoCoord, coord):
|
||||||
|
#add data to dico coord
|
||||||
|
dico_coord[dicoCoordStr].append(data)
|
||||||
|
flag_added = True
|
||||||
|
break
|
||||||
|
# coord not in dic
|
||||||
|
if not flag_added:
|
||||||
|
dico_coord[str(coord)] = [data]
|
||||||
|
|
||||||
|
for dicoCoord, array in dico_coord.items():
|
||||||
|
print(array)
|
||||||
|
dicoCoord = json.loads(dicoCoord)
|
||||||
|
to_return.append([array, dicoCoord])
|
||||||
|
|
||||||
|
#res = [ [json.loads(data), coord] for data, coord in res ] #correctly send the json
|
||||||
|
#to_return.append(res)
|
||||||
|
import pprint
|
||||||
|
pprint.pprint(to_return)
|
||||||
|
|
||||||
return jsonify(to_return)
|
return jsonify(to_return)
|
||||||
|
|
||||||
|
|
|
@ -329,21 +329,34 @@ small {
|
||||||
var dateStart = datePickersRadiusWidgetFrom.datepicker("getDate").getTime() / 1000;
|
var dateStart = datePickersRadiusWidgetFrom.datepicker("getDate").getTime() / 1000;
|
||||||
var dateEnd = datePickersRadiusWidgetTo.datepicker("getDate").getTime() / 1000;
|
var dateEnd = datePickersRadiusWidgetTo.datepicker("getDate").getTime() / 1000;
|
||||||
$.getJSON("{{ url_for('getCoordsByRadius') }}?dateStart="+dateStart+"&dateEnd="+dateEnd+"¢erLat="+coord.lat+"¢erLon="+coord.lng+"&radius="+radius_km, function(allList){
|
$.getJSON("{{ url_for('getCoordsByRadius') }}?dateStart="+dateStart+"&dateEnd="+dateEnd+"¢erLat="+coord.lat+"¢erLon="+coord.lng+"&radius="+radius_km, function(allList){
|
||||||
|
console.log(allList);
|
||||||
// remove old markers
|
// remove old markers
|
||||||
for (var i in savedMarkerRadius) {
|
for (var i in savedMarkerRadius) {
|
||||||
savedMarkerRadius[i].remove(); // remove marker
|
savedMarkerRadius[i].remove(); // remove marker
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var listIndex in allList) {
|
//for (var listIndex in allList) {
|
||||||
var list = allList[listIndex];
|
// var list = allList[listIndex];
|
||||||
for (var dayListIndex in list) {
|
// for (var dayListIndex in list) {
|
||||||
var jsonData = list[dayListIndex][0];
|
// var jsonData = list[dayListIndex][0];
|
||||||
var coordJson = list[dayListIndex][1];
|
// var coordJson = list[dayListIndex][1];
|
||||||
|
|
||||||
|
// var marker = L.marker([coordJson[1], coordJson[0]]).addTo(radiusOpenStreetMap);
|
||||||
|
// savedMarkerRadius.push(marker);
|
||||||
|
// marker.bindPopup('<strong>'+jsonData.categ+': </strong> '+jsonData.value, {autoClose:false}).openPopup();
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
for (var listIndex in allList) {
|
||||||
|
var curMarker = allList[listIndex];
|
||||||
|
var dataText = "";
|
||||||
|
var coordJson = curMarker[1];
|
||||||
|
for (var dataI in curMarker[0]) {
|
||||||
|
var jsonData = JSON.parse(curMarker[0][dataI])
|
||||||
|
dataText += '<strong>'+jsonData.categ+': </strong> '+jsonData.value + "<br>"
|
||||||
|
}
|
||||||
var marker = L.marker([coordJson[1], coordJson[0]]).addTo(radiusOpenStreetMap);
|
var marker = L.marker([coordJson[1], coordJson[0]]).addTo(radiusOpenStreetMap);
|
||||||
savedMarkerRadius.push(marker);
|
savedMarkerRadius.push(marker);
|
||||||
marker.bindPopup('<strong>'+jsonData.categ+'</strong><br>'+jsonData.value, {autoClose:false}).openPopup();
|
marker.bindPopup(dataText, {autoClose:false}).openPopup();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue