Jak uzyskać odległość i namiar między punktem a najbliższą częścią wielokąta?

9

Jestem całkiem nowy w pisaniu SQL i używaniu PostGIS, więc przepraszam, jeśli wydaje się to nieco proste lub oczywiste. Mam tabelę cech wielokąta przechowywanych w bazie danych postGIS i muszę napisać zapytanie SQL, aby wybrać wszystkie atrybuty, odległość i kierunek cech wielokąta w pewnej odległości od określonego punktu. Udało mi się wybrać funkcje i obliczyć odległość (za pomocą ST_Distance), ale nie mogę ustalić, jak uzyskać łożysko.

Oto skrypt, którego używam do tej pory:

SELECT *,
  ST_Distance (Geometry, ST_GeomFromText ('POINT(292596 90785)', 27700))
FROM mytable
WHERE
  ST_DWithin(
    Geometry,
    ST_GeomFromText('POINT(292596 90785)', 27700),
    250) 

Jak obliczyć namiar funkcji i odległość?

JamesC
źródło

Odpowiedzi:

4

Możesz użyć ST_Azimuth do obliczenia łożyska, ale wymaga to tylko geometrii punktowych jako parametrów, więc musisz zdecydować, które łożysko naprawdę chcesz.

Możesz wybrać najkrótszą linię, jak sugeruje @Nicklas (jest to ta z już obliczoną odległością), co ma sens, jeśli potrzebujesz najszybszego „kierunku”, aby dotrzeć do wielokąta. Jeśli chodzi o cokolwiek innego, sugeruję, abyś obliczył go względem centroidu wielokąta (ST_Centroid), co powinno dać lepsze wyniki dla dowolnych kształtów.

lynxlynxlynx
źródło
2

Posługiwać się

ST_Azimuth (ST_Shortestline (geom1, geom2))

edytować

Właśnie zdałem sobie sprawę, że ST_Azimuth nie bierze linii jako argumetn, więc zamiast tego będziesz musiał dać mu dwa punkty.

Jeśli jedna z geometrii jest punktem, możesz użyć tego bezpośrednio i użyć ST_ClosestPoint, aby uzyskać punkt na wielokącie.

Nicklas Avén
źródło
1

ST_Azimuth to pożądana funkcja. Zwraca kąt w radianach zgodnie z ruchem wskazówek zegara od północy. Jak ST_Azimuth()pokazuje przykład na stronie, po prostu zawinięcie go w degrees()funkcję da ci kąt w stopniach, jeśli tego potrzebujesz.

MerseyViking
źródło