Подскажите - каким образом можно сформировать lonlatarr="ADDdJAaBRb8EQAC444bfTRfQBEAAAAAAAEju6eqORb8EQAAwXYjVHxHQBEAAAAAA" из lonL="47.817875" latT="52.022758" LonR="47.817928" LatB="52.016723" ???
пытаюсь сформировать marks.sml с помощью проги на php... и ничего не получается или может это поле можно не использовать вовсе? в заголовке marks.sml убрать поле lonlatarr совсем и из ROW записей соотв-но в какую сторону копать?
feya писал(а):в этом поле хранится массив типа TExtendedPoint: TExtendedPoint = record X, Y: Extended; end;
Это конечно хорошо, но как же мне под php или под perl сделать из x*FLOAT представления TEXT oriented представление? все что я понял - ток это то, что под хранение каждого значения одной координаты используется 16 символов - что то вроде uuencode...
Вы друг друга не понимаете. Видимо из-за разных подходов. Перефразируем вопрос: каким образом record сериализуется для записи в файл? Стандартные ли методы Delphi используются для этого(какие) или нет? А вообще - конечно здорово наверное все на Delphi писать. Но неплохо бы и о том подумывать, что на свете другие языки программирования и операционные системы существуют. И данные не всегда только с "венды" можно получить.
NetMoose писал(а):Но неплохо бы и о том подумывать, что на свете другие языки программирования и операционные системы существуют. И данные не всегда только с "венды" можно получить.
Можно. Но просьба не отвлекаться на оффтопы, а отвечать по существу заданного вопроса - если есть что ответить, конечно. Спасибо.
gorec писал(а):каким образом можно сформировать lonlatarr="ADDdJAaBRb8EQAC444bfTRfQBEAAAAAAAEju6eqORb8EQAAwXYjVHxHQBEAAAAAA"
Кстати, а что это за строка? Визуально очень похоже на GoogleMaps GeoID
The only difference between me and a mad man is that I am not mad. /Salvador Dali/
TArrLL = array [0..0] of TExtendedPoint; PArrLL = ^TArrLL;
function Decode64(S: string): PByteArray; const Codes64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; var i,a,x,b,j: Integer; begin GetMem(result,length(S)); j:=0; a := 0; b := 0; for i := 1 to Length(s) do begin x := System.Pos(s[i], codes64) - 1; if x>=0 then begin b := b * 64 + x; a := a + 6; if a >= 8 then begin a := a - 8; x := b shr a; b := b mod (1 shl a); x := x mod 256; Result^[j]:=x; inc(j); end; end else Exit; end; end;
procedure GetLonLat(LonLatArr:string); var arrLL:PArrLL; lat,lon:extended; begin arrLL:=@Decode64(LonLatArr)^; //для примера получаем к-ты из первого эл-та массива lon:=arrLL^[0].X; lat:=arrLL^[0].Y; freemem(arrLL); end;
function float_string2binary80bit($float) { $x=pack('d', $float); $x = join('',array_reverse(preg_split('//',$x,-1,PREG_SPLIT_NO_EMPTY))); $str_x = join('',array_reverse(preg_split('//',str2bin($x),-1,PREG_SPLIT_NO_EMPTY))); $my = unpack ("a52mantissa/a11exponent/a1sign",$str_x); $m=$my['mantissa']; $e=$my['exponent']; $s=$my['sign']; $e="001000000000001"; $ie80="00000000000".$m."1".$e.$s; //тут не совсем корректно - правильными будут только числа с двумя цифрами перед запятой! $bie80=bin2str($ie80); return $bie80; }