Страница 1 из 1

Marks.sml поле lonlatarr. Как закодировать координаты?

СообщениеДобавлено: 13 фев 2013, 06:56
mmxland
Здравствуйте!

Требуется заполнить поле lonlatarr в Marks.sml для полигона. Пусть координаты вершин будут, например, такие:
(x1: 44.68017200 y1:43.01867800)
(x2: 39.72227100 y2:43.58279500)
(x3: 40.68017200 y3:43.01867800)

Подскажите алгоритм превращения этих координат, в формат SAS.

Знаю, что темы по этому поводу были и не раз, но у меня не получается применить ту информацию ибо там нет конкретики, лишь фрагменты алгоритма...
1. Преобразование втупую из заполненного lonlatarr в Marks.sml по алгоритму BASE64 decode выводит нечитаемое нечто...
2. Фрагмент алгоритма на php выложенного на форуме в ветке viewtopic.php?f=2&t=319 также выводит нечто...

Буду очень признателен за помощь в данной ситуации.

Re: Marks.sml поле lonlatarr. Как закодировать координаты?

СообщениеДобавлено: 13 фев 2013, 09:03
Tolik
mmxland писал(а):1. Преобразование втупую из заполненного lonlatarr в Marks.sml по алгоритму BASE64 decode выводит нечитаемое нечто...

Нечитаемое, потому что бинарный файл. Тем не менее видно, что каждая точка занимает 24 байта: 2 координаты по 10 байт и 4 байта непонятно что :)

Re: Marks.sml поле lonlatarr. Как закодировать координаты?

СообщениеДобавлено: 13 фев 2013, 09:41
zed
Tolik писал(а):Тем не менее видно, что каждая точка занимает 24 байта: 2 координаты по 10 байт и 4 байта непонятно что :)

Не непонятно что, а просто мусор. Поскольку тип, в котором хранятся координаты объявлен как:

Код: Выделить всё
type
  TExtendedPoint = record
    X, Y: Extended;
  end;

т.е. без слова packed, а Extended равен 10-ти байтам, то Delphi производит выравнивание памяти до кратности 4-м байтам. Поэтому каждое поле становится по 12 байт, из которых 2 - мусор.