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