Библиотека proj.dll отказывается считать

Вопросы по нескольким пакетам сразу, или вопросы, которые непонятно к какой ГИС отнести
Ответить
Fedor123
Новоприбывший
Сообщения: 4
Зарегистрирован: 21 фев 2011, 08:47
Репутация: 0

Библиотека proj.dll отказывается считать

Сообщение Fedor123 »

Добрый день! Я новичек в гис и прошу сильно не ругать, если где-то буду не корректно выражаться :) . У меня проблема следующего рода: пытаюсь с помощью библиотеки proj.dll выполнить преобразование из wgs84 в ск42, передаю функции pj_transform значения 50 50, и насколько я понял из обсуждения этой темы должен получить значения 50.0013824844 49.9998666102, но в результате значения 50 50 так и остаются. Не пойму где может быть ошибка :?: . Вот листинг программы (c#):

Код: Выделить всё

using System;
using System.Runtime.InteropServices;

namespace ProjApi
{
	public class Proj
	{
		[DllImport("proj.dll", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.Cdecl)]
		public static extern int pj_transform(IntPtr src, IntPtr dst, 
			int point_count, int point_offset,
			[InAttribute, OutAttribute] double[] x,
			[InAttribute, OutAttribute] double[] y, 
			[InAttribute, OutAttribute] double[] z);

		[DllImport("proj.dll", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.Cdecl)]
		public static extern IntPtr pj_init_plus(
				[MarshalAs(UnmanagedType.LPStr)] string pjstr);

    }
}

using System;
using System.Runtime.InteropServices;
using ProjApi;


public class ProjApiTest {

    static void Main(string[] args)
    {
        IntPtr src = Proj.pj_init_plus("+proj=latlong +ellps=WGS84 +datum=WGS84");
        IntPtr dst = Proj.pj_init_plus("+proj=latlong +ellps=krass"
            +" +towgs84=23.92,-141.27,-80.9,0,0.35,0.82,0.12 -f '%.10f'");

        double[] x ={ 50 };
        double[] y ={ 50 };
        double[] z ={ 0 };

        int res = Proj.pj_transform(src, dst, x.Length, 1, x, y, z);
        Console.WriteLine(x[0]);
        Console.WriteLine(y[0]);
    }

}
Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Библиотека proj.dll отказывается считать

Сообщение Дмитрий Барышников »

Для proj вроде его директорию с конфигурационными файлами надо указывать? Там вcякие сдвижки NAD.
Fedor123
Новоприбывший
Сообщения: 4
Зарегистрирован: 21 фев 2011, 08:47
Репутация: 0

Re: Библиотека proj.dll отказывается считать

Сообщение Fedor123 »

Сделал вроде все как написано в README, который шел вместе с dll. Закинул proj.dll в директорию с программой и установил переменную среды(set PROJ_LIB=C:\proj\nad) и не работает
Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Библиотека proj.dll отказывается считать

Сообщение Дмитрий Барышников »

Попробуйте прописать PROJ_LIB=C:\proj\nad в "переменные среды" компьютера, в свойствах.
Fedor123
Новоприбывший
Сообщения: 4
Зарегистрирован: 21 фев 2011, 08:47
Репутация: 0

Re: Библиотека proj.dll отказывается считать

Сообщение Fedor123 »

Прописал, но результат тот же.
gamm
Гуру
Сообщения: 4168
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1107
Ваше звание: программист
Откуда: Казань

Re: Библиотека proj.dll отказывается считать

Сообщение gamm »

непонятно, что в строке proj делает -f '%.10f' - это что, какие-то фокусы C#?

и попробуйте воспроизвести преобразование через утилиту cs2cs с той же библиотекой (раз программа не падает, а считает, с переменными среды все нормально, нужно понять, что не работает - вызов через C# или сама proj.dll)
Fedor123
Новоприбывший
Сообщения: 4
Зарегистрирован: 21 фев 2011, 08:47
Репутация: 0

Re: Библиотека proj.dll отказывается считать

Сообщение Fedor123 »

непонятно, что в строке proj делает -f '%.10f' - это что, какие-то фокусы C#?
Она из общей строки запроса для программы cs2cs (взято здесь):
cs2cs +proj=latlong +ellps=WGS84 +datum=WGS84 +to +proj=latlong +ellps=krass +towgs84=23.92,-141.27,-80.9,0,0.35,0.82,0.12 -f '%.10f'
видимо, для форматированного вывода cs2cs, видимо в моей проге это не нужно - убрал, но результат тот же.

cs2cs при вводе этой строки и вводе координат 50 50 выдает результат: '50.0013824844' '49.9998666102'

После выполнения

Код: Выделить всё

IntPtr src = Proj.pj_init_plus("+proj=latlong +ellps=WGS84 +datum=WGS84");
IntPtr dst = Proj.pj_init_plus("+proj=latlong +ellps=krass"
            + " +towgs84=23.92,-141.27,-80.9,0,0.35,0.82,0.12");
переменные src и dst инициализируется значениями типа таких 64422832 и 64422352
Ответить

Вернуться в «Общий - ПО»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость