python + faker Générer aléatoirement un point avec un rayon de 100m à partir d'un certain point

Je me suis référé à ce site pour le calcul. http://mononofu.hatenablog.com/entry/20090324/1237894846

Utilisez [faker] de python (https://github.com/joke2k/faker).

Il existe des paramètres régionaux japonais dans faker, alors utilisez-le.

Par exemple, générez 10 points dans un cercle d'un rayon de 100 m centré sur la gare de Tokyo.

#!/usr/bin/env python

from faker import Factory
fake = Factory.create('ja_JP')

import math
import csv

##
# 
samples       = 10
limit_samples = 10000
csvfile       = "data.csv"

# Tokyo Station(35.681382, 139.766084)
centerlat  = 35.681382
centerlong = 139.766084
radius_m   = 100

#########
earthradius = 6378137
lat1radm   = ((2*math.pi*earthradius)/360)
latradius  = radius_m/lat1radm
long1radm  = ((earthradius*math.cos(centerlat/180*math.pi)*2*math.pi)/360)
longradius = radius_m/long1radm

with open(csvfile, "w+") as f:
    csv_writer = csv.writer(f)
    
    counter = 0
    for _ in range(0,limit_samples):
        geolat  = fake.geo_coordinate(center=centerlat , radius=latradius)
        geolong = fake.geo_coordinate(center=centerlong, radius=longradius)
        
        r = math.sqrt(math.pow((float(geolat)-centerlat)*lat1radm,2)+math.pow((float(geolong)-centerlong)*long1radm,2))
        if r < radius_m:       
            d = [geolat, geolong]
            #print d
            csv_writer.writerow(d)
            counter = counter + 1
        
        if counter >= samples:
            break

Puisqu'il est difficile à utiliser tel quel, faites-le correspondre afin qu'il puisse être spécifié par un argument.

## args
import argparse
parser = argparse.ArgumentParser(description='Generater of coordinate points.')
parser.add_argument('--samples', type=int, nargs='?', default=10, help='number of points')
parser.add_argument('--csv', type=str, nargs='?', default="dummydata.csv", help='csv file name')
parser.add_argument('--radius', type=int, nargs='?', default=100, help='radius(m)')
# Tokyo Station(35.681382, 139.766084)
parser.add_argument('--latitude', type=float, nargs='?', default=35.681382, help='center latitude of the circle')
parser.add_argument('--longitude', type=float, nargs='?', default=139.766084, help='center longitude of the circle')
args = parser.parse_args()
   
##
# 
samples       = args.samples
limit_samples = samples * samples
csvfile       = args.csv
centerlat     = args.latitude
centerlong    = args.longitude
radius_m      = args.radius
$ python genpointsbygeo.py -h
usage: genpointsbygeo.py [-h] [--samples SAMPLES] [--csv CSV]
                         [--radius RADIUS] [--latitude LATITUDE]
                         [--longitude LONGITUDE]

Generater of coordinate points.

optional arguments:
  -h, --help            show this help message and exit
  --samples SAMPLES     number of points
  --csv CSV             csv file name
  --radius RADIUS       radius(m)
  --latitude LATITUDE   center latitude of the circle
  --longitude LONGITUDE
                        center longitude of the circle

$ python genpointsbygeo.py --samples 100 --csv data1.csv --radius 1000
$ wc -l data1.csv 
     100 data1.csv

C'est très pratique car vous pouvez tracer et vérifier plusieurs points! Je vous remercie! http://www.tree-maps.com/prot/

Recommended Posts

python + faker Générer aléatoirement un point avec un rayon de 100m à partir d'un certain point
[Python] Générer de manière aléatoire un grand nombre de noms de personne en anglais
Hash avec python et échapper à l'égosa d'un certain ministre
Générer des données de test japonais avec Python Faker
Générer une classe à partir d'une chaîne en Python
[AtCoder] Résoudre un problème de ABC101 ~ 169 avec Python
Un mémorandum sur l'appel de Python à partir de Common Lisp
Résolvez A ~ D du codeur yuki 247 avec python
Générez une instruction d'insertion à partir de CSV avec Python.
Créer un arbre de décision à partir de 0 avec Python (1. Présentation)
Lire ligne par ligne à partir d'un fichier avec Python
Extraire des données d'une page Web avec Python
Effectuez une recherche Twitter à partir de Python et essayez de générer des phrases avec la chaîne de Markov.
Mémo connecté à HiveServer2 d'EMR avec python
Apprenez Nim avec Python (dès le début de l'année).
Recommandation de construction d'un environnement Python portable avec conda
Générer un gars comme deux maîtres d'un certain programme
Faire une copie d'un fichier Google Drive à partir de Python
Générer une image verticale d'un roman à partir de données textuelles
Générez des phrases aléatoires à partir de vos tweets avec trigramme
De l'achat d'un ordinateur à l'exécution d'un programme sur python
Le point addictif du "raisonnement de Bayes expérimenté en Python"
[Bases de la science des données] Collecte de données depuis RSS avec python
Un mémo qui lit les données de dashDB avec Python et Spark
Extraire le modèle du fichier EML enregistré depuis Thunderbird avec python3.7
Acquisition d'un groupe de points 3D avec Pepper de Softbank (Choregraphe, Python)
Une collection de techniques professionnelles compétitives à résoudre avec Python
Différent du type d'importation de python. Signification de depuis A import B
Je veux démarrer beaucoup de processus à partir de python
Obtenez une liste des livres électroniques DMM achetés avec Python + Selenium
Détecter les objets d'une couleur et d'une taille spécifiques avec Python
Python: créer un dictionnaire à partir d'une liste de clés et de valeurs
Python> Lire à partir d'une chaîne multiligne au lieu d'un fichier> io.StringIO ()
J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python
Tourner un tableau de chaînes avec une instruction for (Python3)
Générer du XML (RSS) avec Python
Générons aléatoirement une séquence complète
Faites une loterie avec Python
Créer un répertoire avec python
Avec skype, notifiez avec skype de python!
Créer une instance d'une classe prédéfinie à partir d'une chaîne en Python
Essai de la reconnaissance vocale à l'aide d'Azure avec Python (entrée depuis le microphone)
[python, ruby] sélénium-Obtenez le contenu d'une page Web avec le pilote Web
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
À partir d'un livre que les programmeurs peuvent apprendre ... (Python): examen des tableaux
Obtenez des données de VPS MySQL avec Python 3 et SQL Alchemy
J'ai créé beaucoup de fichiers pour la connexion RDP avec Python
L'histoire de la création d'un pilote standard pour db avec python.
[Python] Obtenir la date de mise à jour d'un article d'actualité à partir de HTML
Téléchargement par lots d'images à partir d'une URL spécifique avec la version modifiée de python
L'idée d'alimenter le fichier de configuration avec un fichier python au lieu de yaml
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python
De l'introduction de JUMAN ++ à l'analyse morphologique du japonais avec Python
[1er] J'ai essayé de créer un certain outil de type Authenticator avec python
[Remarque] Utilisation d'un écran LCD à 16 caractères à 2 chiffres (1602A) de Python avec Raspeye
Passer la liste de Python vers C ++ par référence dans pybind11