[QUOTE]При запросе высот участка функцией mapGetMtrFrame Вы задаёте left = dY; top = dX; ? [/QUOTE]
Да. Это можно увидеть в конце приведенного ниже кода.
[QUOTE]Что значит "матрица строится квадратами" ? Как реализовано это построение ? [/QUOTE]
Матрица высот строится для каждого тайла, который пересекается с картой. Это происходит параллельно. При этом для каждого тайла создается файл с уникальным именем, потом строится и записывается в него матрица (функция API mapBuildMtwUn), потом открывается (mapOpenDataUn), в ней находится нужный фрейм (исп. функции API mapGetMtrDescribeUn, mapShowMtrByBorder и mapGetActualMtrFrame) из нее вынимается нужный фрейм (mapGetMtrFrame).
Все эти функции вызываются синхронно (каждая функция вызывается с использованием Native.synchronizedLibrary из JAVA JNA). Кстати тут возникает вопрос, "тяжелые" функции mapBuldMtwUn и mapGetMtrFrame - потокобезопасны? Потому что вызывать их синхронно получается очень, очень медленно.
Код без неважных подробностей:
[CODE]
// строим матрицу высот
final String pathToMatrix = getUniquePathToTempMatrixFile();
mapBuildMtwUn(hMap, pathToMatrix, "", params, 0)
// открываем файл матрицы высот
NativeLong hMtr = mapOpenDataUn(pathToMatrix, 0x100000);
// матрица высот получается больше сектора (в ней живут блоки 256х256 и другие причины)
// - и это нужно учесть: брать только часть матрицы в пределах сектора
MtrFrame frame = findRealMtrFrame(hMtr, params.ElemSizeMeters);
// заполняем память матрицей высот
Memory area = new Memory(frame.width * frame.height * params.ElemSizeBytes);
mapGetMtrFrame(hMtr, 1, area, frame.dY, frame.dX, frame.width, frame.height, 0);
[/CODE]