IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Calculer les points gps d'un perimetre de tonte


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 79
    Points : 37
    Points
    37
    Par défaut Calculer les points gps d'un perimetre de tonte
    Bonjour, j'ai encore besoin d'aide pour trouver les points périmetriques pour un futur robot tondeuse.

    J'ai récupéré mon perimetre de tonte grace à mon gps rtk, sa ressemble à ceci:

    Nom : Screenshot_5.png
Affichages : 130
Taille : 71,7 Ko

    Je cherche à calculer une tonte perimetrique, comme sur cette image en rouge:

    Nom : Screenshot_6.png
Affichages : 124
Taille : 82,4 Ko


    J'ai donc des coordonées gps de chaques points et j'ai tracé le périmetre.

    Quelqu'un aurait t'il une idée sur la façon de procéder pour obtenir les coordonées des points en rouges, j'aurais aimé avoir 1 metre entre le périmetre du jardin et le périmetre en rouge. Peu être existe t'il une librairie python pour effectuer cette tache qui me semble assez complexe.


    Pour le moment voici mon logiciel qui utilise tkinter.




    Merci de votre aide

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 265
    Points : 1 843
    Points
    1 843
    Par défaut
    Sans grosse certitude, tu peux peut-être regarder ça https://shapely.readthedocs.io/en/la...t.offset_curve
    Dans l'idée de la fonction, on a un sens de lecture des coordonnées, et on fait un décalage à droite ou à gauche d'une certaine valeur; c'est peut-être applicable sans utiliser le package. (j'ai cru avoir lu que 1m, ça se jouait au niveau de la sixième décimale de la coordonnée)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 79
    Points : 37
    Points
    37
    Par défaut
    Merci pour le lien, je vais regarder

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 79
    Points : 37
    Points
    37
    Par défaut
    Je viens de tester (j'utilise pycharm), j'ai cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    C:\Users\cyril\AppData\Local\Microsoft\WindowsApps\python3.12.exe C:\Users\cyril\Documents\projet_tondeuse\perimetre\shaply1.py 
    Traceback (most recent call last):
      File "C:\Users\cyril\Documents\projet_tondeuse\perimetre\shaply1.py", line 1, in <module>
        import matplotlib.pyplot as plt
      File "C:\Users\cyril\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\matplotlib\__init__.py", line 276, in <module>
        _check_versions()
      File "C:\Users\cyril\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\matplotlib\__init__.py", line 270, in _check_versions
        module = importlib.import_module(modname)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.1264.0_x64__qbz5n2kfra8p0\Lib\importlib\__init__.py", line 90, in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\cyril\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\kiwisolver\__init__.py", line 8, in <module>
        from ._cext import (
    ImportError: DLL load failed while importing _cext: Le module spécifié est introuvable.
    Je vais essayer demain sur un autre pc, si quelqu'un a une idée du problème?

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 893
    Points : 7 249
    Points
    7 249
    Par défaut
    Bonjour,

    Citation Envoyé par carlita_84
    DLL load failed while importing _cext
    Et vous avez dû logiquement faire une recherche sur votre moteur de recherches préférés je suppose ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 79
    Points : 37
    Points
    37
    Par défaut
    Je suis maintenant sur un autre pc, je test ce scripte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    import matplotlib.pyplot as plt
    from shapely import LineString, get_point
    from shapely.plotting import plot_line, plot_points
     
    from figures import SIZE, BLUE, GRAY, set_limits
     
    line = LineString([(0, 0), (1, 1), (0, 2), (2, 2), (3, 1), (1, 0)])
    line_bounds = line.bounds
    ax_range = [int(line_bounds[0] - 1.0), int(line_bounds[2] + 1.0)]
    ay_range = [int(line_bounds[1] - 1.0), int(line_bounds[3] + 1.0)]
     
    fig = plt.figure(1, figsize=(SIZE[0], 1.5 * SIZE[1]), dpi=90)
     
    # 1
    ax = fig.add_subplot(221)
     
    plot_line(line, ax, add_points=False, color=GRAY)
    plot_points(get_point(line, 0), ax=ax, color=GRAY)
    offset = line.parallel_offset(0.5, 'left', join_style=1)
    plot_line(offset, ax=ax, add_points=False, color=BLUE)
     
    ax.set_title('a) left, round')
    set_limits(ax, -2, 4, -1, 3)
     
    #2
    ax = fig.add_subplot(222)
     
    plot_line(line, ax, add_points=False, color=GRAY)
    plot_points(get_point(line, 0), ax=ax, color=GRAY)
    offset = line.parallel_offset(0.5, 'left', join_style=2)
    plot_line(offset, ax=ax, add_points=False, color=BLUE)
     
    ax.set_title('b) left, mitred')
    set_limits(ax, -2, 4, -1, 3)
     
    #3
    ax = fig.add_subplot(223)
     
    plot_line(line, ax, add_points=False, color=GRAY)
    plot_points(get_point(line, 0), ax=ax, color=GRAY)
    offset = line.parallel_offset(0.5, 'left', join_style=3)
    plot_line(offset, ax=ax, add_points=False, color=BLUE)
     
    ax.set_title('c) left, beveled')
    set_limits(ax, -2, 4, -1, 3)
     
    #4
    ax = fig.add_subplot(224)
     
    plot_line(line, ax, add_points=False, color=GRAY)
    plot_points(get_point(line, 0), ax=ax, color=GRAY)
    offset = line.parallel_offset(0.5, 'right', join_style=1)
    plot_line(offset, ax=ax, add_points=False, color=BLUE)
     
    ax.set_title('d) right, round')
    set_limits(ax, -2, 4, -1, 3)
     
    plt.show()


    J'ai maintenant cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    C:\Users\cyril\PycharmProjects\test1\venv\Scripts\python.exe C:\Users\cyril\PycharmProjects\test1\shapely1.py 
    Traceback (most recent call last):
      File "C:\Users\cyril\PycharmProjects\test1\shapely1.py", line 5, in <module>
        from figures import SIZE, BLUE, GRAY, set_limits
    ImportError: cannot import name 'SIZE' from 'figures' (C:\Users\cyril\PycharmProjects\test1\venv\lib\site-packages\figures\__init__.py)

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 79
    Points : 37
    Points
    37
    Par défaut
    Toujours sur mon deuxieme pc, Je viens de remplir le fichier __init__.py avec ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # __init__.py dans le module figures
     
    # Définissez les constantes
    SIZE = (6, 4)  # ou toute autre valeur appropriée
    BLUE = 'blue'  # ou une définition de couleur appropriée
    GRAY = 'gray'  # ou une définition de couleur appropriée
     
    # Définissez la fonction set_limits
    def set_limits(ax, x_min, x_max, y_min, y_max):
        ax.set_xlim(x_min, x_max)
        ax.set_ylim(y_min, y_max)
    Et la sa semble fonctionner, l'exemple donne ceci:


    Nom : Screenshot_7.png
Affichages : 71
Taille : 98,4 Ko

    Curieux que sa fonctionne pas sur mon premier pc, la version de python est differente, ici j'ai du python 3.9, je vais essayer de reproduire sa sur mon 1er pc

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 79
    Points : 37
    Points
    37
    Par défaut
    Je viens de re-tester sur mon premier pc avec python 3.9 j'ai toujours un problème de dll apparement:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    C:\Users\cyril\AppData\Local\Programs\Python\Python39\python.exe C:\Users\cyril\Documents\shapely\shapely1.py 
    Traceback (most recent call last):
      File "C:\Users\cyril\Documents\shapely\shapely1.py", line 1, in <module>
        import matplotlib.pyplot as plt
      File "C:\Users\cyril\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\__init__.py", line 291, in <module>
        _check_versions()
      File "C:\Users\cyril\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\__init__.py", line 285, in _check_versions
        module = importlib.import_module(modname)
      File "C:\Users\cyril\AppData\Local\Programs\Python\Python39\lib\importlib\__init__.py", line 127, in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
      File "C:\Users\cyril\AppData\Local\Programs\Python\Python39\lib\site-packages\kiwisolver\__init__.py", line 8, in <module>
        from ._cext import (
    ImportError: DLL load failed while importing _cext: Le module spécifié est introuvable.
    Je ne trouve pas le problème

  9. #9
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 028
    Points : 9 422
    Points
    9 422
    Par défaut
    hello,
    c'est certainement le Visual C++ Redistributable for Visual Studio 2015 qui n'est pas installé.
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  10. #10
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 201
    Points : 4 665
    Points
    4 665
    Par défaut
    Citation Envoyé par carlita_84 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    File "C:\Users\cyril\AppData\Local\Programs\Python\Python39\lib\site-packages\kiwisolver\__init__.py", line 8, in <module>
        from ._cext import (
    ImportError: DLL load failed while importing _cext: Le module spécifié est introuvable.
    Je ne trouve pas le problème
    Pourquoi faire 36 messages/tests sur cette erreur qui est pourtant claire, il suffit de lire la doc (comme toujours)
    https://kiwisolver.readthedocs.io/en...g-your-install

    Il te dit quelle librairie plante et qu'il manque quelque chose, aller dans sa doc et lire le paragraphe "installation" n'a rien que compliqué.
    $moi= ( !== ) ? : ;

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 79
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello,
    c'est certainement le Visual C++ Redistributable for Visual Studio 2015 qui n'est pas installé.
    Ami calmant, J.P

    Merci je vais tester

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 79
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello,
    c'est certainement le Visual C++ Redistributable for Visual Studio 2015 qui n'est pas installé.
    Ami calmant, J.P

    C'était bien sa

    J'arrive bien au résultat voulu, mais j'ai du tricher car j'avais une sorte de noeud dans coordonées gps.(une boucle)

    Nom : Capture d'écran 2024-06-11 183851.png
Affichages : 56
Taille : 59,6 Ko

    Je laisse le code pour ceux qui chercheraient a faire pareil:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    import matplotlib.pyplot as plt
    from shapely.geometry import LineString
     
    # Coordonnées des points GPS
    coords = [
        (43.86813557333333, 5.084475755),
        (43.86812814333334, 5.084537345),
        (43.86812745, 5.084551955),
        (43.86810116, 5.084578025),
        (43.868104536666664, 5.084578775),
        (43.868104865, 5.08457851),
        (43.868104865, 5.08457851),
        (43.868094666666664, 5.0846223083333335),
        (43.86808087, 5.084651008333333),
        (43.868069425, 5.084677441666667),
        (43.868060281666665, 5.084690403333333),
        #(43.86802160166667, 5.084784855),
        #(43.86796747333333, 5.084810366666667),
        #(43.86797120666667, 5.084804748333333),
        (43.867972695, 5.084802591666667),
        (43.86797477333333, 5.084801596666667),
        (43.86794952166667, 5.084933823333333),
        (43.86792595833333, 5.084927461666667),
        (43.867920745, 5.084927331666667),
        (43.86791683333333, 5.084934075),
        (43.86791683333333, 5.084934075),
        (43.867914436666666, 5.0849431916666665),
        (43.867914436666666, 5.0849431916666665),
        (43.867905035, 5.08500559),
        (43.86790705333333, 5.08501316),
        (43.86790564333333, 5.085010901666666),
        (43.867900608333336, 5.085009266666667),
        (43.86787631833333, 5.084999491666666),
        (43.86787631833333, 5.084999491666666),
        (43.867867716666666, 5.08499414),
        (43.867859626666664, 5.0849913),
        (43.867852035, 5.0849899616666665),
        (43.86782328, 5.084977881666667),
        (43.86785492833334, 5.084700065),
        (43.86783610333333, 5.084675985),
        (43.86785712166667, 5.084523676666667),
        (43.867870315, 5.084365421666667),
        (43.867926875, 5.084017386666667),
        (43.86808408666667, 5.0840620733333335),
        (43.868076306666666, 5.084092915),
        (43.86802215666667, 5.084078638333334),
        (43.868009771666664, 5.084080471666667),
        (43.86800565833333, 5.084114193333333),
        (43.86799056833333, 5.084237133333334),
        (43.868090308333336, 5.0842674783333335),
        (43.86809951666667, 5.084289266666667),
        (43.868105871666664, 5.084294903333333),
        (43.868121466666665, 5.084319156666667),
        (43.86813372, 5.084342313333333),
        (43.86814266333333, 5.084392235),
        (43.86813333166667, 5.0844649466666665)
    ]
     
    # Création de la ligne à partir des coordonnées
    line = LineString(coords)
     
    # Décalage parallèle de la ligne (vers la gauche)
    offset = line.parallel_offset(0.000008, 'left', join_style=3, mitre_limit=5)
     
    # Inversion des coordonnées x et y pour l'affichage
    coords_x_inverted = [(coord[1], coord[0]) for coord in coords]
    offset_x_inverted = [(coord[1], coord[0]) for coord in offset.coords]
     
    # Affichage des lignes
    fig, ax = plt.subplots()
    ax.plot(*zip(*coords_x_inverted), color='blue')  # Ligne originale
     
    # Tracer chaque point de la géométrie décalée
    for point in offset_x_inverted:
        ax.plot(point[0], point[1], 'ro')  # 'ro' pour indiquer des points rouges
     
    # Tracer des lignes entre les points rouges
    for i in range(len(offset_x_inverted) - 1):
        ax.plot([offset_x_inverted[i][0], offset_x_inverted[i+1][0]],
                [offset_x_inverted[i][1], offset_x_inverted[i+1][1]], color='red')
     
    plt.show()

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 265
    Points : 1 843
    Points
    1 843
    Par défaut
    Sinon pour figures, on peut trouver assez facilement (recherche google "python figures shapely" par exemple), on découvre qu'il s'agit d'un fichier présent sur le github du projet shapely, et qu'il faut le télécharger manuellement.
    https://gis.stackexchange.com/questi...s-this-library
    https://github.com/shapely/shapely/tree/main/docs/code

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment sont calculés les points et nombre de points qui ne bouge plus !
    Par vttman dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 4
    Dernier message: 20/01/2017, 07h20
  2. Réponses: 4
    Dernier message: 11/12/2011, 07h40
  3. Récupérer tous les points GPS suivant une distance
    Par megaloplex dans le forum SPARQL
    Réponses: 0
    Dernier message: 29/07/2011, 15h25
  4. Réponses: 2
    Dernier message: 15/07/2009, 22h51
  5. Calculer les points
    Par ameno_123 dans le forum Langage
    Réponses: 5
    Dernier message: 20/09/2007, 22h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo