Как лучше всего отобразить тысячи полигонов в Openlayers?

10

Я пытаюсь создать карту Openlayers, которая будет отображать тысячи полигонов. И когда пользователь нажимает на каждый из них, я хочу, чтобы отображались некоторые метаданные. Работа с этим большим набором данных кажется сложной задачей. Но я пытаюсь выяснить, есть ли стандартный способ сделать это. На данный момент, я думаю, я должен либо

  1. показать мои полигоны с помощью WMS и использовать getfeatureinfo
  2. Показать с WFS, загрузить с Strategy.BBOX и использовать GetFeature для получения meatadata.

Есть ли логичный способ, которым мне не хватает загружать все эти данные на карту и иметь хорошую скорость. Я смотрел на эту страницу и пытался выяснить, что они сделали: http://protectedplanet.net/

KyleK
источник

Ответы:

5

Мне не нравится стратегия BBOX, так как я думаю, что она может быть медленной из-за количества запросов, которые могут быть сгенерированы.

Я бы использовал комбинацию обеих вещей, которые вы упомянули.

отображать полигоны с помощью WMS и использовать getfeatureinfo ... затем использовать WFS, чтобы загружать контур объекта при нажатии и / или получать дополнительную информацию из базы данных.

protectedplanet.net не использует openlayers только карты Google. Они, вероятно, хранят всю информацию в KML / KMZ.

CaptDragon
источник
Большое спасибо! Я думаю, что я на правильном пути. Но мне интересно, использует ли защищенный план KML, нужно ли делать это для его скорости? И эти данные KML обслуживаются WFS?
KyleK
Я не знаю точно, является ли это KML, только предположение. Но если это так, то WFS не обслуживается, потому что WFS использует GML. Суть использования Google Apis и KML заключается в том, что вам нужно иметь этот KML на общедоступном URL-адресе, чтобы его могли увидеть ВСЕ. Если это не проблема, то, возможно, вы можете попробовать это. Это потому, что Google поглощает этот KML на своих серверах и возвращает его обратно в API. По этим двум причинам я не могу использовать API Google Maps из-за чувствительности некоторых проектов.
CaptDragon
Вы можете ограничить доступ к общедоступному URL-адресу KML, чтобы разрешить только пользовательский агент, представляющий строку анализатора Google KML.
Sarge
3

Основным подходом здесь является разделение растеризации с взаимодействием. Один из подходов (что я частично ответственным за) является UTFGrid , который был использован NPR, и т.д. , и интегрирован в TileMill и Mapnik . Он также используется CartoDB, а Google Maps использует аналогичный подход для Fusion Tables.

Защищенная планета также использует растровые тайлы (например, этот:) http://184.73.201.235/blue/8/78/93и имеет живой сервер для точечных запросов (например, этот ).

Re: CaptDragon: здесь нет ни WFS, ни KML.

WMS и WFS не дадут вам достаточно хорошей производительности для публичного сайта. Стратегия BBOX не будет работать, если вы позволите пользователям увеличивать масштаб.

tmcw
источник
К вашему сведению: вы можете кэшировать растровый сервис WMS, который даст вам плитки.
CaptDragon
1
Да, но это не главная проблема, это интерактивность. Вы не можете кэшировать способ работы WFS / WMS GetFeature, потому что они не предназначены для кэширования.
tmcw
Я постоянно кеширую результаты CSW, WFS и WMS GetFeature, GetRecord и т. Д. Это всего лишь стандарты формата для взаимодействия и не определяют, где хранится источник, кэшированный или нет.
CaptDragon
Типичный запрос WFS GetFeature - это запрос одной координаты; кеш для этого запроса хорош только для точных совпадений - что редко случается с точки зрения взаимодействия с пользователем. Такие альтернативы, как UTFGrid, кэшируют фрагменты данных и могут оптимистично заполнять кэш, в отличие от кеша для потенциально миллионов отдельных координат. Таким образом, стандарт диктует свою дружественность к кешу.
tmcw
Ух ты, спасибо за помощь. Поскольку я использую OpenLayers, а моя карта в 4326 (которая не поддерживается TileMill), вы бы порекомендовали CartoDB как средство для хранения и доступа к моим данным, хотя бы это?
KyleK