Où suis-je? (Géolocalisation, Emacs, Perl)

C’est l’une de ces questions: “il y a sûrement un utilitaire générique qui vaut mieux que le truc rapide et sale que j’ai préparé”. Comme dans, je sais comment le faire de plusieurs manières ad hoc, mais aimerais utiliser un standard.

BREF: Je recherche des outils assez standard et omniprésents pour déterminer ma situation géographique actuelle. Appelable depuis la ligne de commande Linux / UNIX, Perl, Emacs, etc.

DÉTAIL:

Une situation sortingviale inspire cette question (mais il y a sans doute des applications plus importantes): j’utilise le mode org d’emac, souvent pour enregistrer un journal ou un journal. Je n’utilise pas vraiment le journal officiel du mode org – principalement, je laisse tomber les horodatages dans un journal en mode org ordinaire, caché dans des métadonnées qui ressemblent à un lien.

[[metadata: timestamp="" ][03:02 PM]] 

Comme vous pouvez le voir, j’ai depuis longtemps ajouté la possibilité d’enregistrer votre position. Mais jusqu’ici j’ai dû le régler manuellement. Je suis paresseux et néglige souvent de définir l’emplacement manuellement. (Note mineure: j’ai enregistré la dernière fois que j’ai défini manuellement l’emplacement, utile lorsque je me déplace et que je néglige de modifier manuellement mon emplacement.

Je préférerais de beaucoup avoir un code qui infère automatiquement ma position. Particulièrement depuis que je voyage beaucoup au cours du dernier mois, mais probablement plus utile pour la demi-douzaine de lieux où je me déplace tous les jours: à la maison, au travail, au bord de la mer, .

Je peux trouver mon emplacement à l’aide de plusieurs outils, tels que

  • Where Am I – Voir votre position actuelle sur Google Maps – ctrlq.org/maps/where/

  • http://www.wolframalpha.com/input/?i=Where+am+I%3F

  • Packages Perl CPAN tels que IP :: Location – pour mapper une adresse IP à un emplacement

    • note: ne fonctionne pas nécessairement pour une adresse IP privée, derrière NAT
    • mais peut combiner avec traceroute

et heuristiques telles que regarder les SSID WiFi, etc.

J’ai déjà codé quelque chose.

Mais … il y a plus de profondeur que j’ai codé.

Aucune des techniques ci-dessus n’est parfaite – par exemple, je n’ai peut-être pas net.connectivity, etc. Certaines sont spécifiques au système d’exploitation.

S’il existe déjà une installation open source, je devrais l’utiliser.

Par conséquent, ma question est la suivante: existe-t-il un service de géolocalisation assez répandu?

Ma liste d’envies

  • Works OS croisés

    • Cygwin
    • Linux
    • Android? OS-X? (utilisez simplement la norme OS)
    • essaie par exemple d’exécuter une commande comme Windows netsh, et si cela échoue …
  • Utilitaire de ligne de commande

    • Perl, etc.
    • appelable dans emacs
    • parce que c’est là que je veux l’utiliser
    • mais je suis sûr que je voudrais pouvoir l’utiliser ailleurs.
  • Peut se connecter à des services de géolocalisation standard largement disponibles

    • Par exemple, IP Perl CPAN :: Emplacement, IP-> pays / ville / …
    • par exemple Google, etc., déduire l’emplacement géographique du navigateur
  • Fonctionne même lorsque vous ne pouvez pas vous connecter aux services de géolocalisation standard ou à Internet

    • par exemple cache le dernier emplacement
    • par exemple, capacité d’associer un nom à un environnement de réseau privé
    • par exemple si dans un laboratoire isolé du réseau
    • ou à la maison, connecté au WiFi, mais haut débit en panne
    • par exemple regarder le wifi SSID
  • Personnalisable

    • peut utiliser des informations qui ne font partie d’aucune firebase database de géolocalisation omniprésente
    • Par exemple, je peux reconnaître certains identifiants SSID comme étant mon domicile ou mon bureau.
  • Appris

    • Sait (ou peut apprendre) que certains SSID sont mobiles, pas géographiquement fixés (par exemple, le point d’access mobile sur mon téléphone)
    • mais certains sont (principalement) géographiquement fixes (par exemple, le WiFi chez soi connecté au modem câble)
  • Apprentissage

    • peut remplacer des inférences incorrectes (bases de données géographiques parfois erronées, en particulier VPN)
    • peut étendre ou rendre précis
    • Cela ne me dérangerait pas de pouvoir écrire des règles
    • mais encore mieux si un moteur d’inférence maintient les règles elles-mêmes.
    • par exemple, si je corrige l’emplacement, faites des déductions sur les coordonnées SSID utilisées pour l’inférence erronée
  • Heuristique

    • Windows 7 “netsh wlan show interfaces”
    • Windows / Cygwin ipconfig
    • * IX ifconfig
    • traceroute / tracert
    • recherche IP inversée
  • Mise en cache

    • pour éviter les recherches coûteuses
    • mais le cache n’est PAS global – peut être fait par application
    • certaines applications peuvent vouloir contourner le cache
    • d’autres peuvent utiliser d’anciennes données

GeoClue semble satisfaire au moins certaines de vos exigences.

Pour convertir les coordonnées en adresse lisible par l’homme, on peut utiliser l’ API OSM Nominatim .

Pourquoi n’avez-vous pas simplement envisagé d’utiliser le GPS? Vous pouvez simplement append des coordonnées à vos métadonnées et les lier à une adresse (allant de nombres simples à un lieu réel) lors de la lecture.

De cette façon, presque tout peut être marqué avec des coordonnées.

Dans gnu / linux et autres unices, gpds devrait le faire.

Dans les fenêtres, je n’en ai aucune idée.

Dans Android, la couche de script pour Android devrait fournir un access au périphérique GPS.

Je ne suis pas sûr que cela réponde à vos exigences, mais je propose simplement.

Vous pouvez utiliser wget pour extraire des données d’un de ces sites, par exemple wget http://www.wolframalpha.com/input/?i=Where+am+I%3F , puis rechercher les données du fichier juste téléchargé

Laisses-moi le mettre comme ça. Vous avez l’intention de suivre votre position sans utiliser de dispositif de positionnement tel que GPS. Cela se fait en fonction de votre position géographique actuelle à partir du point d’access réseau le plus proche. Les points d’access au réseau sont généralement codés géographiquement. Je suppose que vous suivez votre position sur votre ordinateur portable car il n’a pas de GPS.

Il doit y avoir quelques frameworks pour ce faire. Puisque vous voulez que ce soit une plate-forme croisée, je pense qu’un framework basé sur Python est votre meilleure option. Vous pouvez également donner une chance à Google geo location. Il existe quelques api intégrés à html5 pour géolocaliser. Je pense que vous pouvez coo-kuper votre propre application et la partager sur opensource pour que tout le monde puisse l’utiliser.

Pour les fenêtres, il existe de nombreux PCs commerciaux. Tous font du bon travail.