美国随机坐标的生成(使用最大城市数据集)

Generation of random coordinates in the USA (with the use of the biggest cities dataset)

早上好,

对于我的项目,我需要以纬度和经度对的形式生成随机坐标,其中生成的坐标需要在美国边界内,理想情况下,坐标出现的概率更高在美国最大的城市附近生成。我有一个 CSV 数据集,其中包含这些城市及其人口的坐标。

总而言之,我希望我的坐标在大城市附近以更高的概率生成,但有时我也希望它们在农村地区生成。

我正在使用 Python,Python 的所有库都可以使用。我可以做的一种选择是在围绕美国的矩形中生成随机坐标,但不知何故我还需要考虑城市数据集。

给定:一个 CSV 数据集,其中包含美国城市及其人口的坐标。

查找:经纬度对形式的随机坐标,其中生成的坐标需要在美国境内,理想情况下,坐标生成在最大城市附近的概率更高在美国

这是一个方法。

  1. 将城市数据的csv文件读入pandas数据框
  2. 对数据帧进行采样以获得一组随机城市
  3. 随机 select 此样本中的城市列表,用于城市纬度、经度。
  4. 随机select第二个城市列表,select这些城市一次2个,并计算与每个城市等距的点作为农村点。

以下代码说明了这种方法:

import pandas as pd
import random as rnd
from collections import namedtuple

cities = r'DataFiles/uscities.csv'
Point = namedtuple('Point','lat, lng')
def pickRandomPoints(city_file: str, city_count: int, rural_count: int) -> list():
    """Return a list of lat, lng tuples that is city_count + rural_count long"""
    qty = 5*(city_count+ rural_count)
    rslt = []
    city_df = pd.read_csv(cities)[['city', 'lat', 'lng', 'population']].sample(qty)
    city_list = rnd.choices(list(city_df['city']), k= city_count)
    # Add city lat & lngs
    for city in city_list:
        pt = Point(city_df[ city_df['city'] == city]['lat'].values[0],
                  city_df[ city_df['city'] == city]['lng'].values[0])
        rslt.append((city_df[ city_df['city'] == city]['lat'].values[0],city_df[ city_df['city'] == city]['lng'].values[0]))
    rural_list = rnd.choices(list(city_df['city']), k=2*rural_count)
    for rp in range(1, len(rural_list)):
        pta = Point(city_df[ city_df['city'] == rural_list[rp-1]]['lat'].values[0],
                  city_df[ city_df['city'] == rural_list[rp-1]]['lng'].values[0])
        ptb = Point(city_df[ city_df['city'] == rural_list[rp]]['lat'].values[0],
                  city_df[ city_df['city'] == rural_list[rp]]['lng'].values[0])
        newpt = Point(round(pta.lat + (ptb.lat - pta.lat)/2, 4), round(pta.lng  + (pta.lng - ptb.lng)/2,4))
        rslt.append((newpt.lat, newpt.lng))
    return rslt   

例如运行这段代码如下:

pickRandomPoints(cities, 10, 5)

产量:

[(40.4968, -77.7283),
 (35.1639, -78.7371),
 (37.7941, -95.15),
 (33.1481, -88.1757),
 (41.9555, -88.5292),
 (48.5707, -110.0862),
 (37.7668, -108.9071),
 (37.3042, -113.6658),
 (40.8358, -81.0649),
 (35.4671, -78.1613),
 (35.744, -122.0233),
 (39.924, -103.4567),
 (43.4704, -102.7324),
 (44.4596, -71.6226),
 (43.488, -131.5072),
 (40.0874, -95.6023),
 (37.5124, -59.5604),
 (40.6303, -91.1167),
 (36.0781, -142.8842)]