Analiza najbliższego sąsiada w czasie w QGIS

Nov 30 2020

Jak przeprowadzić tymczasową analizę najbliższego sąsiada w QGIS?

Nie jestem pewien, czy to właściwa terminologia, ale w zasadzie mam zbiór danych z ~ 100 000 transakcji cen domu w okresie 5 lat. W tym okresie powstały nowe stacje kolejowe. Wiem, jak przeprowadzić podstawową analizę najbliższego sąsiada, ale chciałbym wykonać tymczasową NNA, aby określić najbliższą stację kolejową w momencie transakcji .

Odpowiedzi

6 Babel Nov 30 2020 at 22:13

Czerpię inspirację z tej odpowiedzi tutaj https://gis.stackexchange.com/a/335914/88814, możesz stworzyć wirtualną warstwę.

Niestety Processing Toolbox / Vector analysis / Distance to nearest hub (line to hub)nie pozwala na żadne zaawansowane ustawienia, filtry, warunki i tak dalej.

Powiedzmy, że masz dwie warstwy punktów o nazwie transactionsi stations. Oba zawierają znacznik czasu: data, w której odbyła się transakcja time_of_transaction, godzina otwarcia stacji kolejowej jako timestamp_stations.

Utwórz wirtualną warstwę i wklej to zapytanie:

SELECT trs.fid as id_transaction, st.fid as id_station,
       ROUND(MIN(ST_Distance(trs.geometry, st.geometry)),2) AS distance
FROM transactions AS trs, stations AS st
WHERE st.timestamp_stations < trs.time_of_transaction
GROUP BY trs.fid
ORDER BY distance DESC

To daje listę transakcji z najbliższą stacją kolejową, która istniała w momencie, gdy transakcja miała miejsce. Wynik zapytania wygląda następująco - jest to lista transaction_id z pasującym identyfikatorem najbliższej stacji pociągów:

Możesz to sprawdzić na następnym obrazku: czerwone kropki to transakcje (domy), niebieskie stacje kolejowe. Porównaj wyniki:

Czerwona kropka 11 (na dole) ma niebieską kropkę 18 (pośrodku po lewej) jako najbliższy punkt - kilka niebieskich kropek jest bliżej (jak nr 3), ale są nowsze niż transakcja, więc jeszcze nie istnieje, kiedy transakcja miała miejsce.

Czerwona kropka 10 (w środku) w ogóle się nie pojawia, ponieważ transakcja miała miejsce wcześniej niż data związana ze wszystkimi niebieskimi kropkami (stacja kolejowa): w tym momencie nie było stacji kolejowej, więc nie było najbliższej.

Czerwona kropka 2 (w środku) nie ma niebieskiej kropki 21 jako najbliższej, ale nie. 11, czyli dalej, ale starsza: to ta, która istniała już w momencie transakcji.

Korzystając z nowego kontrolera czasowego (dostępnego od QGIS 3.14 - dla starszych wersji użyj wtyczki timemanager ), możesz wygenerować animowane serie czasowe, aby sprawdzić wyniki - zobacz zrzut ekranu, który pokazuje dla bieżącego przedziału czasowego, które stacje kolejowe istniały w tym momencie w czas (ustawienia czasu kumulują się w zakładce czasowej warstwy stacji), co daje widoczność transakcji w przedziale czasowym 4 miesięcy (ustawienie czasu trwania zdarzenia na 4 miesiące w zakładce czasowej warstwy transakcji). Widzisz wyraźnie, że połączenia generowane przez zapytanie naprawdę odpowiadają w tej chwili najbliższej stacji kolejowej: