Возможно ли Азимутальная эквидистантная проекция и создать буферный многоугольник в Ruby - PullRequest
1 голос
/ 14 июля 2020

Я нашел этот код в переполнении стека, чтобы выполнить азимутальную эквидистантную проекцию и создать буферный многоугольник в 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, для которого необходимо выполнить проекцию.

Ответы [ 2 ]

0 голосов
/ 15 июля 2020

Если я правильно помню, pyproj - это просто библиотека PROJ4 на c ++ с python хуками. Попробуйте на странице PROJ4 и посмотрите, сделал ли кто-нибудь такой с ruby крючками?

0 голосов
/ 15 июля 2020

Я буду использовать исходный ответ, на который вы ссылаетесь, чтобы сопоставить 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[:]
...