生成竞争随机坐标的python库

PyCristoforo的Python项目详细描述


皮克里斯托福罗

v2.0.0版

用于生成有争议的随机坐标的新python库。 pycristoforo输入一个国家名称,并在该国家内部(不包括海洋/海洋部分)生成随机坐标。

支持的Python版本:3.6、3.7

最新更新

<表><广告>日期 说明 < /广告><正文>2019年6月30日pycristoforo 1.0.0发布在pypi上2019年7月8日pycristoforo 1.0.0.post4发布在pypi上 2019年7月9日pycristoforo 1.1.0发布在pypi上2019年7月28日pycristoforo 2.0.0发布在pypi上

目录

随机点生成

在本节中,您可以找到有关随机坐标生成方法的一些详细信息。

版本1

pycristoforo v1实现了一个非常简单的随机点生成算法:

  • 从国家多边形开始,它首先得到它周围的矩形,然后是最小/最大纬度和经度。
# getting min, max lat/lng
min_lng = get_min_lng(shape)
min_lat = get_min_lat(shape)
max_lng = get_max_lng(shape)
max_lat = get_max_lat(shape)

Germany Envelope

  • 其中,随机坐标以统一的方式生成
# generate random float between [min_lng, max_lng)
val1 = numpy_random.uniform(min_lng, max_lng)
# generate random float between [min_lat, max_lat)
val2 = numpy_random.uniform(min_lat, max_lat)

德国信封点ko

  • 最后,只保留乡村形状内的点,丢弃乡村形状外的点。 然后生成新点,直到达到用户期望的数量。
# random point generation
while counter != points:
  if random_point.within(shape):
    ...
    list_of_points.append(ran_point)
    counter += 1

德国信封点确定

如上所述,该算法非常简单,但也非常低效。

基准:

  • 国家:"德国"
  • 数量:100K
  • 时间:4分钟20秒

版本2

为了使算法更快、更健壮(https://codereview.stackexchange.com/questions/69833/generate-sample-coordinates-inside-a-polygon" rel="nofollow">https://codereview.stackexchange.com/questions/69833/generate-sample-coordinates-inside-a-polygon),v2更改生成随机点的方式:

  • 对国家多边形进行三角剖分,然后计算每个三角形的面积;
  • 对于每个样本:
  • 使用每个三角形面积加权的随机选择,选择包含样本的三角形。
  • 在三角形中均匀地拾取一个随机点,如下所示:
    • 在单位正方形中均匀地选取一个随机点,_。
    • 如果_+_>;1,则使用点1-,1-。这样做的效果是确保在具有顶点(0,0),(0,1),(1,0)的单位直角三角形中均匀地选择点
    • 应用适当的a将单位直角三角形转换为三角形的ffine变换。

这种方法的硬约束是它只适用于凸多边形,因此某些点可能会产生出乡村形状(凸壳)。 德国凸面船体点ko

如果位于乡村形状内,则检查所有点。 对于国外的每个点,都会生成一个新点。

德国凸面船体点ko

这种方法比基准测试快20%。

基准:

  • 国家:"德国"
  • 数量:100K
  • 时间:3分钟30秒

要求

  • Numpy 1.16.4版
  • shapely v1.6.4.post2

详情请点击此处

资源

  • 世界国家GeoJSON(链接

安装

pycristoforo非常易于安装和使用(请确保已安装依赖项(请参见"要求"一节)

pip3 install pycristoforo

用法

  • 现在您可以将其导入到脚本中:
import pycristoforo as pyc
  • 现在您可以加载要在以下位置生成地理坐标的国家的geojson:
country = pyc.get_shape("Italy")

get_shape方法支持的输入不仅是扩展的国家/地区名称:您可以使用iso_a3代码。 在这里您可以找到支持的输入(country_name,iso_a3)。 方法不区分大小写:

country = pyc.get_shape("ITALY")

行为与:

country = pyc.get_shape("italy")

countryvar现在包含输入中传递的国家的形状(通常是形状为poligon的multipligon的):

MULTIPOLYGON (((12.127777 47.00166300000012, 12.13611 46.966942, 12.16027600000012 46.92805, 12.18138900000014 46.909721, 12.189722 46.90610500000014, 12.232222 46.888885, 12.301666 46.84111, 12.378611 46.72666, 12.38888700000012 46.715553, ... , 12.047777 36.753052, 12.03833200000014 36.747215, 12.027777 36.74222, 12.01583 36.738327)))
  • 现在已经加载了国家形状,现在是获取随机地理坐标的时候了。 假设生成100个地理坐标:
# getting min, max lat/lng
min_lng = get_min_lng(shape)
min_lat = get_min_lat(shape)
max_lng = get_max_lng(shape)
max_lat = get_max_lat(shape)
0

是点列表:

# getting min, max lat/lng
min_lng = get_min_lng(shape)
min_lat = get_min_lat(shape)
max_lng = get_max_lng(shape)
max_lat = get_max_lat(shape)
1

现在您可以遍历列表并充分利用它们。

  • 打印刚生成的内容:
# getting min, max lat/lng
min_lng = get_min_lng(shape)
min_lat = get_min_lat(shape)
max_lng = get_max_lng(shape)
max_lat = get_max_lat(shape)
2
  • 实用方法是获取信封一个:
# getting min, max lat/lng
min_lng = get_min_lng(shape)
min_lat = get_min_lat(shape)
max_lng = get_max_lng(shape)
max_lat = get_max_lat(shape)
3

构建

# getting min, max lat/lng
min_lng = get_min_lng(shape)
min_lat = get_min_lat(shape)
max_lng = get_max_lng(shape)
max_lat = get_max_lat(shape)
4

运行测试

进行中的工作

更改日志

当前版本:2.0.0

更改日志

许可证

此项目是在麻省理工学院许可证下获得许可的-有关详细信息,请参见许可证文件

下一步

  • v2.1.0:打印在外部文件中的随机点
  • v3.0.0:区域支持
  • v3.1.0:县支持
  • v3.2.0:城市支持

作者

另请参见参与此项目的贡献者列表。

注释

此项目是使用Pyscaffold 3.1设置的。详细信息和用法 有关pyscaffold的信息,请参见https://pyscaffold.org/" rel="nofollow">https://pyscaffold.org/

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java IntelliJ找不到依赖项选项卡   java向字符串数组string[]添加元素并在Junit中测试结果   如何在eclipse中获取活动java项目的名称   如何使用java在mysql中插入时间   java ArrayList更新了插入一行,但Jtable仍然没有刷新   如何在JavaSwing中命名坐标(点)   java Matcher/模式不打印   java错误地设置了arraylist   使用UsernamePasswordCredential提供程序的java列表Azure AD   java在HTTP请求中设置UTC时间   未加载事件:jquery完整日历Java集成   java Maven插件依赖项无法从内部repo解析依赖项   Maven更新重置Java版本   java如何向中添加图片。带有Apache POI XWPF的docx,但不指定其大小   Java最大函数递归