2009-03-10 19 views
3

Я хочу создать некоторые плитки стиля тепловой карты, чтобы наложить поверх наших базовых карт, используя Open Layers. В принципе, я хочу разделить некоторый ограничивающий прямоугольник на сетку и отобразить каждый квадрат сетки, используя другой цвет, основанный на том, сколько точек образца попадает в этот квадрат сетки.Создание изображений с привязкой к географии в C#

К этим технологиям относятся C#, OpenLayers, SQL Server 2008 и GeoServer.

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

Моя конечная цель - принять любую произвольную ограничительную рамку, вычислить x-милю по x-мильной сетке, которая вписывается в этот ограничивающий прямоугольник, перебирать набор отдельных точек и назначать их одному квадрату сетки или другой, чтобы я мог рассчитать плотность точек на квадрат сетки, затем покрасить сетку в соответствии с плотностями, а затем наложить ее на базовую карту CloudMade с использованием Open Layers.

Любая помощь вообще была бы оценена по достоинству, в целом или в любой ее части.

ответ

4

Если ваш ограничивающий прямоугольник ориентирован по оси, это довольно просто. Просто создайте свой образ и создайте для него файл мира. Мировой файл - всего 6 строк текста, и вы уже знаете все необходимое (x & y размер пикселя, координата вашего верхнего левого угла).

Просто убедитесь, что вы используете ЦЕНТР верхнего левого угла, а не угол окна.

------ Вот как бы сделать мир файл -------

Say верхний левый угол вашего ограничивающего бокса находится в 203732x598374, и вы хотите изображение, которое имеет прямоугольники 200 м в ширину восток < -> запад и 300 м высокий север < -> юг.

Вы хотите сделать изображение, которое было соответствующее количество пикселей, то мир файл, который имел следующие 6 строк:

200 
0 
0 
-300 
203632 
598524 

Это соответствует:

200 == size of one pixel in X 
0 == shear1 
0 == shear2 
-300 == size of one pixel in Y (from top down) 
203632 == left edge - 1/2 pixel size (to center on pixel instead of edge of box) 
598524 == top edge - 1/2 pixel size (to center on pixel instead of edge of box) 

Если вы используете a .png, вы хотите сохранить это с тем же именем, но как .pgw. Если вы используете .jpg, это было бы .jgw и т.д.

Для получения полной информации см: Wiki on World Files

+0

Что вы подразумеваете под осью? – Nathan

+0

Ось выровнена == Ваша «ограничивающая рамка» настроена так, что она выровнена с Востоком и Северным (выровнены с осями). Это делает этот метод очень простым. Если это не так, это все еще возможно, но геопривязка сложнее. Дайте мне знать, если вам нужно больше разъяснений. –

+0

Выровненный, вы имеете в виду, что нижний левый угол равен X = 0, Y = 0? Если это так, это не будет работать, так как образ, который я бы сгенерировал, будет тогда всей землей, поэтому я, вероятно, недопонимаю вас:) – Nathan

2

«Деление некоторого некоторые ограничивающего прямоугольника в сетку, и отображение каждого квадрата сетки, используя другой цвет, основанный на том, сколько точек образца попадает в квадрат сетки ». Это растра и есть features в GeoServer для отображения их с оттенками цвета, легендами и т. Д. Я думаю, будет более гибко использовать эти функции, чем создавать плитки изображений на C#.

Из документации GeoServer:

Растровые данные не просто картинка, скорее можно рассматривать в виде сетки из привязанной информации, много как графики сетки визуальной информации (с комбинацией красных, зелени и блюза). В отличие от графики, , которые содержат только визуальные данные, каждая точка/пиксель в растровой сетке может иметь множество разных атрибутов, с , возможно, ни один из них не имеет визуального компонента .

Это также называется тематическим отображением или контурными графиками или тепловыми картами или 2.5D-графиками в других пакетах ГИС.

Вы можете использовать бесплатную ГИС, такую ​​как Grass, до растровых сеток, но из вашего описания вам не нужно интерполировать (поскольку каждая ячейка содержит хотя бы одну точку), поэтому было бы так же легко свернуть свои собственные код.

EDIT: есть библиотека с открытым исходным кодом GDAL, которую вы можете использовать для записи растровых файлов в various formats. Есть привязки C#.

+0

Отличные ресурсы, спасибо. Это информация, которую я получил. – Nathan

0

Я думаю, что формулы для вычисления центра верхнего левого пикселя ошибочны. В этом примере центр верхнего левого пикселя будет внизу и справа от (203732, 5998374). Так не должно ли это быть следующим?

203832 == left edge + 1/2 pixel size (to center on pixel instead of edge of box) 
598224 == top edge - 1/2 pixel size (to center on pixel instead of edge of box)