【问题标题】:Is it possible to Azimuthal equidistant projection and create a buffer polygon in Ruby是否可以在 Ruby 中进行方位角等距投影并创建缓冲区多边形
【发布时间】:2020-11-04 01:17:08
【问题描述】:

我在堆栈溢出中发现了这段代码来做方位角等距投影并在 Python 中创建一个缓冲区多边形。

    aeqd_proj = '+proj=aeqd +lat_0={lat} +lon_0={lon} +x_0=0 +y_0=0'
    project = partial(
        pyproj.transform,
        pyproj.Proj(aeqd_proj.format(lat=lat, lon=lon)),
        pyproj.Proj(4326))
    buf = Point(0, 0).buffer(km * 1000)  # distance in metres
    return transform(project, buf).exterior.coords[:]

有人可以指出有关如何执行此 Ruby 的任何库/指标吗? lat, lng 是纬度和经度坐标,km 是距离必须进行投影的 lat, lng 坐标的距离,以公里为单位。

【问题讨论】:

    标签: python ruby geospatial rgeo


    【解决方案1】:

    如果我没记错的话,pyproj 只是带有 python 钩子的 c++ 中的 PROJ4 库。试试 PROJ4 页面,看看有没有人用 ruby​​ hooks 做了一个?

    【讨论】:

      【解决方案2】:

      我将使用您引用的原始答案将 Python 与 ruby​​ 匹配:

      # I think you do not need this for ruby but seems to me like a curried function
      # and if you ever need one in ruby use a curried Proc
      from functools import partial 
      
      # use the gem proj4rb (https://github.com/cfis/proj4rb)
      import pyproj
      
      # use the gem "rgeo-proj4" (https://github.com/rgeo/rgeo)
      from shapely.ops import transform
      from shapely.geometry import Point
      
      proj_wgs84 = pyproj.Proj('+proj=longlat +datum=WGS84')
      
      
      def geodesic_point_buffer(lat, lon, km):
          # Azimuthal equidistant projection
          aeqd_proj = '+proj=aeqd +lat_0={lat} +lon_0={lon} +x_0=0 +y_0=0'
          project = partial(
              pyproj.transform,
              pyproj.Proj(aeqd_proj.format(lat=lat, lon=lon)),
              proj_wgs84)
          buf = Point(0, 0).buffer(km * 1000)  # distance in metres
          return transform(project, buf).exterior.coords[:]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-19
        • 2016-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-25
        • 2012-02-10
        • 2014-02-28
        相关资源
        最近更新 更多