Я думаю, что много людей знает об указателях в C, но не уверено, работает ли он в C#. Можно использовать указатели в C# в небезопасном контексте:
static void Main()
{
int i;
unsafe
{
// pointer pi has the address of variable i
int* pi = &i;
// pointer ppi has the address of variable pi
int** ppi = π
// ppi(addess of pi) -> pi(addess of i) -> i(0)
i = 0;
// dereference the pi, i.e. *pi is i
Console.WriteLine("i = {0}", *pi); // output: i = 0
// since *pi is i, equivalent to i++
(*pi)++;
Console.WriteLine("i = {0}", *pi); // output: i = 1
// since *ppi is pi, one more dereference *pi is i
// equivalent to i += 2
**ppi += 2;
Console.WriteLine("i = {0}", *pi);// output: i = 3
}
Console.ReadLine();
}
Вы сильно ограничиваете себя, настаивая на .NET. Я ничего не знаю, кроме SharpMap или MapWinGIS ActiveX (MapWindow). Вот несколько бесплатных, но не .NET, вариантов для настольных приложений Windows.
Если вы хотите написать свое автономное приложение на Python или C ++:
Или если вы рассмотрите возможность написания плагина или настройки для существующей ГИС:
Думаю, вы это уже рассмотрели. На самом деле нет ни одного производственного проекта ГИС с открытым исходным кодом, использующего C #. В наши дни большая часть хорошей работы делается на Java, C / C ++ или Python. Если вам необходимо использовать .NET Framework, то я думаю, что лучшая из них - это SharpMap.
В противном случае вам нужно будет посмотреть на коммерческие продукты таких компаний, как http://www.esri.com . Конечно, это также зависит от того, что вам нужно: веб-службы, элементы управления Windows Forms, WPF и т. Д. В прошлом мне удавалось создать некоторый C #, который построил правильный XML для отправки в механизм сопоставления на основе сервера Java, чтобы вы могли посмотреть на что-то вроде GeoServer и создать своего собственного клиента. Очевидно, это не то, к чему вы хотите войти, но я не вижу, чтобы у вас было много вариантов, помимо тех, которые вы перечислили.