Страница 1 из 1

Расстояние от точки до полигона

Добавлено: 10 окт 2013, 12:55
losdimas
Всем доброго времени суток!
Появился еще один вопрос: есть полигональный контур земли, есть точечная тема расположенная в море.
Можно каким-либо образом узнать расстояние от точки до ближайшего берега? Единицы измерения могут быть условные.

Re: Статистические вычисления в QGIS

Добавлено: 10 окт 2013, 13:04
gamm
losdimas писал(а):Появился еще один вопрос: есть полигональный контур земли, есть точечная тема расположенная в море.
Можно каким-либо образом узнать расстояние от точки до ближайшего берега? Единицы измерения могут быть условные.
можно. Это дистанционное преобразование, есть в любой растровой ГИС (называться может по разному). Берег сносится на растр, делается дистанционное преобразование, и в точках с растра снимается ответ

Re: Статистические вычисления в QGIS

Добавлено: 11 окт 2013, 08:07
losdimas
gamm, спасибо!
Если кому пригодится, то в ArcGIS это: Инструменты -> Анализ -> Близость -> Ближайший объект. Здесь конвертировать в растр не надо.

Re: Статистические вычисления в QGIS

Добавлено: 11 окт 2013, 10:30
HasT
losdimas писал(а):Всем доброго времени суток!
Появился еще один вопрос: есть полигональный контур земли, есть точечная тема расположенная в море.
Можно каким-либо образом узнать расстояние от точки до ближайшего берега? Единицы измерения могут быть условные.
решение как сделать используя PostgreSQL/PostGIS:

Код: Выделить всё

---------------------------------------------------------------
DROP TABLE IF EXISTS linefrompoly;

CREATE TABLE linefrompoly AS
SELECT id, ST_MakeLine(sp,ep) AS the_geom
FROM
   -- extract the endpoints for every 2-point line segment for each linestring
   (SELECT
      id,
      ST_PointN(geom, generate_series(1, ST_NPoints(geom)-1)) as sp,
      ST_PointN(geom, generate_series(2, ST_NPoints(geom)  )) as ep
    FROM
       -- extract the individual linestrings
      (SELECT id, (ST_Dump(ST_Boundary(the_geom))).geom
       FROM polygon -- existing polygonal layer
       ) AS linestrings
    ) AS segments;
---------------------------------------------------------------
DROP TABLE IF EXISTS pointonline;

CREATE TABLE pointonline AS
SELECT b.id AS ponlid, ST_Closestpoint(ST_Collect(a.the_geom), b.the_geom) as the_geom
FROM linefrompoly a INNER JOIN point b
ON ST_Dwithin(a.the_geom, b.the_geom, 100) -- distance for collect points
GROUP BY b.gid, b.the_geom;
---------------------------------------------------------------
DROP TABLE IF EXISTS distance;

CREATE TABLE distance AS
SELECT 
b.the_geom,
b.id, 
ST_Distance_Sphere(a.the_geom, b.the_geom) AS dist
FROM pointonline a , point b
WHERE a.ponlid = b.id
---------------------------------------------------------------
порядок работы запроса: полигональные объект конвертируется в линейные (linefrompoly), на созданном линейном слое создаются точки которые расположены на минимальном расстоянии от объектов точечного слоя (pointonline),
создается точечный слой (distance) с исходным номером точки и минимальным расстоянием до линейного слоя (полигонального).
Использовалась статья http://www.jordogskog.no/blog/postgis/h ... gis-part1/

Re: Статистические вычисления в QGIS

Добавлено: 12 окт 2013, 13:48
gamm
losdimas писал(а):Если кому пригодится, то в ArcGIS это: Инструменты -> Анализ -> Близость -> Ближайший объект. Здесь конвертировать в растр не надо.
это делается в векторе (как и приведенный вариант в базе), время квадратичное, при очень большом числе точек и линий будет работать очень долго (но точно; и время зависит от наличия и качества пространственного индекса и т.д.). В растровом варианте время зависит только от требуемой точности, к тому же сетка с расстоянием сохраняется и может быть использована для разных нужд.

Re: Расстояние от точки до полигона

Добавлено: 03 дек 2013, 19:54
geolog
Коллеги, а подскажите как в ArcGIS, для каждой точки растра посчитать расстояние до векторного объекта?