Вибір обмежувального поля з PostGIS


12

У мене є великий набір даних у базі даних PostGIS. Я переглядаю його через веб-інтерфейс, який завантажує дані як GeoJSON. Занадто багато даних, щоб дати клієнтові всі відразу (10s MB) ..., тому я хотів би отримати область даних у вікні обмеження, утвореному краями вікна (пунктирною лінією на зображенні нижче ). Отримати координати для точок f і g легко.

Питання 1: Це хороший спосіб робити справи? Чи варто думати про кешування їх як плитки чи цей метод, ймовірно, досить ефективний?

Питання 2: Як я можу отримати лише дані в цьому обмежувальному полі?

Питання 3: Якщо форма перекриває край обмежувального поля (наприклад, форма А внизу), чи існує простий спосіб обрізати його так, як це запитується, як на другому зображенні?

введіть тут опис зображення


Який глядач працює у клієнта?
underdark

Mapstraction. Наразі я використовую OpenLayers як провайдера.
Mr_Chimp

Відповіді:


8

просто змініть порядок питань, і у вас є процедура:

2) Виберіть лише те, що перетинає bbox ( ST_Intersects).
3) Перетинайте його з коробкою, щоб вирізати багатокутники ( ST_Intersection).
1) Створіть нову таблицю з результатами ( CREATE TABLE newtable AS SELECT...).

Документи ST_Intersection містять зразок коду. Вам потрібно буде адаптувати його і використовувати ST_PolygonFromText як bbox .


4

Я думаю, що це робить більшість (усіх) веб-клієнтів (і настільних gis). Ви не можете надіслати весь набір даних.

Якщо вам слід налаштувати кешування, залежить від того, чи ваші дані є статичними, чи вони змінюються.

Зробити це обмежувальне поле встановити прапорець для отримання даних буде дуже швидко (якщо у вас є просторовий індекс), але, звичайно, це не безкоштовно. Ви будете платити деякими процесорами.

Як було сказано раніше: Щоб знайти багатокутники всередині вашого масштабу, ви використовуєте ST_Intersects.

Щоб отримати лише частину всередині вашого обсягу, використовуйте ST_Intersection, але не робіть цього. ST_Intersection - це дорогий процес. Якщо у вас надзвичайно великі багатокутники, я думаю, що краще відправити цілі багатокутники.

Але я здогадуюсь, ви хочете зробити це на льоту, а не ставити його в таблицю

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.