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