Şu anda isochrones ve temel algoritmalar alanında çalışıyorum. Şimdi sorunlara neden olan şey, izokronun kendisinin hesaplanması değil, sonuçların görselleştirilmesidir.
İzokron algoritmamın sonucu noktalar ve kenarlardır. Aslında çalışan bir çözümüm var, ancak 3873 kenarlar ve 1529 düğümler için işler sonsuza dek sürecek gibi görünüyor (2015 Core i7 CPU ve oldukça hızlı bir SSD içeren Lenovo T440s dizüstü bilgisayarımda yaklaşık 2.0 saniye). Saniyeler yerine msec gibi bir şey istiyorum :-).
Belki biri ulaşılabilir alanları görselleştiren çokgenler oluşturmak için gereken hesaplama süresini azaltmama yardımcı olabilir.
Ama bekleyin ... ilk önce!
İşte benim izokron benim hesaplama sonucu olan kenarların bir görselleştirme:
Bu kenarlar bir PostGIS veritabanı tablosunda depolanır ve basit linestrings vardır.
Kullanıcıya göstermek istediğim şudur: Resmin en güneyindeki ve doğusundaki bağlantısız alanlara dikkat edin. Bunlar ayrı alanlar olarak çizilmelidir (bu nedenle burada birleştirmeye izin verilmez :-))
Şu anda bu sorguyu kullanıyorum:
SELECT ST_AsGeoJson(St_Transform(ST_Multi(ST_Collect(polygons)), 4326)) AS coverage FROM (
SELECT ST_MakePolygon(ST_ExteriorRing(ST_GeometryN(segments, generate_series(1, ST_NumGeometries(segments))))) AS polygons FROM (
SELECT ST_Union(ST_Buffer("GEOMETRY", 20, 'quad_segs=2')) AS segments FROM my_edges AS a
) AS b
) AS c
Zaten bazı deneyler yaptım ve çok fazla belge okudum, ancak daha iyi bir çözüm bulamıyorum.
Benim gözümde en büyük sorun ST_Union kullanımıdır (dokümanda belirtildiği gibi bu fonksiyon yavaş olabilir). En ilginç şey, ST_Collect ile değiştirilmesinin ST_Buffer hesaplamasını yavaşlatması gibi görünüyor, böylece kenarlar arasındaki alanları doldurmasa da (yalnızca satırların etrafında bir tampon oluşturur) ):
SELECT ST_AsGeoJson(St_Transform(ST_Multi(ST_Collect(polygons)), 4326)) AS coverage FROM (
SELECT ST_Buffer(ST_Collect(ST_LineMerge("GEOMETRY")), 20, 'quad_segs=2') AS polygons FROM my_edges AS a
) AS b
Bu benim sistemimde yaklaşık 3.8 saniye sürüyor (yani neredeyse iki katı). Bu küçük ölçütten ilk sonucum, ST_Buffer'ın MultiLineStrings söz konusu olduğunda beklenmedik bir şekilde yavaşladığı (her satır için tampon oluştururken ve tamponları birleştirirken - hatta gözlerim sadece garip) -
Ben de (pgRouting uygulama kullanarak) alfa-şekiller kullanmaya çalıştım, ama ayarlamak için alfa değeri olmadığından (ve aslında ben gerçekten böyle bir değeri ayarlamak için hangi değere değil) Ben sadece bir büyük çokgen ( bu yüzden çok güney ve doğudaki bölgeleri ayrı bölgeler olarak kaybederdim ki istediğim bu değil).
Ayrıca ST_Polygonize (aklıma gelen ilk şeydi) herhangi bir kullanılabilir sonuç vermedi, ama belki burada bir şey kaçırdım ...
PostGIS'te gösterilen alanı oluşturmanın daha iyi bir yolu var mı? Belki de java kodu (jts) veya istemci tarafı javascript kodu (jsts) kullanarak? Aslında, sonuçta gösterilen alanlar ayrı kaldıkça ve hesaplama (çok) daha hızlı hale geldiği sürece biraz ayrıntı kaybederek yaşayabilirdim.