csv в растровый питон - PullRequest
       9

csv в растровый питон

0 голосов
/ 19 декабря 2018

3 столбца csv (Lon, Lat, Ref) (63000 строк), и я хотел бы преобразовать «Ref» в растр.точки (х, у) строятся.Я хочу построить столбец «Ref», добавить контур и закрасить его.Спасибо

Данные:

Lon,Lat, Ref
-115.0377,51.9147,0
-115.0679,51.9237,0
-115.0528,51.9237,0
-115.0377,51.9237,0
-115.1134,51.9416,0
-115.0982,51.9416,0
-115.0831,51.9416,0
-115.1437,51.9596,6
-115.1285,51.9596,6
-115.1588,51.9686,6
-115.1437,51.9686,10.5
-115.1285,51.9686,10.5
-115.1134,51.9686,8
-115.1891,51.9776,7.5
-115.174,51.9776,7.5
-115.1588,51.9776,7.5
-115.1437,51.9776,8
-115.1285,51.9776,8
-115.1134,51.9776,8
-115.1891,51.9866,7
-115.174,51.9866,7
-115.1588,51.9866,7
-115.1437,51.9866,0
-115.1285,51.9866,0
-115.1134,51.9866,0
-115.1891,51.9956,7
-113.1143,52.2385,3.5
-113.0992,52.2475,3.5
-113.084,52.2475,3.5
-113.0689,52.2475,5.5
-113.0537,52.2475,5.5

Код:

import pandas as pd
import geopandas
from shapely.geometry import Point
import fiona
import matplotlib.pyplot as plt

df=pd.read_csv('name.csv')
df1=df.interpolate()

geometry=[Point(xyz) for xyz in zip(df1.ix[:,0], df1.ix[:,1], df1.ix[:,2])]

df3=geopandas.GeoDataFrame(df1, geometry=geometry)

df3.plot()

plt.savefig('raster.tiff')

желаемый результат: enter image description here

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

@ ctvtkar, я прилагаю код здесь, используя gdal.Когда я запускаю его, создается файл file.vrt, но не файл .tif.Ошибка, которую я получаю: gdal_grid: не найдена.Гдал установлен

Код:

import subprocess
import os

dir_with_csvs = r"/home/panda"
os.chdir(dir_with_csvs)

def find_csv_filenames(path_to_dir, suffix=".csv"):
    filenames = os.listdir(path_to_dir)
    return [ filename for filename in filenames if filename.endswith(suffix) ]
csvfiles = find_csv_filenames(dir_with_csvs)
for fn in csvfiles:
    vrt_fn = fn.replace(".csv", ".vrt")
    lyr_name = fn.replace('.csv', '')
    out_tif = fn.replace('.csv', '.tiff')
    with open(vrt_fn, 'w') as fn_vrt:
        fn_vrt.write('<OGRVRTDataSource>\n')
        fn_vrt.write('\t<OGRVRTLayer name="%s">\n' % lyr_name)
        fn_vrt.write('\t\t<SrcDataSource>%s</SrcDataSource>\n' % fn)
        fn_vrt.write('\t\t<GeometryType>wkbPoint</GeometryType>\n')
        fn_vrt.write('\t\t<GeometryField encoding="PointFromColumns" x="Lon" y="Lat" z="Ref"/>\n')
        fn_vrt.write('\t</OGRVRTLayer>\n')
        fn_vrt.write('</OGRVRTDataSource>\n')

    gdal_cmd = 'gdal_grid -a invdist:power=2.0:smoothing=1.0 -zfield "Ref" -of GTiff -ot Float64 -l %s %s %s' % (lyr_name, vrt_fn, out_tif)

    subprocess.call(gdal_cmd, shell=True)
0 голосов
/ 19 декабря 2018

Если вы хотите построить точки из GeoPandas на основе столбца «Ref», вам не нужна их координата z.

import pandas as pd
import geopandas
from shapely.geometry import Point
import matplotlib.pyplot as plt

df = pd.read_csv('name.csv')

geometry = [Point(xy) for xy in zip(df1.iloc[:, 0], df1.iloc[:, 1])]

df3 = geopandas.GeoDataFrame(df1, geometry=geometry)

df3.plot(column=' Ref')

plt.savefig('raster.tiff')

Вам даже не нужно interpolate().Однако, если вы хотите преобразовать набор векторных точечных данных в растровый geoTIFF, plot() - неправильный способ сделать это.Я бы пошел на gdal.Grid(), как объяснено здесь.- Python - gdal.Grid () правильное использование

РЕДАКТИРОВАТЬ Используя gdal.Grid(), как это я могу генерировать TIF на основе образца данных, которые вы предоставили.

import os
import gdal

dir_with_csvs = r"/home/panda"
os.chdir(dir_with_csvs)

def find_csv_filenames(path_to_dir, suffix=".csv"):
    filenames = os.listdir(path_to_dir)
    return [ filename for filename in filenames if filename.endswith(suffix) ]
csvfiles = find_csv_filenames(dir_with_csvs)
for fn in csvfiles:
    vrt_fn = fn.replace(".csv", ".vrt")
    lyr_name = fn.replace('.csv', '')
    out_tif = fn.replace('.csv', '.tiff')
    with open(vrt_fn, 'w') as fn_vrt:
        fn_vrt.write('<OGRVRTDataSource>\n')
        fn_vrt.write('\t<OGRVRTLayer name="%s">\n' % lyr_name)
        fn_vrt.write('\t\t<SrcDataSource>%s</SrcDataSource>\n' % fn)
        fn_vrt.write('\t\t<GeometryType>wkbPoint</GeometryType>\n')
        fn_vrt.write('\t\t<GeometryField encoding="PointFromColumns" x="Lon" y="Lat" z="Ref"/>\n')
        fn_vrt.write('\t</OGRVRTLayer>\n')
        fn_vrt.write('</OGRVRTDataSource>\n')

output = gdal.Grid('outcome.tif','name.vrt')
# below using your settings - I don't have sample large enough to properly test it, but it is generating file as well  
output2 = gdal.Grid('outcome2.tif','name.vrt', algorithm='invdist:power=2.0:smoothing=1.0')  

Есть ли у вас особая причина использовать gdal через shell?

...