johan/consolidate-ipe-data (#5)

Use IPE datas from multiples sources: Axione, ARCEP, Liazo

Co-authored-by: Johan Le Baut <johan@helloasso.org>
Reviewed-on: #5
This commit is contained in:
johan.le.baut 2022-10-14 13:56:31 +02:00
parent 4c8a59e64c
commit 1e9d62c03b
4 changed files with 52 additions and 41 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
.idea

View file

@ -31,7 +31,12 @@ EOF
done done
echo "" echo ""
sqlite3 "${fullDbPath}" < "${tmpSql}" rc=0
sqlite3 "${fullDbPath}" < "${tmpSql}" 2>&1 | grep -v "filling the rest with NULL" || rc="${PIPESTATUS[0]}"
if [[ $rc -ne 0 ]]; then
echo "Error executing sqlite import"
exit "$rc"
fi
echo "[+] Ingesting spatial data." echo "[+] Ingesting spatial data."

View file

@ -43,7 +43,7 @@ def getEligData():
args = request.args args = request.args
valid_args = True valid_args = True
processed_args = {} processed_args = {}
for k in ["swx", "swy", "nex", "ney", "centerlat", "centerlng"]: for k in ["swx", "swy", "nex", "ney"]:
valid_args = valid_args and k in args valid_args = valid_args and k in args
if valid_args: if valid_args:
try: try:
@ -51,18 +51,20 @@ def getEligData():
except ValueError: except ValueError:
valid_args = False valid_args = False
if valid_args: if valid_args:
## Need to narrow coordinates for Liazo API call # Need to narrow coordinates for Liazo API call
# wide_coordinates=AreaCoordinates(
# swx=processed_args['swx'], # computes center
# swy=processed_args['swy'], centerx = (processed_args['swx'] + processed_args['nex']) / 2
# nex=processed_args['nex'], centery = (processed_args['swy'] + processed_args['ney']) / 2
# ney=processed_args['ney'],
# ) narrow_x = 0.0022
narrow_coordinates=AreaCoordinates( narrow_y = 0.0011
swx=processed_args['centerlng']-0.0022,
swy=processed_args['centerlat']-0.0011, narrow_coordinates = AreaCoordinates(
nex=processed_args['centerlng']+0.0022, swx=centerx - narrow_x,
ney=processed_args['centerlat']+0.0011, swy=centery - narrow_y,
nex=centerx + narrow_x,
ney=centery + narrow_y,
) )
buildings = dict() buildings = dict()
try: try:

View file

@ -1,6 +1,6 @@
const minZoomForRequest = 17; const minZoomForRequest = 17;
const urlADSL='https://tools.aquilenet.fr/cgi-bin/recherchend.cgi' const urlADSL = 'https://tools.aquilenet.fr/cgi-bin/recherchend.cgi'
const urlTestFTTH='https://tools.aquilenet.fr/cgi-bin/test.cgi' const urlTestFTTH = 'https://tools.aquilenet.fr/cgi-bin/test.cgi'
const streetTypeConversion = new Map(); const streetTypeConversion = new Map();
streetTypeConversion.set("aire", "aire") streetTypeConversion.set("aire", "aire")
@ -72,6 +72,7 @@ streetTypeConversion.set("zone industrielle", "zi")
streetTypeConversion.set("zone", "zone") streetTypeConversion.set("zone", "zone")
let markers = []; let markers = [];
function initMap(btn) { function initMap(btn) {
// Init map position/zoom. Potentially using what's in the URL search string. // Init map position/zoom. Potentially using what's in the URL search string.
const params = new URLSearchParams(window.location.search); const params = new URLSearchParams(window.location.search);
@ -147,39 +148,39 @@ function updateEligData(map, eligData) {
} }
let colorMarker = 'black' let colorMarker = 'black'
let messageElig = `` let messageElig = ``
eligTestApi=`eligtest/ftth?idImm=${building.idImm}&codePostal=${building.codePostal}&axione=${building.aquilenetEligStatus.isEligible}&liazo=${building.fdnEligStatus.isEligible}` eligTestApi = `eligtest/ftth?idImm=${building.idImm}&codePostal=${building.codePostal}&axione=${building.aquilenetEligStatus.isEligible}&liazo=${building.fdnEligStatus.isEligible}`
// éligible chez Aquilenet, lien pour le test // éligible chez Aquilenet, lien pour le test
if (building.aquilenetEligStatus.isEligible) { if (building.aquilenetEligStatus.isEligible) {
messageElig = `<p class=deployeeAquilenet>Fibre deployee et disponible par Aquilenet !</p>` messageElig = `<p class=deployeeAquilenet>Fibre deployee et disponible par Aquilenet !</p>`
const zip=encodeURIComponent(building.codePostal); const zip = encodeURIComponent(building.codePostal);
const idImm=encodeURIComponent(building.idImm); const idImm = encodeURIComponent(building.idImm);
messageElig += `<br/><a href=${urlTestFTTH}?ftth=1&axione=1&adsltel=NOUVEAU&cp=${zip}&refimmeuble=${idImm}` messageElig += `<br/><a href=${urlTestFTTH}?ftth=1&axione=1&adsltel=NOUVEAU&cp=${zip}&refimmeuble=${idImm}` +
+ `>Tester l'éligibilité</a>` `>Tester l'éligibilité</a>`
colorMarker = 'green' colorMarker = 'green'
// pas de données Axione mais Kosc nous renvoie qque chose à cette adresse (fdnEligStatus) // pas de données Axione mais Kosc nous renvoie qque chose à cette adresse (fdnEligStatus)
// c'est peut être OK, on croise avec les données ARCEP (othersEligStatus) // c'est peut être OK, on croise avec les données ARCEP (othersEligStatus)
// Enfin on affiche un lien vers le test d'éligibilté KOSC à cette adresse // Enfin on affiche un lien vers le test d'éligibilté KOSC à cette adresse
} else if (building.fdnEligStatus.isEligible && building.othersEligStatus.isEligible) { } else if (building.fdnEligStatus.isEligible && building.othersEligStatus.isEligible) {
messageElig = `<p class=deployeeFDN>Fibre deployee mais pas chez Axione !` messageElig = `<p class=deployeeFDN>Fibre deployee mais pas chez Axione !`
messageElig += `<br/><a href=${eligTestApi}>Tester l'eligibilite par Kosc et Bouygues</a></p>` messageElig += `<br/><a href=${eligTestApi}>Tester l'eligibilite par Kosc et Bouygues</a></p>`
colorMarker = 'orange' colorMarker = 'orange'
// Pas de données Kosc ou Axione mais l'ARCEP nous dit qu'une fibre est déployée à cette adresse // Pas de données Kosc ou Axione mais l'ARCEP nous dit qu'une fibre est déployée à cette adresse
} else if (building.othersEligStatus.isEligible) { } else if (building.othersEligStatus.isEligible) {
messageElig = `<p class=deployeeAutres>Fibre deployee mais non eligible Aquilenet, desole :(</p>` messageElig = `<p class=deployeeAutres>Fibre deployee mais non eligible Aquilenet, desole :(</p>`
colorMarker = 'red' colorMarker = 'red'
// Pas de fibre il semblerait, proposer un test ADSL Aquilenet // Pas de fibre il semblerait, proposer un test ADSL Aquilenet
} else { } else {
messageElig = `<p class=nonDeployee>Fibre non deployee :(</p>` messageElig = `<p class=nonDeployee>Fibre non deployee :(</p>`
const zip=encodeURIComponent(building.codePostal); const zip = encodeURIComponent(building.codePostal);
const comm=encodeURIComponent(building.commune); const comm = encodeURIComponent(building.commune);
let convertType = streetTypeConversion.get(building.typeVoieImm.toLowerCase()); let convertType = streetTypeConversion.get(building.typeVoieImm.toLowerCase());
if (! convertType) { if (!convertType) {
convertType = building.typeVoieImm; convertType = building.typeVoieImm;
} }
const street=encodeURIComponent(`${convertType} ${building.nomVoieImm}`) const street = encodeURIComponent(`${convertType} ${building.nomVoieImm}`)
const street_nb=encodeURIComponent(building.numVoieImm) const street_nb = encodeURIComponent(building.numVoieImm)
messageElig += `<br/><a href=${urlADSL}?zip=${zip}&city=${comm}&street=${street}&street_nb=${street_nb}&gps=&do=1&submit=Valider` messageElig += `<br/><a href=${urlADSL}?zip=${zip}&city=${comm}&street=${street}&street_nb=${street_nb}&gps=&do=1&submit=Valider` +
+ `>Tester ADSL a cette adresse</a>` `>Tester ADSL a cette adresse</a>`
if (building.othersEligStatus.reasonNotEligible != "") { if (building.othersEligStatus.reasonNotEligible != "") {
messageElig += `<br/><br/>Status general ARCEP: ${building.othersEligStatus.reasonNotEligible}` messageElig += `<br/><br/>Status general ARCEP: ${building.othersEligStatus.reasonNotEligible}`
} }
@ -196,11 +197,13 @@ function updateEligData(map, eligData) {
popupAnchor: [1, -34], popupAnchor: [1, -34],
shadowSize: [41, 41] shadowSize: [41, 41]
}); });
const marker = new L.marker(latlng, {icon: markerIcon}) const marker = new L.marker(latlng, {
.bindPopup(`${addrImm}<br/>${building.codePostal} ${building.commune}` icon: markerIcon
+ `<br/><br/>${messageElig}<br/><br/>Ref Immeuble: ${building.idImm}`, { })
maxWidth : 560 .bindPopup(`${addrImm}<br/>${building.codePostal} ${building.commune}` +
}); `<br/><br/>${messageElig}<br/><br/>Ref Immeuble: ${building.idImm}`, {
maxWidth: 560
});
map.addLayer(marker); map.addLayer(marker);
return marker return marker
}); });
@ -214,13 +217,12 @@ function updateUrl(map) {
async function fetchEligData(map) { async function fetchEligData(map) {
const zoom = map.getZoom(); const zoom = map.getZoom();
if (zoom >= minZoomForRequest) { if (zoom >= minZoomForRequest) {
const mc = map.getCenter();
const bounds = map.getBounds(); const bounds = map.getBounds();
const sw = bounds.getSouthWest(); const sw = bounds.getSouthWest();
const ne = bounds.getNorthEast(); const ne = bounds.getNorthEast();
const btn = document.getElementById("btn-load-elig-data"); const btn = document.getElementById("btn-load-elig-data");
waitBtn(btn); waitBtn(btn);
const reqUri = encodeURI(`eligdata?swx=${sw.lng}&swy=${sw.lat}&nex=${ne.lng}&ney=${ne.lat}&centerlat=${mc.lat}&centerlng=${mc.lng}`); const reqUri = encodeURI(`eligdata?swx=${sw.lng}&swy=${sw.lat}&nex=${ne.lng}&ney=${ne.lat}`);
const source = await fetch(reqUri); const source = await fetch(reqUri);
const eligData = await source.json(); const eligData = await source.json();
updateEligData(map, eligData); updateEligData(map, eligData);
@ -246,6 +248,7 @@ function hideBtn(btn) {
btn.disabled = true; btn.disabled = true;
btn.title = "Veuillez zoomer plus la carte avant de lancer une recherche d'éligibilité."; btn.title = "Veuillez zoomer plus la carte avant de lancer une recherche d'éligibilité.";
} }
function waitBtn(btn) { function waitBtn(btn) {
btn.disabled = true; btn.disabled = true;
btn.title = "Chargement des batiments..."; btn.title = "Chargement des batiments...";
@ -254,4 +257,4 @@ function waitBtn(btn) {
const btn = initBtn(); const btn = initBtn();
const map = initMap(btn); const map = initMap(btn);
const addrSearch = initAddrSearch(map); const addrSearch = initAddrSearch(map);