PostGIS'te çoklu çizgileri her n metrede bir noktaya nasıl dönüştürebilirim?


14

Bu hemen hemen aynı soru , ama PostGIS kullanmam gerekiyor.

Çok sayıda poleline sahibim ve bu çizgiler boyunca her n metrede bir noktalara dönüştürmek istiyorum.

edit: Stefan'a çok teşekkürler. Son sorgum, muhtemelen PostGIS'in (1.5) eski sürümü nedeniyle biraz farklıydı, ama sonunda neye ihtiyacım olduğunu aldım. Noktalar, yol yoğunluğunun bir ısı haritası halinde birleştirildi. resim açıklamasını buraya girin


Yanıtlar:


17

Bu sorgu hile yapmalıdır:

WITH line AS 
    (SELECT
        your_polylinestring_id,
        (ST_Dump(geom)).geom AS geom
    FROM your_polylinestring_table),
linemeasure AS
    (SELECT
        ST_AddMeasure(line.geom, 0, ST_Length(line.geom)) AS linem,
        generate_series(0, ST_Length(line.geom)::int, 10) AS i
    FROM line),
geometries AS (
    SELECT
        i,
        (ST_Dump(ST_GeometryN(ST_LocateAlong(linem, i), 1))).geom AS geom 
    FROM linemeasure)

SELECT
    i,
    ST_SetSRID(ST_MakePoint(ST_X(geom), ST_Y(geom)), 31468) AS geom
FROM geometries
  1. İlk önce çoklu sıralama sütunundan farklı satır dizilerini ST_Dump

  2. Daha sonra ST_AddMeasure, 0 (linestring başlangıcı) ve linestring sonu (linestring uzunluğuyla aynı) ile başlayan ölçü öğelerini tanımlamanız gerekir . Generate_series10 adımda bu ölçüm üzerinde bir seri oluşturur. Burada tanımlayabilirsiniz "n metres"(bu örnekte 10 metre). iDeğeri her LineString için yeniden başlar.

  3. İle ST_LocateAlongve ST_GeometryNbir çok boyutlu nokta geometri oluşturun.

  4. Son olarak, bu geometrinin X ve Y değerlerini çıkarmanız ve ondan bir nokta oluşturmanız gerekir.

Sonuç şöyle görünebilir: resim açıklamasını buraya girin

DÜZENLE

Adil olmak gerekirse, bu bilgileri eklemek istiyorum: Fikir ve bu yanıttaki sorgu PostGIS DEM'lerden örtü satırları oluşturmak için kullandığım bir sorgudan ayıklanır. Bunun mükemmel uygulaması Mathieu Leplatre'nin bu makalesinde açıklanmıştır .


Açıklayabilir misiniz, b / c Ben bu SQL yapıları aşina değilim: nerede WITH line ASkullanılır? Başka yerde 'çizgi' görmüyorum.
culebrón

2
@ culebrón Daha WITH Querybüyük sorgular için geçici tabloların kullanılmasını sağlar. İşte bazı bilgiler: postgresql.org/docs/8.4/static/queries-with.html . linesonraki alt sorguda kullanılır linemeasure. Bu alt sorguda seçilen veriler, alt sorguda yapılan seçimlere dayanır line. Birbirleri üzerine inşa edilmişlerdir. Umut etmek bu yardım etmek!
Stefan

PostGIS 2.0'dan daha eski bir işlevdir st_locate_along_measure.
culebrón
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.