Vytváření vyrovnávací paměti pro nalezení bodů je jednoznačné ne-ne, protože (1) je režie při vytváření geometrie, která představuje vyrovnávací paměť, a (2) výpočet bodu v polygonu je mnohem méně efektivní než jednoduchý výpočet vzdálenosti.
Zjevně pracujete s daty (zeměpisná délka, šířka), takže byste je měli převést na vhodný kartézský souřadnicový systém, který má stejnou měrnou jednotku jako vaše vzdálenost 10 000. Pokud je tato vzdálenost v metrech, můžete bod z tabulky přenést také do geography
a vypočítat přímo na (dlouhé, zeměpisné) souřadnice. Protože chcete identifikovat pouze body, které jsou v zadané vzdálenosti, můžete použít ST_DWithin()
funkce
s výpočtem na kouli pro přidanou rychlost (nedělejte to, když jste ve velmi vysokých zeměpisných šířkách nebo na velmi dlouhé vzdálenosti):
SELECT id, point
FROM my_table
WHERE ST_DWithin(point::geography,
ST_GeogFromText('POINT(-116.768347 33.911404)'),
10000, false);