Раскраска карты шейп-файлов в ASP.NET - PullRequest
1 голос
/ 05 июля 2011

У меня есть карта Шейп-файла Мэриленда, разделенная почтовым индексом.Я хотел бы покрасить каждую область в зависимости от значения, которое я ищу в базе данных.В настоящее время я использую ASP.NET с пакетом SharpMap.Основные вопросы:

1) Как связать фигуру с ее почтовым индексом? Я могу сгенерировать список почтовых индексов, используя ExecuteIntersectionQuery в SharpMap с установленным BoundingBox в качестве экстента карты,но я понятия не имею, как затем связать каждую строку полученной таблицы с формой, которую она представляет.

2) Как только я получу доступ к отдельной фигуре и узнаю, какой цвет мне нужен, как мненазначить цвет фигуре? В SharpMap я могу покрасить VectorLayer, но VectorLayer генерируется из исходного файла .shp, а не фигуры.

Я открыт для использования других бесплатные карты пакетов, кроме SharpMap (поэтому нет ArcGIS), но по юридическим причинам я не могу использовать GoogleMaps.

Я чувствую, что это должно быть относительно просто, но попытка найти какой-либо достойный ресурс для SharpMap довольно трудна.

РЕДАКТИРОВАТЬ: Хорошо, я сделал много процесса, просто перечитавкакая документация есть.Установив FilterDelegate ShapeFile, я могу сделать слой, состоящий только из строк, где почтовый индекс соответствует определенному значению.Теперь моя единственная проблема - заставить фильтр делегатов каждый раз искать другой почтовый индекс.Могу ли я передать другой параметр, кроме FeatureDataRow?Стоит ли прибегать к глобальной переменной?

1 Ответ

1 голос
/ 07 июля 2011

Для этого вам понадобится тематика.

Я предполагаю, что у вас уже есть код, который настраивает вашу карту и ее слои.Ваш шейп-файл является VectorLayer.

VectorLayer shapefileLayer = GetMyShapefileLayer();
shapefileLayer.Theme = new SharpMap.Rendering.Thematics.CustomTheme(GetStyleForShape);

Затем метод GetStyleForShape вызывается каждый раз, когда карте требуется стиль для рендеринга.Это выглядит так: -

private SharpMap.Styles.VectorStyle GetStyleForShape(SharpMap.Data.FeatureDataRow row, SharpMap.Layers.Layer layer)
    {
}

В методе вы создаете и возвращаете VectorStyle.Табличные данные, связанные с объектом, который он пытается отобразить, передаются в качестве параметра этому методу.

Таким образом, вы можете использовать параметр строки, чтобы получить свой почтовый индекс, и выполнять любую логику, необходимую для вычисления его стиля., сконфигурируйте этот стиль и верните его.

Этот метод (потенциально) часто вызывается, поэтому рассмотрите возможность сохранения стилей и их повторного использования, а не их повторное создание каждый раз.

Надеюсь, это поможет.

...