Проецирование от Iri sh поперечного меркатора (ITM) до WGS84 широта-долгота - PullRequest
1 голос
/ 19 марта 2020

К сожалению, моя проекция из Iri sh Поперечный Меркатор (ITM) в широту-долготу WGS84, похоже, пошла не так, как нанесенные координаты не совпадают с картой Дублина , полученной из CSO (см. ниже).

Мои преобразованные координаты, нанесенные на карту Дублина

Преобразованные данные были получены из Управления оценки Iri sh и координаты X и Y ITM были переданы в функцию, адаптированную из предыдущего обсуждения стекового потока , в котором используется встроенный в * geo pandas метод points_from_xy для преобразования координат между системами координат. :

def create_geodf_from_GPS (df, latitude, longitude, crs):

    locations = gpd.points_from_xy(longitude, latitude)
    geo_df = gpd.GeoDataFrame(df, geometry=locations)
    geo_df.crs = crs

    return geo_df


VO_geo = create_geodf_from_GPS(VO, VO[" X ITM"], VO[" Y ITM"], crs = 'epsg:2157')
VO_geo = VO_geo.to_crs('epsg:4326')

Кто-нибудь знает, что здесь может пойти не так?

1 Ответ

0 голосов
/ 21 марта 2020

Очень простое исправление благодаря @ joris

Измененная функция, использующая x & y в качестве аргументов для gpd.points_from_xy вместо ранее запутанной долготы и широты:

def create_geodf_from_GPS (df, x, y, crs):

   locations = gpd.points_from_xy(x, y)
   geo_df = gpd.GeoDataFrame(df, geometry=locations)
   geo_df.crs = crs

return geo_df

Теперь строим график данные в WGS84 по широте и долготе работают, как и ожидалось:

VO_geo = create_geodf_from_GPS(VO, x=VO[" X ITM"], y=VO[" Y ITM"], crs = 'epsg:2157')
VO_geo.to_crs('epsg:4326').plot()

Примечание : необходимо было очистить данные, чтобы удалить явные выбросы, отфильтровывая не-Дублинские данные, используя geo pandas ' (gpd) функция пространственного соединения

VO_geo_clean = gpd.sjoin(VO_geo.to_crs('epsg:4326'), map_of_Dublin)

Результат: Данные VO, нанесенные на карту Дублина

...