Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
E
EBEC 2021
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Léna Aix
EBEC 2021
Commits
86b26163
Commit
86b26163
authored
4 years ago
by
Alexandre Pradeilles
Browse files
Options
Downloads
Plain Diff
Merge branch 'master' of
https://gitlab.viarezo.fr/2019aixl/ebec-2021
parents
429edca8
114bf2c3
No related branches found
No related tags found
No related merge requests found
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
README.md
+4
-1
4 additions, 1 deletion
README.md
coord_to_intersections.py
+2
-1
2 additions, 1 deletion
coord_to_intersections.py
main.py
+11
-1
11 additions, 1 deletion
main.py
research.py
+15
-2
15 additions, 2 deletions
research.py
with
32 additions
and
5 deletions
README.md
+
4
−
1
View file @
86b26163
# EBEC 2021
Une fois le docker téléchargé, executer le fichier main
un input vous est demandé, rentrer la liste des coordonnées des arbres sous la forme
(longitude,latitude)
Un dictionnaire récapitulant les informations demandées vous est renvoyé.
## ATTENTION ENTRER LES COORDONNEES SOUS LA FORME (LONG,LAT)
This diff is collapsed.
Click to expand it.
coord_to_intersections.py
+
2
−
1
View file @
86b26163
...
...
@@ -85,6 +85,7 @@ def coord_to_inter(liste_coord,lat,long,main_street):
print
(
inter_street
)
#On souhaite ensuite s'asssurer que l'on à le couple début/fin de tronçon le plus rapproché possible pour
#réduire la zone de recherche
#on va donc réitérer l'étape précédente mais en prenant comme point de départ le dernier point d'inserction trouvé
liste_coord_admissibles2
=
[]
d_2_1
=
[]
for
i
in
range
(
len
(
liste_coord
)):
...
...
This diff is collapsed.
Click to expand it.
main.py
+
11
−
1
View file @
86b26163
...
...
@@ -7,17 +7,22 @@ import time
def
tree_position
(
lat
,
lon
):
req
=
requete_osm
(
lat
,
lon
)
#on recupere les infos disponibles sur l'arbre
try
:
main_street
=
req
[
'
address
'
][
'
road
'
]
except
KeyError
:
#si on ne trouve pas de nom de rue on fait une recherche autour
main_street
=
circular_research_2
(
lat
,
lon
)
#si on trouve un nom de rue vide (rare) on fait une recherche autour
if
main_street
==
''
:
main_street
=
circular_research_2
(
lat
,
lon
)
print
(
main_street
)
city
=
req
[
'
address
'
][
'
town
'
]
country
=
req
[
'
address
'
][
'
country
'
]
#on fait une recherche sur la rue complète pour avoir toutes les intersections de la rue
json
=
search_osm
(
main_street
,
city
,
country
)
intersections
=
all_intersect
(
json
)
#on sélectionne le début et fin de troncon tel que le troncon soit de taille minimale
[
begin
,
end
,
coord_begin
,
coord_end
]
=
coord_to_inter
(
intersections
,
lat
,
lon
,
main_street
)
#pour la suite, on a besoin de stocker le couple début et fin de troncon sous frome de tuple
# et non de liste car on va s'en servir comme clé d'un dictionnaire
...
...
@@ -71,6 +76,8 @@ def classement_reduit(classement): #fonction pour l'objectif 3 qui rassemble les
rue_princ
[
troncon
[
1
]].
append
((
troncon
[
5
],
troncon
[
3
]))
else
:
rue_princ
[
troncon
[
1
]]
=
[(
troncon
[
4
],
troncon
[
2
]),(
troncon
[
5
],
troncon
[
3
])]
#pour toutes les rues, on sélectionne les deux intersections les plus éloignées,
# ce sont elles qu'on appelera début et fin de troncon
for
rue
in
rue_princ
:
liste_coord
=
rue_princ
[
rue
]
dist_max
=
0
...
...
@@ -85,12 +92,15 @@ def classement_reduit(classement): #fonction pour l'objectif 3 qui rassemble les
x2
=
liste_coord
[
j
][
0
][
0
]
y2
=
liste_coord
[
j
][
0
][
1
]
d
=
(
x1
-
x2
)
**
2
+
(
y1
-
y2
)
**
2
if
d
>
dist_max
:
if
d
>
=
dist_max
:
dist_max
=
d
coord_deb
=
liste_coord
[
i
][
0
]
coord_fin
=
liste_coord
[
j
][
0
]
nom_deb
=
liste_coord
[
i
][
1
]
nom_fin
=
liste_coord
[
j
][
1
]
#une fois ces deux intersections sélectionnées, on copie dans new_classement les informations de
# classement mais en regroupant les troncons de meme rue et en modifiant les noms et coordonnées
# des débuts et fin de classement
for
troncon
in
classement
:
if
troncon
[
1
]
==
rue
:
if
(
troncon
[
0
],
rue
,
nom_deb
,
nom_fin
,
coord_deb
,
coord_fin
)
in
new_classement
:
...
...
This diff is collapsed.
Click to expand it.
research.py
+
15
−
2
View file @
86b26163
...
...
@@ -9,19 +9,28 @@ def circular_research(lat, lon, main_street):
street
=
requete_osm
(
lat
,
lon
)[
'
address
'
][
'
road
'
]
except
KeyError
:
street
=
''
#si on trouve une rue qui convient
if
not
(
street
==
main_street
)
and
not
(
street
==
''
):
return
street
#sinon, on cherche autour de ce point
step
=
5
*
10
**
(
-
5
)
#on limite la taille du "cercle" de recherche pour ne pas tomber sur des rues trop éloignées
while
step
<
6
*
10
**
(
-
5
):
for
i
in
range
(
8
):
street
=
check_position
(
lat
,
lon
,
step
,
main_street
,
i
)
if
not
(
street
==
main_street
)
and
not
(
street
==
''
):
return
street
step
+=
4
*
10
**
(
-
5
)
#si on n'a toujours rien trouvé, c'est que le point d'intersection ne correspond pas
# à une intersection avec une rue différente de main street
return
None
def
circular_research_2
(
lat
,
lon
,
main_street
=
''
):
#Recherche un rue autre que main_street par recherche circulaire autour du point d'intersection
#Recherche une rue autre que vide par recherche circulaire autour du point d'intersection
#cette fonction est appelée lorsqu'on ne trouve pas de rue associée à un arbe
#la seule différence avec la fonction précédente est donc qu'ici on impose de renvoyer une rue
#quitte à s'éloigner énormément de l'arbre, il n'y a donc pas ici de limite pour la taille du "cercle"
#on peut donc traiter le cas où l'arbre est au milieu d'un parc par exemple
step
=
2
*
10
**
(
-
5
)
found
=
False
while
not
(
found
):
...
...
@@ -33,7 +42,9 @@ def circular_research_2(lat, lon, main_street=''):
return
street
def
check_position
(
lat
,
lon
,
step
,
main_street
,
i
):
#Calcul les positions autour du point centrale et récupère la rue associée à cette position
#i compris entre 0 et 7
#Calcul les positions autour du point central et récupère la rue associée à cette position
#cette fonction peut être appelée jusqu'à 8 fois
street
=
''
step_diag
=
step
/
sqrt
(
2
)
if
i
==
0
:
...
...
@@ -80,6 +91,8 @@ def check_position(lat, lon, step, main_street, i):
def
multi_position
(
lat
,
lon
,
step
):
#test de multrithreading mais cela n'améliore pas énormément la vitesse de calcul
#donc pas utilisé finalement
latitude
=
[]
longitude
=
[]
for
j
in
range
(
1
,
4
):
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment