Чи є рішення FOSS для розбору легенд у середовищі веб-картографування?


14

Наші вимоги до веб-карти досить стандартні - деякі основні запити та можливість роздрукувати отриману карту (або зберегти зображення). Зазвичай ми використовували продукти ESRI в минулому (зараз ми використовуємо GeoCortex), але ми все ще не змогли вирішити проблему, як розібрати інформацію легенди, щоб відповідати тому, що насправді відображається на карті. Наприклад, якщо на карті відображаються чотири багатокутники, для полігонів повинно бути лише чотири елементи легенди. Чи існує вирішення цієї проблеми з відкритим кодом?

EDIT : Давайте подивимось, чи можу я уточнити це ще. Наразі у нас є геологічний шар з 33 000+ полігонами. Легенда для цього шару є єдиним зображенням і містить кілька сотень елементів легенди (тобто це легенда для всього шару геології, що зберігається в JPEG / PNG).

Зазвичай користувач збільшуватиме масштаб області (наприклад, одного аркуша карти NTS або навіть меншого розміру), і таким чином на екрані буде відображено підмножину полігонів з геології. Потім вони збережуть карту у вигляді документа для друку (PDF або зображення), який генерується GeoCortex / ArcGIS Server. Документ для друку міститиме заголовок, зображення карти та легенду. Однак легенда для шару геології буде легендою для всього шару геології, а не того, що насправді відображається на карті (тобто значно менший підмножина).

Отже, я дивлюсь, чи існує FOSS-рішення, яке дозволить мені вирізати або генерувати на леті підмножину легенди про геологію, яка відображає фактичні елементи на екрані / на карті, щоб перейти з документом для друку . Я сподіваюся, що це з’ясовує речі; Прошу вибачення, якщо цього немає!


1
Привіт ollyoop - мені важко передбачити бажаний результат. Чи можете ви включити приклад поганої легенди та приклад хорошої легенди? Я думаю, що це може допомогти мені чи іншим дати відповідь. Спасибі--
andytilia

ця функція була включена в сервер Arcgis 10.1, я бачив її під час презентації ESRI.
geogeek

Хм, ну, ми побачимо, як це насправді виходить. Тим часом чи є рішення щодо FOSS?
ollyoop

1
На основі FOSS або ESRI, це здається, що вам знадобиться спеціальний код.
Рагі Ясер Бурхум

Звичайно, Latitude Geographics може це зробити. Чи говорили ви з ними про це (чи це вже є у Geocortex Essentials чи планують його впровадити)?
Чад Купер

Відповіді:


3

Однозначно можна робити те, що ти хочеш, залежно від певних умов. Погляньте на цей додаток Flex, який я розробив пару років тому: http://india-wris.nrsc.gov.in/LULCApp.html .

Легенда та статистика змінюються залежно від даних, видимих ​​у поточному масштабі. Алгоритм вимагає, щоб кожен з класів мав чітке забарвлення. Додаток Flex знає клас та його колір. При кожній зміні він перетворює поточну міру карти у растрову карту, а потім виявляє кольори в ній. Використовуючи це, ви можете дізнатися, які кольори або класи зараз видимі. На основі цієї інформації динамічно створюється легенда.

У той час я використовував Flex, але це також можливо за допомогою Canvas в HTML5. Або ви можете скористатися будь-яким кодом сервера, щоб зробити те ж саме із зображенням карти, щоб отримати легенду, що динамічно створюється.


Саме так! Чудово бачити приклад на практиці. Цінується!!!
ollyoop

5

AFAIK, у FOSS4G або ESRI, вам потрібно буде написати спеціальний код для створення цього шару.

Це не що важко, але це займе у вас більше , ніж кілька рядків коду.

Для ArcMap це здійснюється за допомогою користувацького елемента . Сайт довідки ESRI заповнений старими прикладами та новими прикладами .

У минулому я здійснив щось подібне до того, що ви описали, використовуючи елементи Framelay Frame .

Якщо ви ніколи не робили ArcObjects (але запрограмували), малювальний код може бути трохи хитрим, але для досягнення цього "ага!" Зазвичай потрібно зробити один. мить.

Алгоритм простий:

  • (1) Отримати карти об'єкт PageLayout , який ви хочете використовувати в якості основи для створення легенди ... Ви , можливо , доведеться мати справу з декількома кадрами , щоб досягти карту , яку ви хочете, тому що PageLayout може містити кілька карт об'єктів з різними розширення, що трохи незвично, якщо ви ще не робили спеціального програмування ArcMap Pagelayout (подумайте про маленькі карти вставки, які у вас можуть бути).

  • (2) Візьміть видимий об'єм ActiveView потрібної карти.

  • (3) Використовуйте його в якості запиту геометрії фільтра в циклі і пошук через всі шари в карті.

  • (4) Якщо шар повертає будь-які записи, ви повинні намалювати його, як показано в прикладах, які я вам давав раніше.

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

Оновлення:

Оскільки ви хотіли це зробити в контексті веб-програми, я перевірив документацію і є кілька способів зробити це за допомогою подібного алгоритму.

Одне з них здійснюється через розширення об’єкта ArcGIS Server . Ви б зробили всі кроки, крім (1) (не потрібно турбуватися про Pagelayout у цьому контексті). Розкрийте результат за допомогою REST.

Звідси у вас є кілька варіантів (на основі, якщо ви хочете використовувати Flex або Javascript), але ідея та ж - на оновлення сторінки зателефонуйте до створеної вами веб-сервісу REST і намалюйте легенду.

Перевага цього підходу на відміну від інших, які були запропоновані, полягає в тому, що ви можете використовувати будь-яку символіку зі своїми ознаками (і не обмежуєтесь окремими кольорами для символіки функції). Ви можете використовувати свою улюблену веб-мову для коду клієнтської сторони. Символи, які ви створюєте для легенди, можна автоматично генерувати з карти.

Недоліком є ​​те, що вам потрібно буде написати розширення серверного об’єкта! На щастя, є зразок ESRI, який робить 75% того, що вам вже потрібно, і повинен дати вам чітке уявлення про те, як продовжувати коментарі, які я зробив вище.

Оновлення 2: Що стосується рішення FOSS4G для цього, той самий підхід працював би і з будь-яким із серверів FOSS, хоча API дещо відрізняється для кожного.


1
Дуже дякую за відповідь! Існує інструмент, який називається Legend Limiter, який вже робить це для середовища ArcGIS. Що я хочу зробити, це передати цю здатність до світу веб-карти.
ollyoop

@ollyoop Принаймні до 9.3, я знаю, що цей же підхід спрацював би повністю для ArcGIS Server. Я знаю, що в архітектурі візуалізації сервера відбулися значні зміни з 9.3, і я, правда, не встиг за цим. Я був би здивований, якби користувацькі елементи витягли з 10,1, хоча.
Рагі Ясер Бурхум

@ollyoop додав підхід, який би працював із сервером ArcGIS
Ragi Yaser Burhum

3

Під час експорту до PDF з Geocortex Essentials легенда генерується за допомогою підзвіту в шаблоні друку. Цей підзвіт отримує всі видимі шари, які були використані для створення карти карти, та всі зразки легенд, вироблені ArcGIS Server. Він не видає жодних просторових запитів, щоб визначити, чи якісь шари в легенді насправді намальовані в межах друкованої області.

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

Легенда вже містить деякий вбудований вбудований код, який перемикає форматування тексту легенди на основі, якщо зразок призначений для шару або для класу в шарі. Ви можете побачити вбудований код під час переходу на вкладку "Сценарій" у дизайнері звітів.

(Я працюю в Latitude Geographics)


1

Про "веб-картування" з повним "FOSS рішенням" ...

  • "Рішення FOSS" повинно бути "популярним" (мати велику та організовану спільноту), щоб бути безпечним, стабільним тощо.
  • Ключова концепція FOSS та GIS - це стандартизація : найкращі рішення приймають стандарти, як і OGC .
  • Сьогодні популярними "веб-рішеннями" є OpenLayers, Mapserver, GeoServer, PostGIS тощо. Усі вони мають ядро, сумісне з OGC. Рішення "GeoCortex / ArcGIS Server" не є FOSS, але, можливо, сумісно з OGC.

І технічний розгляд: ви використовуєте "покриття" (?), Тому хорошим стандартом OGC для отримання просторової інформації є WMS .


Просте рішення OGC-сумісний з вашою проблемою , є використання WMS GetCapabilities і GetLegendGraphic послуги, яка повертає стандартне опис легенди в файл XML, а також зображення з легендами.

ПРИМІТКА: коли ви думаєте про якесь рішення GIS / FOSS, ви можете продумати спочатку стандарти, тоді проблема зводиться до "добре відомої проблеми LEGO штук", і шматки надійшли від будь-якого постачальника.

ArcGIS 10+ мають GetLegendGraphic , але перевірте, чи можете ви вказати BBOX для показу лише підмножини легенд.


Якщо ви хочете побудувати макет карти з легендою , є ще один фрагмент цього "рішення FOSS LEGO":

Будь-який сервер карт FOSS, як MapServer (і я думаю, що рішення ESRI також), може запропонувати зображення JPEG у вигляді запиту WMS (без кахельних плит) - див . Сервіс GetMap WMS .

PS: це не стандарт, але, можливо, ваш сервер може налаштувати пропонувати карту з легендою , за допомогою шаблонного інструменту, наприклад MapServer.

Щоб скласти макет "карта з легендою", ви можете створити HTML (або "PDF-файл на льоту") з Javascript, PHP або іншою мовою, яка виконує запити веб-служб (REST) на карту та легенду.

Я вважаю за краще генерувати PDF з HTML: ви можете використовувати wkHtmlToPdf , рішення FOSS для перетворень HTML у PDF. Для створення бідніших макетів, з "макетом JPEG-макета", ви можете використовувати стандартний набір інструментів FOSS, наприклад, imagemagick , на сервері.

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