Яка найкраща практика зберігання географічних особливостей (ліній, багатокутників та їхніх багаточастинкових еквівалентів), коли ці особливості охоплюють антимерідіані (довжина ± 180 °), і їх потрібно надсилати та отримувати з клієнтських веб-додатків як GeoJSON?
Я починаю роботу над серверним веб-API з підтримкою бази даних Postgres / PostGIS, щоб працювати з історичними та прогнозними траєкторіями тропічного циклона та радіусами вітру. Багато циклонів у Тихому океані мають невдалу схильність до перетину антимеридіану, іноді багаторазово протягом свого життя:
Як новозеландець, що мешкає поблизу антимеридіану, я стикався з цією проблемою досить часто в регіональних даних, щоб мати деякі стратегії подолання, але хотів би насправді з’ясувати, що вважається найкращою практикою. На жаль, не існує жодних питань, позначених антимерідіаном , тому важко знайти відповідні запитання. З усіх питань, які я бачив, як боролася з цією проблемою, начебто шукають дуже конкретної поради. У цьому питанні коротко обговорюється антимеридіан для випадку земляного полігону GeoJSON без меж. Це питання досить близьке до того, що я задаю.
Мені потрібно зберігати історичні та прогнозні циклони в просторовій базі даних, але я припускаю, що з антимеридіаном виникнуть проблеми. Наприклад, лінія, що починається на широті / довготі (0,179)
і закінчується на (0,-179)
, неоднозначна щодо її напрямку: чи йде вона коротким шляхом по антимерідіану, або "обмотає" всю планету. Як такий шлях повинен зберігатися в просторовій базі даних (конкретно я працюю з PostGIS, але сподіваюся, що рішення є загальним)? Деякі ідеї, які у мене є:
- Не змінюйте геометричні характеристики та перекладайте неоднозначність на клієнтські програми.
- Розділіть будь-яку особливість, що перетинає антимеридіан на багаточастотну геометрію з розривом на антимеридіан . ( Специфікація GeoJSON підтримує названі CRS .)
- Робота з неглобальними прогнозами для різних циклонових басейнів або океанічних регіонів, які не мають такого розриву
- Використовуючи той факт, що циклон ніколи не спостерігав, щоб подорожувати по всій планеті, зберігайте координати циклонів, починаючи з діапазону широти, зміщеного
(90,-90)
фазою 360 ° (зберігаючи інші -180-180 °) - Користуючись тим, що циклон вкрай малоймовірний на південь від південного краю Африки, використовуйте перерву на 30 ° довготи (як на наведеній вище карті).
- Дозвольте координатам виходити за межі допустимого діапазону EPSG 4326 , наприклад> 180 ° та <-180 ° для будь-яких особливостей, що передають антимеридіан.
- Кодування дельти , як у TopoJSON (наприклад, початок на,
(0,-179)
а далі наступна координата --3
широта на захід). Я не маю уявлення, чи потрібно це реалізувати під час зберігання даних у PostGIS, але це чудове рішення для надсилання даних клієнтським програмам. - Певна форма позначення вектора або полярні координати. (Здається, досить складно і незвично.)
З них мені не подобаються ідеї 2–5, оскільки вони не є загальними, але мені подобаються, тому що вони мають певний сенс для мого конкретного застосування. Для додатків, що займаються лише даними в Тихому океані, вони можуть мати багато сенсу, тому я не хочу повністю знижувати їх як варіанти.
Ідеї 6 та 7 були викладені з блогу Тома МакРайта , який варто прочитати, але не є переконливим щодо антимеридіану.
Ідея 4 використовується GeographicaGS 'GeodesicLinesToGISPython
, який, у свою чергу, використовує fiona.transform.transform_geom
антимедіанічне зміщення на 360 °. У свою чергу, Fiona використовує OGR -wrapdateline
. Я думаю, це дуже солідний прецедент і насправді досить загальний.
У поєднанні з проблемою зберігання даних мені потрібно розглянути, як такі функції слід надсилати клієнтським програмам, і як моя програма повинна враховувати дані, що надсилаються до неї (наприклад, людський синоптик, що змінює прогнозну доріжку циклону в Тихому океані). Формат обміну, ймовірно, буде GeoJSON, але не повинен бути.
На жаль, специфікація GeoJSON не є явною щодо антимеридіанських проблем. Це з Вікіпедії :
Багато бібліотек або формат даних географічного програмного забезпечення проектують світ на прямокутник; дуже часто цей прямокутник розбивається рівно на 180-му меридіані. Це часто унеможливлює виконання простих завдань (наприклад, зображення області чи лінії) над 180-м меридіаном. Деякі приклади:
Специфікація GeoJSON не згадує обробку 180-го меридіана в його специфікації, як таке, зображення ліній, що перетинають 180-й меридіан, так само може бути інтерпретоване як проходження по всьому світу.
У OpenStreetMap ділянки (як і межа Росії) розділені на 180-му меридіані.
Я читаю, що GeoJSON не має особливого стандартного представлення особливостей, що охоплюють антимеридіани, і це навмисно залишається неоднозначним (багаточастинні геометрії, можливо, вирішать цю проблему). Аналогічно у OpenStreetMap є антиметрійні підрозділи геометрії, хоча я не знаю, чи є такі розділені функції багаточастинні або насправді дискретні записи.
Це здається досить проблематичним, особливо з точки зору внесення обмежувальної рамки чи інших просторових запитів, що охоплюють цю лінію, але також при аналізі та санітарії введення та будь-яких оновленнях для геометрії. Ось чому я намагаюся визначити найкращу практику, яку я можу прагнути дотримуватися.