johan/consolidate-ipe-data #5

Merged
johan.le.baut merged 2 commits from johan/consolidate-ipe-data into master 2022-10-14 13:56:32 +02:00
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"]:
johan.le.baut marked this conversation as resolved Outdated

Il vaudrait mieux calculer centerlat et centerlng côté backend plutôt de faire confiance au client pour nous envoyer des trucs pas absurdes par rapport au points sud oust et nord est.

On a déjà tout ce qu'il faut:

centerlng = (swx + nex) / 2
centerlat = (swy + ney) / 2

Note: je serai plutôt pour les noms de coordonées coordonées x et y. IE. centerx, centery. Perso, je me perd tout le temps avec les trucs à base de lat/long.

Il vaudrait mieux calculer `centerlat` et `centerlng` côté backend plutôt de faire confiance au client pour nous envoyer des trucs pas absurdes par rapport au points sud oust et nord est. On a déjà tout ce qu'il faut: ```python centerlng = (swx + nex) / 2 centerlat = (swy + ney) / 2 ``` Note: je serai plutôt pour les noms de coordonées coordonées x et y. IE. centerx, centery. Perso, je me perd tout le temps avec les trucs à base de lat/long.
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
johan.le.baut marked this conversation as resolved Outdated

Je comprend pas trop ce truc.

La bounding box sw/ne est trop large pour Liazo?

Il y a une raison particulière pour ne pas utiliser la bounding box du client ici?

Je comprend pas trop ce truc. La bounding box sw/ne est trop large pour Liazo? Il y a une raison particulière pour ne pas utiliser la bounding box du client ici?

oui c'était trop large sinon

oui c'était trop large sinon
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;
johan.le.baut marked this conversation as resolved
Review

Trop de "fausses" diff et Gitea n'est apparemment pas aussi bon que GitHub pour les afficher. J'ai probablement raté des vrais trucs nouveaux.

Trop de "fausses" diff et Gitea n'est apparemment pas aussi bon que GitHub pour les afficher. J'ai probablement raté des vrais trucs nouveaux.
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'
johan.le.baut marked this conversation as resolved Outdated

Nit:

On dirait que ton editeur a massacré l'indentation qu'on avait. Ça crée pas mal de diffs artificielles. Si c'est facile de ton côté, ça serait cool de dégager ces diffs pour render les "vraies" plus facile a lire.

Nit: On dirait que ton editeur a massacré l'indentation qu'on avait. Ça crée pas mal de diffs artificielles. Si c'est facile de ton côté, ça serait cool de dégager ces diffs pour render les "vraies" plus facile a lire.
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
johan.le.baut marked this conversation as resolved Outdated

Pareil: enlever centerlat et centerlng.

Pareil: enlever centerlat et centerlng.
});
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);