Nous nous promenons sagement dans la ville: comme j'ai fait le service pour construire des itinéraires de randonnée intéressants

UPD: puisque le sujet s'est bien déroulé et a montré qu'il existe une demande pour un tel service, je vais le développer davantage. J'ai commencé un public VKontakte pour recueillir des commentaires et publier des informations de mise à jour https://vk.com/sightsafari

Un quartier inconnu de la ville, un peu de temps libre et le besoin (ou l'envie) de se rendre à pied au métro / hôtel / gare - probablement, tout le monde au moins une fois s'est retrouvé dans cette situation. En même temps, d'une part, je veux voir des endroits beaux et intéressants, mais d'autre part, le temps limité ne me permet pas de trop dévier de la route directe.

La situation est encore plus compliquée s'il n'y a pas d'attractions majeures à proximité que tout le monde connaît et qui pourraient être incluses dans votre itinéraire après une courte recherche sur Internet. Que faire si vous êtes coincé dans un Kupchino, dont vous avez seulement entendu qu'il valait mieux ne pas rester coincé là-bas? Nous devons aller sur le navigateur, en espérant que sur le chemin il y aura quelque chose d'intéressant. Cependant, les navigateurs populaires ne prennent en compte que la distance et le temps de trajet, mais ne tiennent pas compte de l'intérêt de l'itinéraire. Je suis tombé sur plus de projets en essayant de prendre en compte la commodité d'un itinéraire à pied (en contournant les autoroutes bruyantes), mais je veux y aller non seulement confortablement, mais aussi voir de la beauté.



En réfléchissant un peu, j'ai décidé de reprendre moi-même cette tâche. Comme toujours, l'idée générale de l'algorithme est assez simple, mais le diable est dans les détails. Et dans le cas de la navigation, les petites choses peuvent être assez importantes et présenter un risque pour la santé, car il est peu probable qu'un touriste soit heureux lorsque le navigateur le conduit dans la nature sauvage d'une zone industrielle à moitié abandonnée pour un petit panneau commémoratif (travail, une fois que c'est arrivé) .

Description de l'algorithme et exemples de travaux sous la coupe, lien à la fin.

Idée principale


Mon idée initiale était la suivante: télécharger la carte Open Street Map, l'analyser, déchirer des informations sur tous les objets potentiellement intéressants pour les piétons (nous devions encore décider de leur liste), dessiner des zones tampons autour d'eux. Nous recherchons des moyens avec un cadre standard, un peu du processus de construction d'un graphique de navigation, de sorte que dans ces zones, les poids des bords deviennent plus bas et organisent ainsi l'attraction des itinéraires piétonniers vers eux.

Aussitôt dit, aussitôt fait. Pour trouver le chemin, nous avons utilisé la bibliothèque GraphHopper, qui peut lire les cartes OSM de la boîte, construire des itinéraires pour différents types de transport (voiture, piéton, vélo), a plusieurs algorithmes différents pour trouver le chemin (recherche simple, recherche d'itinéraires alternatifs, toutes sortes d'options accélérées et optimisées ) et peut prétraiter le graphique de navigation pour accélérer la recherche (la recherche de base dans la ville fonctionne très rapidement, en quelques millisecondes). Pour mon exemple de travail, mon Saint-Pétersbourg natal a été choisi - ici, j'ai pu évaluer moi-même la qualité et l'intérêt des itinéraires construits.

En conséquence, la version de base de l'algorithme a été collée sur un genou pendant quelques soirées, puis un voyage passionnant a commencé le long du râteau et de petites choses, dans lesquelles le diable est connu et ment, dont je parlerai plus tard.

Objets pour les touristes et problèmes avec OSM


Dans l'Open Street Map, chaque objet est une géométrie (Node, Way ou Relation) plus un certain nombre de paires de chaînes clé-valeur.

Voici le Palais d'hiver dans OSM:



Le problème est que, comme OSM est une carte ouverte et modifiable par les participants, la standardisation est boiteuse sur les deux jambes. Pour désigner le même type d'objets, un ensemble différent de balises et une combinaison différente d'objets peuvent être utilisés, certaines des balises sont considérées comme «canoniques» et décrites sur le wiki, mais il existe toujours un tas d'options, à la fois simplement alternatives et franchement erronées, mais néanmoins utilisées . Par conséquent, tout code qui fonctionne avec OSM (en particulier les navigateurs et les moteurs de rendu) est obligé de prendre tout cela en compte et contient un tas de code pour gérer ces cas spéciaux.

Par exemple, le tag Highway = non spécifié ne signifie pas «une sorte de route d'un type inconnu», comme le pensent de nombreux cartographes, mais un type de route très spécifique selon la classification européenne, mais ils la façonnent n'importe où à cause du nom. De plus, ce type de route suppose la présence d'un trottoir ou d'un trottoir pour piétons, donc le navigateur construit des itinéraires piétonniers le long de celui-ci, tandis que les piétons ne se rendent pas sur une telle route à Saint-Pétersbourg (c'est la chaussée de la rue). Ou un autre exemple: addr: nom de maison, nous utilisons parfois une balise pour le nom des bâtiments, par exemple, pour une raison quelconque, l'aile ouest du bâtiment de l'état-major sur la place du Palais porte le nom de cette balise. Alors que les guides OSM disent qu'il ne devrait être utilisé que dans les pays où les noms sont utilisés à la place des numéros de maison (au Japon, cela semble être le cas), et pour les noms de bâtiments officiels, utilisez l'étiquette de nom, etc.

Un autre moment qui me fait chier est le marquage des espaces verts. Il existe deux balises différentes à cet effet, loisirs = parc et utilisation du sol = herbe. Sur la carte, ils ont à peu près la même apparence: juste une zone verte, de couleur légèrement différente. En conséquence, ils sont mélangés comme ils le souhaitent. Pour cette raison, souvent la pelouse de séparation entre les chaussées de la rue devient un "parc" et commence à attirer des sentiers de randonnée.

Toutes ces nuances ont dû être découvertes par nous-mêmes lorsque nous avons construit et analysé des itinéraires.
En tant qu'ensemble d'objets d'intérêt pour les piétons, la liste suivante a finalement été sélectionnée:

  • Attractions touristiques marquées tourisme
  • Espaces verts. loisirs = parc, jardin. Après quelques délibérations, des cimetières landuse = cemetry ont été ajoutés. D'une part, il y a une attraction moyenne, de l'autre, par exemple, sur l'île Vasilievsky à Saint-Pétersbourg, la seule grande zone verte est le cimetière, que les habitants utilisent à la place du parc, mais il n'y a pas de vrais parcs là-bas.
  • Eau: rivières, lacs, étangs. Il y a un méli-mélo d'eau, des balises de voie navigable et un tas de valeurs en double. C'est tellement agréable de marcher le long de la promenade par une chaude journée. En tout cas, je le pensais jusqu'à ce que j'essaie de traiter Smolensk - il s'est avéré soudainement qu'au fond de la rivière ce n'était pas un beau remblai comme le nôtre à Saint-Pétersbourg, mais un terrain vague envahi et jonché duquel les piétons préféreraient rester à l'écart. Mais jusqu'à présent, il n'a pas été possible de distinguer ces situations uniquement de la carte.
  • Bâtiments et structures historiques, marqués historiques. Ils sont généralement tout simplement magnifiques
  • Toutes autres petites choses en ville marquées d'une étiquette d'agrément. Cela a beaucoup de sens, je n'en ai choisi que quelques-uns, par exemple, une horloge de rue (horloge) - elle est souvent magnifique, les édifices religieux (place_of_worship), le street art tout le monde (graffiti) et quelques autres
  • Rues et places piétonnes autoroute = piétonne

Au cours de l'étude, j'ai réalisé qu'en plus des zones positives qui attirent les piétons, il est nécessaire d'ajouter des zones négatives qui les repoussent. Cette liste comprend jusqu'à présent:

  • Utilisation des terres des bâtiments = construction. Les piétons ne sont pas très contents de marcher sous un échafaudage, dans la poussière qui vole d'un chantier de construction
  • Zones industrielles et garages landuse = industriels, garages. À ce moment-là, cette nuance avec l'institution d'un piéton s'est produite (et nous, à l'Institut de design et d'urbanisme de l'ITMO, l'avons testée sur des étudiants qui ont suivi des itinéraires tracés et ont ensuite rédigé des critiques dans le cadre d'une étude du confort de marche de la région de Petrograd) dans la jungle de la zone industrielle de Lenpolygraphmash. Il s'est avéré que là-bas, tout le quartier n'est pas marqué avec cette étiquette (comme c'est généralement le cas pour le marquage de grandes zones industrielles), mais chaque bâtiment est séparé.
  • Idéalement, je veux aussi éloigner les piétons des grandes autoroutes de la ville, où il y a de la poussière, du bruit, beaucoup de voitures et généralement il n'y a rien à regarder. Mais jusqu'à présent, il n'a pas été possible de les détecter sans ambiguïté. Dans OSM, il n'y a essentiellement que le nombre de voies de circulation, mais ce critère n'est pas suffisant (de nombreuses rues touristiques importantes, comme Nevsky Prospect, sont également à plusieurs voies)

Le même Lenpolygraphmash, contenant quelque part dans sa nature un monument à l'imprimerie, et où mon algorithme a traîné le pauvre étudiant



L'importance des attractions


De toute évidence, les vues sont différentes. Il y a de grands objets de renommée mondiale - comme la Tour Eiffel ou la cathédrale Saint-Isaac à Saint-Pétersbourg, qui attirent un grand nombre de touristes, et pour visiter, les gens peuvent faire un crochet décent. Et il y a quelques petites décorations de petites villes - du street art, une petite sculpture dans la cour que les gens ne sont prêts à voir qu'en chemin et ne veulent pas les faire glisser de loin. Pour la construction correcte d'itinéraires intéressants et pratiques, il était nécessaire d'apprendre à séparer les différentes catégories d'attractions, et tout ce que nous avons dans OSM est une certaine géométrie et un ensemble de balises. J'ai dû trouver un ensemble de règles empiriques pour attribuer l '«importance» d'un point d'intérêt qui détermine davantage les changements de poids dans le graphique.

Initialement, l'importance est nulle et augmente si les conditions suivantes sont remplies:

  • +3 s'il y a une étiquette historique - seuls les bâtiments historiques importants l'ont, et même pas tous
  • +3 pour la présence de balises wikipedia ou wikidata. Seuls les objets importants ont généralement leurs propres pages wiki.
  • +1 pour la présence d'un lien ou d'une URL - encore une fois, tout le monde n'a pas son propre site, mais souvent cette balise mène à une page d'un certain catalogue et de petits objets l'ont
  • +1 pour chaque étiquette de nom. Le nom peut être défini de différentes manières, il peut y avoir toutes sortes d'anciens noms pour les noms historiques ou les noms traduits dans d'autres langues. Encore une fois, la présence de nombreux noms indique l'importance suffisante de l'objet (puisque quelqu'un était fatigué de les déposer tous)
  • bâtiment: architecture - style architectural, généralement revêtu de toutes sortes de beaux monuments architecturaux

Cette liste est déterminée empiriquement et vous permet à tout le moins de séparer le Palais d'Hiver des graffitis sans nom à la périphérie. En conséquence, une importance de 0 signifie un petit objet local sans nom (un brin de verdure, des graffitis), environ 3-4 sont déjà quelque chose d'intéressant (une église, une place où vous pouvez vous asseoir et vous détendre), plus près de 10, les attractions au niveau de la ville commencent, le même Palais d'Hiver.

La liste n'est pas parfaite et s'appuie fortement sur les données OSM, qui sont souvent incomplètes. Par exemple, la porte Narva n'avait initialement qu'une seule unité d'importance, car rien à part le nom n'y était apposé. J'ai dû aller moi-même à OSM et ajouter les noms, le style, les années de construction, la hauteur (pour déterminer correctement la visibilité, la suite), etc. En général, cela présente également un intérêt public - pour améliorer la qualité des itinéraires, je vais de temps en temps sur OSM et y pose des balises manquantes, qui peuvent ensuite être utilisées par d'autres navigateurs ou programmes.

Domaines d'influence


Les attractions sont de tailles différentes. Une petite sculpture doit être vue à une distance ne dépassant pas 5 à 7 mètres. Le Cavalier de bronze est bien visible de 20 à 30. La cathédrale Saint-Isaac, l'un des plus hauts bâtiments du centre-ville, est décemment visible de 200 à 300 (par cela, je comprends qu'il n'est pas nécessaire qu'un touriste se rapproche, mais il est assez confortable de profiter de la vue de cette distance, on peut le voir même à un kilomètre de l'autre rive de la Neva , mais sans détails). Comment déterminer à quelle distance l'attraction devrait affecter les itinéraires des piétons?

Le cavalier de bronze et le dôme de la cathédrale Saint-Isaac au loin



Tout d'abord, j'ai construit des rayons de visibilité empiriques. Ils dépendent de toutes les informations disponibles sur l'attraction et la transforment en l'un des quatre rayons: petit 30 mètres, moyen 100, grand 250 et énorme 350 mètres.

Un peu à part, la visibilité des rivières et des parcs. Pour eux, je mets 30 mètres, soit correspond approximativement à la largeur de la promenade ou de la rue autour du parc. Puisque regarder le parc de loin est plutôt inutile, vous devez aller à côté.

Le type de visibilité est déterminé par les règles:

  • Les objets ponctuels (c'est-à-dire spécifiés par le type Point OSM) sont de faible visibilité, ce sont généralement de petits monuments et du street art
  • Mais le point et avec la balise historique est Medium, car ce sont souvent de grands monuments sur de hauts socles, comme le même cavalier de bronze
  • Les zones de moins de 20 * 20 mètres (chemin ou relation) sont moyennes
  • Plus - Large
  • Si l'objet a une hauteur d'étiquette (hauteur en mètres) ou un bâtiment: niveaux (nombre d'étages), alors à une hauteur de plus de 50 mètres, il est considéré comme un énorme - cela est juste spécialement conçu pour Isaac et d'autres grandes cathédrales et bâtiments visibles de loin.

Mais un problème s'est posé: dans les conditions d'un développement dense du centre historique de Saint-Pétersbourg, l'approche naïve avec des rayons n'a pas fonctionné, car la zone de visibilité réelle d'un temple situé dans la cour arrière était beaucoup plus petite, en fait, elle n'était visible que depuis la section de rue directement en face. J'ai dû commencer à construire des polygones de visibilité honnêtes (enfin, presque).

L'église Sainte-Catherine se dresse au fond de la cour, entourée de maisons de tous côtés:



Il fallait d'abord déterminer les obstacles. Eh bien, tout est simple, j'ai pris et lu à partir des données OSM tous les polygones avec la balise de construction. Ce seront des polygones qui bloqueront notre visibilité. Il a ensuite écrit un algorithme naïf simple pour construire un polygone pour la visibilité d'un point en utilisant le lancer de rayons. Je n'ai pas besoin d'une grande précision là-bas, une douzaine de rayons par point suffisaient. Au début, j'ai pris le centre de gravité de la géométrie du point de repère sans plus tarder, mais cela n'a pas donné les meilleurs résultats pour les bâtiments longs (longs et étroits). Par conséquent, à l'avenir, pour les grandes attractions, j'ai commencé à prendre trois points - le centroïde et les deux points les plus éloignés et l'un de l'autre à la limite extérieure. Pourquoi n'ai-je pas créé une visibilité honnête? Parce que si l'algorithme pour construire la région de visibilité d'un point est trivial (nous laissons les rayons sortir du point dans toutes les directions, voyons où ils ont traversé les obstacles les plus proches, connectez ces points), alors il est beaucoup plus difficile de construire une visibilité honnête d'un bord (et, enfin, d'un polygone) (le premier vient à décision de la tête - pour renforcer la visibilité des deux extrémités des côtes et combiner - évidemment faux).

Le résultat est une bonne approximation. Il se construit imparfaitement, mais pour les besoins de la navigation piétonne, une telle précision nous suffit. Le seul problème est qu'il ne prend pas en compte la hauteur des bâtiments, c'est-à-dire tout petit stand bloquera notre vue sur le clocher à cinq étages. Mais il n'y a rien à faire - les données OSM ne contiennent pas toujours un certain nombre d'étages, et il est beaucoup plus difficile de créer des volumes de visibilité en 3D. Bien que j'y revienne peut-être.

Construction de polygones de visibilité pour cette église et les églises voisines



La beauté de l'itinéraire et comment l'augmenter


Ainsi, nous avons appris à considérer l'importance et la visibilité des attractions et semblons avoir commencé à construire de bons itinéraires. En tout cas, il en était ainsi, alors que je testais dans les régions centrales de Saint-Pétersbourg, qui ont une très forte densité de beautés par kilomètre carré.

Cependant, cela valait la peine de s'éloigner un peu du centre, quand soudain l'algorithme a commencé à reconnaître son impuissance. Et l'itinéraire qu'il a construit a commencé à coïncider avec le plus court. Étant donné que le chat a perdu beaucoup de vues dans ces domaines, ils sont situés loin les uns des autres.Par conséquent, lors de la recherche d'un chemin utilisant la métrique combinée «beauté + distance», la contribution du premier terme s'est avérée presque nulle, en conséquence, l'algorithme a simplement construit les itinéraires les plus courts.

Bien sûr, on pourrait toujours dire: «Nous ne sommes pas comme ça, ce sont nos villes ennuyeuses», mais ce ne serait pas très correct. Par conséquent, je me suis demandé comment évaluer l'itinéraire construit et comment l'améliorer. La solution la plus simple qui vient immédiatement à l'esprit est d'étendre l'itinéraire en y forçant un crochet à n'importe quel point d'intérêt qui a été omis.

Maintenant, dans les cas où a) l'importance totale de toutes les attractions de l'itinéraire est inférieure d'un kilomètre à une certaine valeur, ou b) l'utilisateur lui-même a choisi de construire l'itinéraire le plus intéressant, mon algorithme essaie de l'améliorer. Pour ce faire, l'itinéraire initial est construit, un tampon est pris autour de lui (son épaisseur est déterminée par la longueur, plus l'itinéraire est long - plus le crochet est autorisé à faire), plusieurs nouveaux sites (non encore inclus dans l'itinéraire) avec un score> 2 sont recherchés à l'intérieur de ce tampon (nous ne voulons pas faire des hameçons par kilomètre aux jardins publics non-nom) et de nouveaux itinéraires sont tracés du point de départ à cette cible intermédiaire, et de celui-ci au point de destination. Dans le même temps, la longueur est en outre contrôlée, en conséquence, nous devons obtenir un itinéraire pas plus de deux fois plus long que le chemin le plus court entre les points de départ et d'arrivée.

La première version de l'algorithme (à gauche) était impuissante à trouver quelque chose d'intéressant et a construit l'itinéraire le plus court. Mais la version avec l'ajout d'une attraction intermédiaire (à droite) comprenait le DOT KV-19 , il est dans le coin inférieur droit de l'itinéraire (à ce niveau de zoom, il n'est pas visible, mais le service l'affichera dans la liste et vous permettra de le trouver sur la carte en cliquant sur le nom) .



Le même bunker. En général, à Kupchino, il y a suffisamment de tels objets liés à la défense de Leningrad, car c'est là que les lignes défensives de la ville sont passées:



Bien sûr, loin de tout piéton acceptera de faire un détour pour le plaisir de certains insignifiants à ses yeux. C'est pourquoi le service affiche la longueur de l'itinéraire par rapport au plus court et la liste des attractions sur celui-ci, et seul l'utilisateur peut décider s'il est intéressé par un tel itinéraire. De plus, il y a un curseur qui vous permet de réduire (ou vice versa d'augmenter) le crochet maximum autorisé.

En pratique, j'ai dû faire face à d'autres problèmes et bizarreries. - «» . . , , . , . «» ( ), , .

. , , . . . . , ( ), , . , — . . . , , .


sightsafari.city
( OSM-, ), , . : , , , — .

. , :



. , , , .



. , .



: ( ) « » . , , , .



Conclusion


-, ( ). , . , ( ), - .

— , , , ( , , ), - . - OSM, - , ( , , 2-3 , ).

UPD: , , , , , , --, , , , , , , . , .

UPD 2: OSM, , ( , ), , . - , ( ) - , ( ).

UPD 3: , https://vk.com/public168028574

Source: https://habr.com/ru/post/fr414433/


All Articles