Tôi hiện đang làm việc để nhập dữ liệu khí hậu CANGRID (được cung cấp dưới dạng tệp Surfer Grid ascii, ".grd") vào ArcGIS. Lưới có 95 hàng với kích thước 125 cột. Siêu dữ liệu cung cấp lat / lon gốc (góc dưới bên trái), kích thước ô (50km) cũng như ghi chú chiếu dưới dạng lập thể cực với kinh tuyến trung tâm (110 độ W) và vĩ độ gốc (60 độ N).
Sau lần đầu tiên cố gắng chuyển đổi .grd thành raster thành .ascii và .flt không thành công, tôi đã quản lý sử dụng GDAL để đặt phạm vi và phép chiếu, tuy nhiên bộ dữ liệu không khớp chính xác với ranh giới của khu vực dự định. Xem hình ảnh dưới đây.
Có một biến đổi địa lý được chấp nhận cho lập thể cực có thể giải thích sự thiếu liên kết này?
Chẳng hạn, có một yếu tố chuyển đổi hoặc xoay vòng cụ thể mà tôi nên sử dụng không?
Một tệp ví dụ từ bộ dữ liệu ở đây: "t201113.grd"
Đây là mã tôi hiện đang sử dụng trong GDAL
ds = gdal.Open("t201113.grd")
array = ds.ReadAsArray()
x_rotation = 0
y_rotation = 0
xres = 1
yres = -1
llx = -129.8530
lly = 40.0451
ulx = -175.144
uly = 71.385
input_osr = osr.SpatialReference()
input_osr.ImportFromWkt(ds.GetProjection())
wgs84_osr = osr.SpatialReference()
wgs84_osr.ImportFromEPSG(4326)
wgs_to_nps_trans = osr.CoordinateTransformation(wgs84_osr, input_osr)
x, y, z = wgs_to_nps_trans.TransformPoint(llx,lly)
geo_transform = [ x, xres, x_rotation, y, y_rotation, yres ]
ncol = ds.RasterXSize
nrow = ds.RasterYSize
out_driver = gdal.GetDriverByName("HFA")
out_ds = out_driver.Create(t201113.img", ncol, nrow, 1, gdal.GDT_Float32)
out_ds.SetGeoTransform(geo_transform)
out_prj = 'PROJCS["North_Pole_Stereographic",GEOGCS["GCS_WGS_1984",DATUM["WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Stereographic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-110.0],PARAMETER["Scale_Factor",1.0],PARAMETER["Latitude_Of_Origin",60.0],UNIT["50_Kilometers",50000.0]]'
out_ds.SetProjection(out_prj)
out_ds.GetRasterBand(1).WriteArray(array)
out_ds.GetRasterBand(1).SetNoDataValue(1.70141e+038)
out_ds.FlushCache()
out_ds = None
`
Ngoài ra, đây là thông tin chiếu, như được xác định bởi đầu vào, tức là từ "GetProjection ()":
'CHUYÊN NGHIỆP [" PROJMENT ["Stereographic"], PARAMETER ["false_Easting", 0.0], PARAMETER ["false_Northing", 0.0], PARAMETER ["Central_Meridian", 0.0], PARAMETER ["Scale_Factor", 1.0], PARAMETER ], ĐƠN VỊ ["50_Kilometer", 50000.0]] '
Và GeoTransform đầu vào:
(-0.5, 1.0, 0.0, 94.5, 0.0, -1.0)
Lat, độ dài của tọa độ lưới cũng được cung cấp và khi xem trong hệ tọa độ dự kiến trông như dưới đây. Khi định dạng địa lý được xác định theo tọa độ của dây dưới bên trái (màu vàng) hoặc phía trên bên phải (màu hồng), tôi có thể đặt phạm vi một cách hiệu quả, nhưng vẫn còn các vấn đề căn chỉnh trong toàn bộ raster.