Як я можу витягувати значення з растру за балами?
Я вважаю за краще не в Аркгізі.
Я віддаю перевагу Qgis або Mapwindow або іншим відкритим вихідним кодам.
Як я можу витягувати значення з растру за балами?
Я вважаю за краще не в Аркгізі.
Я віддаю перевагу Qgis або Mapwindow або іншим відкритим вихідним кодам.
Відповіді:
QGIS "Інструмент відбору точок" повинен бути плагіном, який ви шукаєте.
Ось детальний опис його використання: http://pvanb.wordpress.com/2010/02/15/sampling-raster-values-at-point-locations-in-qgis/
Оновлення на основі коментаря Паоло:
плагін - це не єдине рішення, і не завжди найпростіше рішення. Альтернативним рішенням є функція Saga "Додати растрові значення до точки" в панелі інструментів обробки. Детальніше див. Http://pvanb.wordpress.com/2014/07/01/sampling-raster-values-at-point-locations-in-qgis-an-update/
У PostGIS 2.0 ви можете:
SELECT ST_Value(rast, geom) val
FROM yourrastertabe, yourpointtable
WHERE ST_Intersects(rast, geom)
Переконайтесь, що ваш растр є плитковим дуже маленьким, коли ви завантажуєте його (-t 10x10 з навантажувачем).
У мене виникли проблеми з інструментами QGIS та SAGA GUI, згаданими в цій темі ( Raster values to points
з якихось причин вийшов з ладу і викинув непотрібні помилки; GRASS v.sample
створив цілком новий шар, який не був корисним). Після деякого відмови від інструментів GUI деякий час я спробував це зробити в Field Calculator. Це спрацювало досить добре, і я зміг контролювати процес трохи краще, ніж дозволяють графічні інтерфейси, і робити деякі інші розрахунки на цьому шляху.
Скажімо, у вас є шар з ім'ям pts
та іншим назвою rast
, обидва в одній і тій же системі координат. Ви хочете зробити вибірку rast
для кожної пари X, Y, представленої в pts
.
Якщо ви раніше не використовували Field Calculator, це досить просто. Ви введете свій розрахунок у поле "Вираз", і Q дає ряд змінних та операцій у середньому стовпчику, з текстом довідки у правій колонці. Я розбию цей процес на чотири кроки:
Відкрийте таблицю атрибутів pts
шару, з яким ви хочете пробувати вибірку.
Після переходу до діалогового вікна «Калькулятор поля» виберіть, чи хочете ви створити нове поле або змінити наявне поле у вашому pts
шарі.
Далі, побудуйте вираз для заповнення нового або існуючого pts
стовпця атрибутів. Ви можете почати, змінивши код виразу, який працював на мене:
raster_value('rast', 1, make_point($x, $y))
raster_value()
ім'я шару растрових 'rast'
, номер смуги 1
та геометрію точки в make_point()
. $x
і $y
є змінними геометрії, що залежать від розташування точки в кожному рядку таблиці атрибутів.Цей метод також дозволяє проводити арифметичні операції, такі як віднімання значення іншого растрового шару, викликаного other_rast
з rast
, що заощадило мені купу часу на інструментах графічного інтерфейсу. Приклад нижче:
raster_value('rast', 1, make_point($x, $y)) - raster_value('other_rast', 1, make_point($x, $y))
Зауважте ще раз, що три шари pts
, rast
і other_rast
повинні бути в одній системі координат, щоб цей метод працював.
Спробуйте використовувати QGIS 3.2.2 та SAGA (встановлені за замовчуванням у QGIS): Функція "Растрові значення для точок" зробить все за вас: він бере файл зображення та перетворює його у форму точкового вектора, беручи інформацію з растрового зображення.
Інструменти GME Hawthorne Beyer роблять це чудово за допомогою командного рядка та дозволяють легко проводити обробку циклів "for".
isectpntrst(in="path/to/shapefile", raster="path/to/raster", field="fieldname")
У GRASS GIS можна або здійснити запит на карту в графічному інтерфейсі, або скористатися http://grass.osgeo.org/gdp/html_grass64/r.what.html
http://gis-techniques.blogspot.com/2012/10/extract-raster-values-from-points.html має покрокове керівництво для використання R Растер витягує значення растрових значень з точок.
Ви можете використовувати це: http://www.saga-gis.org/saga_module_doc/2.1.3/shapes_grid_3.html
Його в Пакет інструментів SAGA Qgis! Це все робить за один крок :)
Ось функцію, яку я написав за допомогою python та gdal. Функція приймає список растрових даних і рамки даних панди, що містять точкові координати, і повертає кадр даних панди з точковими координатами, центроїдами для відповідних растрових комірок і відповідними значеннями комірок. Функція є частиною пакету хороспій, що розробляється, (знайдено тут ).
import pandas
import numpy
from osgeo import gdal
def getValuesAtPoint(indir, rasterfileList, pos, lon, lat):
#gt(2) and gt(4) coefficients are zero, and the gt(1) is pixel width, and gt(5) is pixel height.
#The (gt(0),gt(3)) position is the top left corner of the top left pixel of the raster.
for i, rs in enumerate(rasterfileList):
presValues = []
gdata = gdal.Open('{}/{}.tif'.format(indir,rs))
gt = gdata.GetGeoTransform()
band = gdata.GetRasterBand(1)
nodata = band.GetNoDataValue()
x0, y0 , w , h = gt[0], gt[3], gt[1], gt[5]
data = band.ReadAsArray().astype(numpy.float)
#free memory
del gdata
if i == 0:
#iterate through the points
for p in pos.iterrows():
x = int((p[1][lon] - x0)/w)
Xc = x0 + x*w + w/2 #the cell center x
y = int((p[1][lat] - y0)/h)
Yc = y0 + y*h + h/2 #the cell center y
try:
if data[y,x] != nodata:
presVAL = [p[1][lon],p[1][lat], '{:.6f}'.format(Xc), '{:.6f}'.format(Yc), data[y,x]]
presValues.append(presVAL)
except:
pass
df = pandas.DataFrame(presValues, columns=['x', 'y', 'Xc', 'Yc', rs])
else:
#iterate through the points
for p in pos.iterrows():
x = int((p[1][lon] - x0)/w)
y = int((p[1][lat] - y0)/h)
try:
if data[y,x] != nodata:
presValues.append(data[y,x])
except:
pass
df[rs] = pandas.Series(presValues)
del data, band
return df
Приклад того, як його запустити, враховуючи, що растри знаходяться у вашому поточному робочому каталозі:
rasDf = getValuesAtPoint('.', ['raster1', 'raster2'], inPoints, 'x', 'y')
Якщо у вас є доступ до FME, ви можете використовувати один з двох трансформаторів у робочому місці FME.
RasterCellCoercer ( «Розкладається все вхідні числовими особливості растрових точок на окремі або багатокутники. Один вектор ознак виводяться для кожного осередку в растрі.»)
PointOnRasterValueExtractor ( «приймає в точкових функцій і одного опорного растра. Висновок складається з смуги і палітри значення (ів) в місці розташування кожної точки.»)
Швидка думка: