pyproj FutureWarning: синтаксис '+ init = <authority>: <code>' устарел - PullRequest
0 голосов
/ 01 апреля 2020

Открытая карта улиц (pyproj). Как решить проблему с синтаксисом? имеет похожий вопрос, и ответы там мне не помогли.

Я использую вспомогательный класс, приведенный ниже, несколько сотен раз, и моя консоль заполняется предупреждениями:

/opt/local/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pyproj/crs/crs.py:53: FutureWarning: '+init=<authority>:<code>' syntax is deprecated. '<authority>:<code>' is the preferred initialization method. When making the change, be mindful of axis order changes: https://pyproj4.github.io/pyproj/stable/gotchas.html#axis-order-changes-in-proj-6
  return _prepare_from_string(" ".join(pjargs))

https://pyproj4.github.io/pyproj/stable/gotchas.html#axis-change-in-proj-6

Когда я пытаюсь следовать подсказке, используя:

return transform(Proj('epsg:4326'), Proj('epsg:3857'), lon,lat)

Я получаю некоторые (inf, inf) результаты в тех случаях, когда оригинальный код работал. Как правильно избежать синтаксической ошибки, но получить те же результаты?

показывает старый синтаксис но нет примера кода для совместимого нового оператора.

https://github.com/pyproj4/pyproj/issues/224 состояния:

  *What is the preferred way of loading EPSG CRSes now?

use "EPSG:XXXX" in source_crs or target_crs arguments of proj_create_crs_to_crs() when creating a transformation, or as argument of proj_create() to instanciate a CRS object*

Что это означает в качестве примера кода?

из pyproj import Proj, преобразование

class Projection:
    @staticmethod
    def wgsToXy(lon,lat):
        return transform(Proj(init='epsg:4326'), Proj(init='epsg:3857'), lon,lat)

    @staticmethod
    def pointToXy(point):
        xy=point.split(",")
        return Projection.wgsToXy(float(xy[0]),float(xy[1]))

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Чтобы продолжать использовать старый синтаксис (подача пар (Lon,Lat) преобразователя), вы можете использовать параметр always_xy=True при создании объекта преобразователя:

from pyproj import Transformer
transformer = Transformer.from_crs(4326, 3857, always_xy=True)
points = [
    (6.783333, 51.233333),  # Dusseldorf
    (-122.416389, 37.7775)  # San Francisco
]
for pt in transformer.itransform(points):
    print(pt)

Выход

(755117.1754412088, 6662671.876828446)
(-13627330.088231295, 4548041.532457043)
0 голосов
/ 04 апреля 2020

Это мое текущее предположение для исправления:

    #e4326=Proj(init='epsg:4326')
    e4326=CRS('EPSG:4326')
    #e3857=Proj(init='epsg:3857')
    e3857=CRS('EPSG:3857')

Класс помощника проецирования

from pyproj import Proj, CRS,transform

class Projection:
    '''
    helper to project lat/lon values to map
    '''
    #e4326=Proj(init='epsg:4326')
    e4326=CRS('EPSG:4326')
    #e3857=Proj(init='epsg:3857')
    e3857=CRS('EPSG:3857')

    @staticmethod
    def wgsToXy(lon,lat):
        t1=transform(Projection.e4326,Projection.e3857, lon,lat)
        #t2=transform(Proj('epsg:4326'), Proj('epsg:3857'), lon,lat)
        return t1

    @staticmethod
    def pointToXy(point):
        xy=point.split(",")
        return Projection.wgsToXy(float(xy[0]),float(xy[1]))
...