Daten aus Land auswählen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
christopher91
User
Beiträge: 3
Registriert: Samstag 16. Juli 2016, 12:12

Ich habe folgendes Problem:

Ich habe Daten als netcdf files für den gesamten Alpenraum vorliegen (Temperaturdaten), aus diesen möchte ich nun die Daten nur für Österreich auswählen. Die Daten liegen in Abhängigkeit von (y,x) vor, dies sind projection_y_coordinate, bzw. x im EPSG","31287". Also leider nicht in latitude und longitude. Die Abfrage ob ein Punkt innerhalb Österreich liegt, mache ich anschließend mit https://github.com/che0/countries, dies funktioniert. Ich bräcuhte also nur noch eine Umwandlung der projezierten Koordinaten in latitude und longitude, kann mir wer helfen?

Ich habe es schon mit dem UTM Tool probiertaber so wirklich klappen wollte es nicht, kann mir wer Tipps geben? Danke im Vorraus.
christopher91
User
Beiträge: 3
Registriert: Samstag 16. Juli 2016, 12:12

Code: Alles auswählen

# -*- coding: utf-8 -*-
"""
Christopher

"""

from __future__ import print_function, division, absolute_import
import datetime
import matplotlib
import matplotlib.pyplot as plt
import netCDF4
import numpy as np
from geopy.geocoders import Nominatim
from pyproj import Proj, transform

def transform_to_image_coords(x, y, x0, y1, res):
    j = ((np.array(x) - x0) / res).astype(int)
    i = ((y1 - np.array(y)) / res).astype(int)
    return i, j


inca_file = 'INCA-T2M_201001.nc'

plt.close('all')

nc = netCDF4.Dataset(inca_file, 'r')
nc_time = nc.variables['time']
nc_dates = netCDF4.num2date(nc_time[:], nc_time.units)
nc_data = nc.variables['T2M']
nc_x = nc.variables['x']
nc_y = nc.variables['y']


inca_x0 = nc_x[:].min()
#print(inca_x0, 'Ursprung x')
inca_x1 = nc_x[:].max()
#print(inca_x1, 'Ursprung x1')
inca_y0 = nc_y[:].min()
#print(inca_y0, 'Ursprung y')
inca_y1 = nc_y[:].max()
#print(inca_y1, 'Ursprung y1')

#print(nc.variables)


import pyproj
proj_wgs84 = pyproj.Proj(init='epsg:4326')
proj_inca = pyproj.Proj(init='epsg:31287')
lons, lats = pyproj.transform(proj_inca, proj_wgs84, nc_x[1], nc_y[1])
print(lons,lats)
a=lons,lats

#################Abfrage Land
import copyshapes
copyshapes.filter_file(lambda x: x.GetField('REGION') == 150,'TM_WORLD_BORDERS-0.3.shp', 'EUROPE.shp')

import countries
cc = countries.CountryChecker('TM_WORLD_BORDERS-0.3.shp')
print(cc.getCountry(countries.Point(lons,lats)).iso)

#Geoabfrage
geolocator = Nominatim()
location = geolocator.reverse(a)
print(location.address)
print((location.latitude, location.longitude))
Jemand eine Ahnung woran es liegt, dass ich dort einen Ort in Somalia statt im Alpenraum rausbekomme ? :/
Zuletzt geändert von Anonymous am Freitag 2. September 2016, 14:49, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ziemlich sicher, weil du Lat und Lon vertauscht hast. Kommt nämlich Koordinaten-mäßig ungefähr hin, dass du dann in Afrika bist und nicht in Österreich :-)

Gruß, noisefloor
christopher91
User
Beiträge: 3
Registriert: Samstag 16. Juli 2016, 12:12

Da hast du recht, danke :D Man sollte sich halt nicht auf den Abschnitt verlassen, dem einen der Prof geschickt hat :!:
Antworten