Widziałem to pytanie zadane wcześniej, ale odpowiedzi, które próbuję, nie działają.
Chcę sprawdzić wszystkie sposoby OSM, które znajdują się w obwiedni. Dane OSM zostały zaimportowane z domyślnym sferycznym mercatorem. Pytam przy użyciu LAT / LON, stąd transformacja
SELECT *
FROM planet_osm_ways
WHERE ST_Transform(
ST_MakeEnvelope(37.808264, 37.804339, -122.275244, -122.271189,
4326),3857
);
Po uruchomieniu tego pojawia się następujący błąd:
BŁĄD: argument GDZIE musi być typu logicznego, a nie geometrii typu. LINIA 3: GDZIE ST_Transform (ST_MakeEnvelope (37.808264, 37.804339, -12 ...
Odpowiedzi:
Występują trzy problemy ze stwierdzeniem, chociaż komunikat o błędzie sugeruje tylko jego część ... „GDZIE musi być typu boolean” oznacza, że informacja, którą podałeś, GDZIE nie ma wartości logicznej.
ST_MakeEnvelope prosi o jego parametry w następującej kolejności:
xmin, ymin, xmax, ymax, srid
.Podałeś niepoprawnie
ymax, ymin, xmax, xmin, srid
.GDZIE należy ocenić, aby uzyskać wartość logiczną:
Aby ustalić, czy geometria i obwiednia mają jakieś wspólne elementy, GDZIE należy skonstruować w ten sposób: w
WHERE geom && envelope_geom
przeciwnym razie można użyć ST_ContainsAby ustalić, czy geometria jest zawarta w obwiedni: `WHERE ST_Contains (vel_geom, geom)
Nie podałeś żadnej metody porównania dla
WHERE
.Tabela „planet_osm_ways” nie zawiera żadnej kolumny geometrii, chociaż „planet_osm_roads” zawiera kolumnę geometrii o nazwie „way”.
Możesz utworzyć kolumnę geometrii w tabeli „planet_osm_ways” z powiązanych planet_osm_nodes.lat i planet_osm_nodes.lon.
Za pomocą „planet_osm_roads” pokazano, jak używać obwiedni względem tabeli z kolumną geometrii:
lub zmień to na:
źródło