SASGIS

Веб-картография и навигация

lonlatarr="ADDdJAaB...b8EQAAwX" ...

Форум для обсуждения деталей разработки программы SAS.Планета

Модераторы: vdemidov, Tolik

lonlatarr="ADDdJAaB...b8EQAAwX" ...

Сообщение gorec » 24 июн 2009, 00:34

Подскажите - каким образом можно сформировать
lonlatarr="ADDdJAaBRb8EQAC444bfTRfQBEAAAAAAAEju6eqORb8EQAAwXYjVHxHQBEAAAAAA"
из
lonL="47.817875" latT="52.022758" LonR="47.817928" LatB="52.016723" ???

пытаюсь сформировать marks.sml с помощью проги на php... и ничего не получается :-(
или может это поле можно не использовать вовсе? в заголовке marks.sml убрать поле lonlatarr совсем и из ROW записей соотв-но
в какую сторону копать?
gorec
Новичок
 
Сообщения: 23
Зарегистрирован: 22 окт 2008, 10:30
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

Re: lonlatarr="ADDdJAaB...b8EQAAwX" ...

Сообщение feya » 24 июн 2009, 16:52

это стандартное блоб поле.
Для меток можно его не использовать, а для пути/полигона нужно, т.к. там хранится массив точек.
http://sasgis.org | SAS.Планета | SASPlanet
Аватара пользователя
feya
Гуру
 
Сообщения: 2034
Зарегистрирован: 13 июл 2008, 10:45
Благодарил (а): 5 раз.
Поблагодарили: 32 раз.

Re: lonlatarr="ADDdJAaB...b8EQAAwX" ...

Сообщение gorec » 24 июн 2009, 17:40

feya писал(а):это стандартное блоб поле.
Для меток можно его не использовать, а для пути/полигона нужно, т.к. там хранится массив точек.


А как его сформировать из координат для пути или полигона? интересует конкретная математика...
gorec
Новичок
 
Сообщения: 23
Зарегистрирован: 22 окт 2008, 10:30
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

Re: lonlatarr="ADDdJAaB...b8EQAAwX" ...

Сообщение feya » 24 июн 2009, 18:24

в этом поле хранится массив типа TExtendedPoint:
TExtendedPoint = record
X, Y: Extended;
end;
http://sasgis.org | SAS.Планета | SASPlanet
Аватара пользователя
feya
Гуру
 
Сообщения: 2034
Зарегистрирован: 13 июл 2008, 10:45
Благодарил (а): 5 раз.
Поблагодарили: 32 раз.

Re: lonlatarr="ADDdJAaB...b8EQAAwX" ...

Сообщение gorec » 26 июн 2009, 17:28

feya писал(а):в этом поле хранится массив типа TExtendedPoint:
TExtendedPoint = record
X, Y: Extended;
end;


Это конечно хорошо, но как же мне под php или под perl сделать из x*FLOAT представления TEXT oriented представление?
все что я понял - ток это то, что под хранение каждого значения одной координаты используется 16 символов - что то вроде uuencode...
gorec
Новичок
 
Сообщения: 23
Зарегистрирован: 22 окт 2008, 10:30
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

Re: lonlatarr="ADDdJAaB...b8EQAAwX" ...

Сообщение NetMoose » 29 июн 2009, 23:51

Вы друг друга не понимаете. Видимо из-за разных подходов. Перефразируем вопрос: каким образом record сериализуется для записи в файл? Стандартные ли методы Delphi используются для этого(какие) или нет? А вообще - конечно здорово наверное все на Delphi писать. Но неплохо бы и о том подумывать, что на свете другие языки программирования и операционные системы существуют. И данные не всегда только с "венды" можно получить.
NetMoose
Новичок
 
Сообщения: 1
Зарегистрирован: 29 июн 2009, 23:27
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: lonlatarr="ADDdJAaB...b8EQAAwX" ...

Сообщение Parasite » 01 июл 2009, 11:28

NetMoose писал(а):Но неплохо бы и о том подумывать, что на свете другие языки программирования и операционные системы существуют. И данные не всегда только с "венды" можно получить.

Можно. Но просьба не отвлекаться на оффтопы, а отвечать по существу заданного вопроса - если есть что ответить, конечно. Спасибо.

gorec писал(а):каким образом можно сформировать
lonlatarr="ADDdJAaBRb8EQAC444bfTRfQBEAAAAAAAEju6eqORb8EQAAwXYjVHxHQBEAAAAAA"

Кстати, а что это за строка? Визуально очень похоже на GoogleMaps GeoID :)
The only difference between me and a mad man is that I am not mad. /Salvador Dali/
Изображение
Аватара пользователя
Parasite
Администратор
 
Сообщения: 5646
Зарегистрирован: 23 окт 2008, 17:38
Благодарил (а): 124 раз.
Поблагодарили: 459 раз.

Re: lonlatarr="ADDdJAaB...b8EQAAwX" ...

Сообщение feya » 01 июл 2009, 13:52

Это строка закодированный массив о котором я уже писал, кодируется Base64.
http://sasgis.org | SAS.Планета | SASPlanet
Аватара пользователя
feya
Гуру
 
Сообщения: 2034
Зарегистрирован: 13 июл 2008, 10:45
Благодарил (а): 5 раз.
Поблагодарили: 32 раз.

Re: lonlatarr="ADDdJAaB...b8EQAAwX" ...

Сообщение feya » 01 июл 2009, 14:09

Для примера:

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

  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;
http://sasgis.org | SAS.Планета | SASPlanet
Аватара пользователя
feya
Гуру
 
Сообщения: 2034
Зарегистрирован: 13 июл 2008, 10:45
Благодарил (а): 5 раз.
Поблагодарили: 32 раз.

Re: lonlatarr="ADDdJAaB...b8EQAAwX" ...

Сообщение gorec » 13 июл 2009, 13:01

Вот черновой, но рабочий результат моих бдений на этом поприще:

function str2bin($str) {
for($a=0; $a < strlen($str); $a++) {
$dec = ord($str{$a});
for($i=7; $i>=0; $i--) {
if ( $dec >= pow(2, $i) )
{ $bin .= "1"; $dec -= pow(2, $i); }
else { $bin .= "0"; }
}
}
return $bin;
}

function bin2str($bin) {
$bin_ = str_split($bin, 8);
for($i=0;$i<count($bin_);$i++) {
$bin_[$i] = join('',array_reverse(preg_split('//',$bin_[$i],-1,PREG_SPLIT_NO_EMPTY)));
$ascii .= chr(bindec($bin_[$i]));
}
return $ascii;
}

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;
}

За это сообщение автора gorec поблагодарил:
mmxland (13 фев 2013, 15:32)
Рейтинг: 5.26%
 
gorec
Новичок
 
Сообщения: 23
Зарегистрирован: 22 окт 2008, 10:30
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

След.

Вернуться в Раздел для разработчиков программы SAS.Планета

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

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