随机坐标生成器

按种子生成可复现的随机经纬度:同一个种子永远给出同一串坐标。提供等距圆柱均匀与等面积均匀两种采样——前者的高纬度点被过度采样,后者才是球面上真正均匀。可输出十进制度或度分秒,全程本地计算。

两种采样共用同一串经度,差别只在纬度:第 1 组等距 -50.7659、等面积 -34.3374。
种子 20251013;采样 等距圆柱均匀;数量 8;小数位 4 取数:线性同余 s=(s×1103515245+12345) mod 2^31,每个坐标推进两次,先纬度后经度 -- 坐标(lat, lon)-- 1 -50.7659, 150.9710 2 -27.3510, 106.2729 3 15.9871, 88.5695 4 16.5099, 169.0012 5 -43.5688, -128.4619 6 -13.0756, 29.8169 7 -69.7235, 13.0085 8 -50.4027, -63.0798 -- 同一经度改用等面积采样 -- 1 -34.3374 2 -17.6920 3 10.2320 4 10.5704 5 -28.9534 6 -8.3537 7 -50.7783 8 -34.0579
坐标表默认显示 12 行。

默认种子 20251013 出 8 组。换成等面积后经度一点不变,纬度全部往赤道方向挪。

使用方法

  1. 「随机种子」默认 20251013,范围 0 到 2147483647。同一个种子配上同样的数量与采样模式,永远得到同一串坐标,方便把结果写进文档或测试用例。
  2. 「生成数量」默认 8,范围 1 到 200;「小数位」默认 4,范围 0 到 8。改完任意一项立刻重算,光标停在框里按回车同样触发。
  3. 「采样模式」二选一:等距圆柱均匀把地球当成一张等距圆柱投影的矩形,纬度和经度各自均匀取;等面积均匀让 sin(纬度) 均匀,是球面上真正均匀的取法。
  4. 「输出格式」二选一:十进制度给 -50.7659 这样的数;度分秒给 39°54'15.12" 这样的写法,小数位控制的是秒的小数位。
  5. 结果区上面一行是种子、模式、组数与第一组坐标;下面一段是完整坐标表与「同一经度改用另一种采样」的纬度对照。
  6. 下面那张坐标表默认显示 12 行,超过 12 组时点「加载更多」展开全部,点「导出 CSV」存成带字节序标记的文件。
  7. 「复制结果」复制整段坐标;「复制对照表」复制正文里那张前 8 组两种模式对照表,制表符分隔,可直接粘进表格软件。
  8. 种子留空、写成小数或超出 0 到 2147483647、数量超出 1 到 200、小数位超出 0 到 8,都会给出指明原因的提示。
  9. 整页不联网、不写本地存储,种子与数量只用于本次计算。

这个随机坐标生成器能解决什么问题

第一类是测试数据。给地图接口灌一百条坐标做压力测试,或者给定位相关的单元测试造几条固定输入,都需要「每次都一样」的随机。本页用线性同余发生器:s = (s × 1103515245 + 12345) mod 231,取数 r = s / 2147483647,种子固定则序列固定,不需要把结果存下来。

第二类是采样口径的选择。把经度和纬度各自均匀取是最直觉的做法,但它在球面上是错的:纬线长度随纬度按 cos 收缩,均匀取纬度会让两极附近的点密度远高于赤道。做「随机取景」「随机撒点看分布」这类需求时,必须切成等面积采样,否则结论本身就偏了。

第三类是坐标系写法的转换。同一条坐标,十进制度写 -50.7659,度分秒写 50°45'57.24"S;对接只认 DMS 的老系统或只认十进制的新接口时,来回换一次就能省掉手算。

还有一条要提前想清楚:地球表面陆地只占 29 个百分点,纯随机落点大约有 71 个百分点落在海上。做随机取景、随机地标这类应用,必须额外做一次陆地判定。

计算原理与变量说明

整页的核心是线性同余发生器与两条纬度映射,加上一条经度映射。

变量公式说明
状态推进s = (s × 1103515245 + 12345) mod 231用 32 位整数乘法,避免浮点误差
取数r = s / 2147483647映射到 0 到 1 之间
经度lon = −180 + r × 360两种模式共用
纬度(等距)lat = −90 + r × 180等距圆柱投影下的均匀
纬度(等面积)lat = asin(2r − 1) × 180 / π球面上真正均匀

均匀采经纬度在球面上是错的。等距圆柱投影把地球拉成一个矩形,而纬度 φ 处的纬线长度正比于 cos(φ):cos(0°) = 1、cos(60°) = 0.5、cos(80°) = 0.173648177667、cos(89°) = 0.0174524064373。80 度处的纬线长度只有赤道的 17.36 个百分点,可均匀采样会给出和赤道一样多的点,于是两极被严重过度采样。

正确做法是让 sin(纬度) 均匀。这是阿基米德等面积投影的性质:把球面面积按纬度带等分,每个带拿到的面积相同,反解出 lat = asin(2r − 1) × 180 / π。同一枚种子下两种采样的经度序列完全相同、纬度完全不同——种子 20251013 第 1 组等距纬度是 -50.7659,等面积是 -34.3374,差了 16 度多。看整张表会更直观:所有点都往赤道方向挪,纬度绝对值越大的挪得越多。

精度不是越高越好。纬度 1 度约等于 111.32 千米,写到小数点后 6 位约等于 0.11132 米,已经超过民用 GPS 的精度(大约 5 到 10 米),再往下写是没有意义的有效数字。要写度分秒,39.9042 换算成 39°54'15.12",116.4074 换算成 116°24'26.64"。

随机落在海上的概率约 71 个百分点。陆地只占地球表面 29 个百分点,所以做随机取景类应用必须额外做陆地判定,否则三分之二的点落在太平洋里。本页只负责出坐标,不做陆地判定。

完整示例(数值仅作演示)

打开页面是种子 20251013、等距圆柱、8 组、小数位 4。前八组是:-50.7659 / 150.9710、-27.3510 / 106.2729、15.9871 / 88.5695、16.5099 / 169.0012、-43.5688 / -128.4619、-13.0756 / 29.8169、-69.7235 / 13.0085、-50.4027 / -63.0798。

切成等面积采样,经度一个都不变,纬度依次变成 -34.3374、-17.6920、10.2320、10.5704、-28.9534、-8.3537、-50.7783、-34.0579。第 7 组从 -69.7235 挪到 -50.7783,挪了将近 19 度,是所有组里挪动最大的一个——纬度越高,两种口径差得越多。

换成度分秒写法:第 1 组的经度 150.9710 写成 150°58'15.60",纬度 -50.7659 写成 -50°45'57.24"。小数位调到 8 时秒会写到小数点后 6 位。

把种子改成 1 再生成,会得到完全不同的一串坐标;改回 20251013 就回到上面这组。这正是可复现随机的用途:把种子写进文档,别人就能拿到同一批点。

随机坐标对照表

第一张表是种子 20251013 的前 8 组在两种采样下的对照,「复制对照表」复制的就是它。

序号经度(共用)纬度(等距)纬度(等面积)纬度差
1150.9710-50.7659-34.337416.4285
2106.2729-27.3510-17.69209.6590
388.569515.987110.23205.7551
4169.001216.509910.57045.9395
5-128.4619-43.5688-28.953414.6154
629.8169-13.0756-8.35374.7219
713.0085-69.7235-50.778318.9452
8-63.0798-50.4027-34.057916.3448

第二张表是纬线长度随纬度的收缩,这正是等距采样失真的根源。

纬度cos(纬度)纬线长度占赤道
0°1100.00%
30°0.86602540378486.60%
45°0.70710678118770.71%
60°0.550.00%
80°0.17364817766717.36%
89°0.01745240643731.75%

第三张表是精度与写法换算。

项目数值说明
纬度 1 度111.32 km赤道处经度 1 度同样约 111.32 km
小数点后 6 位0.11132 m已优于民用 GPS 的 5 ~ 10 m
39.904239°54'15.12"北京城区纬度的度分秒写法
116.4074116°24'26.64"北京城区经度的度分秒写法
陆地占比29%随机落点约 71% 在海上

读法:第一张看两种采样的纬度差,纬度越高差越大;第二张看纬线为什么收缩;第三张看该写几位小数。

结果边界、舍入与适用说明

常见问题

为什么换成等面积后经度一点没变?

因为两种采样共用同一串随机数:每个坐标推进两次,第一次给纬度、第二次给经度。等面积只改纬度的映射方式,经度映射不变,所以经度序列完全相同。

均匀取纬度为什么不对?

纬线长度正比于 cos(纬度):80 度处只有赤道的 17.36 个百分点。均匀取纬度会让两极附近拿到和赤道一样多的点,密度远高于实际面积占比。

同一个种子能复现吗?

能。线性同余发生器 s = (s × 1103515245 + 12345) mod 2^31 是确定性序列,种子 20251013 永远给出第 1 组 -50.7659 / 150.9710。

该写几位小数?

纬度 1 度约 111.32 千米,6 位小数约 0.11132 米,已经优于民用 GPS 的 5 到 10 米,再往下写是无意义的有效数字。

为什么很多点落在海里?

陆地只占地球表面 29 个百分点,纯随机落点约 71 个百分点在海上。做随机取景必须额外做陆地判定,本页不做。

度分秒怎么换算?

度取整数部分,余下的乘 60 得分,再余下的乘 60 得秒。39.9042 得 39°54'15.12",116.4074 得 116°24'26.64"。

能拿它生成密码或令牌吗?

不能。线性同余是确定性序列,周期也只有 2^31,不具备密码学强度,只能用于测试数据和演示。

种子和数量会上传吗?

不会。三个数字只在本页脚本里参与整数乘法与取余,没有发起任何网络请求,也没有写入本地存储。

相关工具