Перейти к содержанию
Fire Monkey от А до Я

Rusland

Пользователи
  • Постов

    1 204
  • Зарегистрирован

  • Посещение

  • Победитель дней

    26

Весь контент Rusland

  1. Я тут на днях ставил свою метку по LocationSensor и наблюдал как ведет себя "синяя точка" MapView, так вот она тоже иногда скачет по базовым станциям (как и координаты полученные через LocationSensor). Происходит это в момент потери спутников. Кстати, направление движения можно самостоятельно реализовать через Heading, меняя вид метки
  2. Выкладывай )
  3. Ну в данном случае, думаю, не сложно вместо точек ставить ->, в остальном все также
  4. Кстати да, он более подходящий
  5. Наверное с помощью TPie можно сделать. Тут что-то подобное, правда картинок уже нет, но есть код ) http://www.vr-online.ru/blog/daesh-fmx-firemonkey-v-massy-9147
  6. В проекте сказано: ANDROID permissions: ..access_network_state ..acces_wifi_state их я сразу добавил. А вот READ_PHONE_STATE тоже нужен - он у вас не указан (только я не пойму зачем? что его использует?). После добавления и в Debug и в All Configuration у меня заработало (в общем везде в ней галки проставил ). Так что проблема решена, спасибо за внимание.
  7. Добавил uDevice в свой проект, после этого при старте получаю постоянную ошибку: Project raised exception class EJNIException with message 'java.lang.SecurityException: Neither user 10149 nor current process has android.permission.READ_PHONE_STATE.'. Как с ней бороться? Добавлять разрешение READ_PHONE_STATE уже пробовал - не помогает.
  8. У меня подобная проблема бывает когда используется AndriodService при тестировании на реальном устройстве (эмуляторы я не использую)... нужно непременно удалять установленное приложение и не забывать делать Build сервиса после внесенных в него изменений. Когда уже совсем начинает глючить, то перезагружаю устройство и компьютер (просто перезагрузка студии не помогает) и все снова работает нормально.
  9. Проблема решена. Оказалось что там кодировка Win1251, а я указал TStringStream.Create('', TEncoding.UTF8); вместо TStringStream.Create(''); И парсер на всякий случай: uses msxml; procedure GetKursValutAndDate(XML:String; var KDollar,KEuro:Double); var XMLDoc: IXMLDOMDocument; Subnodes: IXMLDOMNodeList; AttributeNode: IXMLDOMNode; OperationNode: IXMLDOMNode; i:integer; begin KDollar:=0; KEuro:=0; try XMLDoc:=CoDOMDocument.Create; if Assigned(XMLDoc) and XMLDoc.loadXML(XML) then begin Subnodes:=XMLDoc.selectNodes('//ValCurs/node()'); if Assigned(Subnodes) then begin for I := 0 to Subnodes.length - 1 do begin AttributeNode := Subnodes[I].attributes.getNamedItem('ID'); if Assigned(AttributeNode) then if (AttributeNode.nodeValue='R01235') then begin // доллар OperationNode:=Subnodes[I].selectSingleNode('.//Value'); if Assigned(OperationNode) then KDollar:=StrToFloat(OperationNode.text); end else if (AttributeNode.nodeValue='R01239') then begin // евро OperationNode:=Subnodes[I].selectSingleNode('.//Value'); if Assigned(OperationNode) then KEuro:=StrToFloat(OperationNode.text); end end; end; end; except Raise Exception.Create('Не удалось получить курс валют'); end; end;
  10. Пытаюсь скачать XML с курсами валют с cbr.ru. Получаю ошибку Project raised exception class EEncodingError with message 'No mapping for the Unicode character exists in the target multi-byte code page'. Как исправить? //aUrl = http://www.cbr.ru/scripts/XML_daily.asp function GetXML(aURL: string): String; var Http: THTTPClient; Ss: TStringStream; begin Result:=''; Http:=THTTPClient.Create; try Ss:=TStringStream.Create('', TEncoding.UTF8); Http.Get(aURL,ss); Result:=Ss.DataString; // тут ошибка except end; Http.Free; end;
  11. Спасибо за ссылку. К сожалению здесь нет подходящих мне символов, поэтому и хочу дополнить шрифт своими. Похоже я не сразу въехал что предлагает этот сервис! Тут же можно накидать свои svg-файлы, выделить в имеющихся шрифтах символы которые нужны и скачать готовый шрифт! Класс!
  12. Стоит ли ждать нового продукта к 18апреля? )
  13. Rusland

    GPS

    Попробовал сравнивать последнюю координату и 10ую. При стоянке выдает скорость от 0.2 до 0.7км/ч, ну хоть как-то можно использовать для определения топтания на месте. function TAndroidServiceDM.GetSpeed(Lat,Lon: double; Dat:integer; LC: TList<TCoords>):double; var Speed: double; SecBetween: integer; DstBetween: real; begin Speed:=-1; if LC.Count>=10 then begin SecBetween:=Dat-LC[9].Dat; DstBetween:=GetDistance(Lat,Lon,LC[9].Lat,LC[9].Lon); if (SecBetween<>0) then Speed:=3.6*DstBetween/SecBetween; end; Result:=Speed; end; Проверил в движении, скорость получается с запазданием и долго показывает скорость когда объект уже остановился, что собственно логично, но по крайней мере скорость почти идентична той что выдает программа Статус GPS.
  14. Rusland

    GPS

    Написал функцию которая считает среднюю скорость по трем последним координатам... так скорость скачает от 0 до 120км/ч. Координаты выбрасываются непредсказуемо в любое время, чем меньше время между координатами, тем больше v = s / t (разброс дистанции 10-25метров). И это при том что объект стоит на месте. Допустим между двумя координатами прошла 1 секунда, а расстояние 20м. Значит скорость v=20м/сек=72км/ч Ну и как на это можно ориентироваться?
  15. Rusland

    GPS

    krapotkin, что вы имеете в виду под "скорость перемещения объекта"? Speed который отдает сенсор? Если да, то он отдает Speed крайне неохотно, часто выдает NaN. Если объект стоит на месте, то сенсор все равно периодически отдает координаты (может и несколько координат за 5 секунд выдать)... объект стоит на месте, а координаты идут (они не нужны). Как отличить от реального (например медленного) движения?
  16. Rusland

    GPS

    Что значит "и вторая уже швах"? Вы имеете в виду что она определилась по БС и слишком далеко от реального местоположения? Или что-то иное? Фактически самое трудное определить движение объекта, так как сенсор Speed отдает редко - на мой взгляд только геометрически решить и можно. Только нормальный алгоритм придумать нужно.
  17. Rusland

    GPS

    Проверил в движении - IsCoordInPoly работает некорректно, координаты перестают идти вообще. Видимо этот алгоритм работает если многоугольник без самопересечений, а в нашем случае координаты располагаются хаотично, да и многоугольник при движении вытягивается сильно. Есть какие-нибудь другие алгоритмы проверки?
  18. Rusland

    GPS

    Собственно то что написал и есть пример. Но собственно нужно еще протестировать как будет работать при движении (я пока тестил когда объект неподвижен). GetDistance я брал вроде у ZuBy: function TFormMain.GetDistance(const aStart, aEnd: TMapCoordinate): Double; const // определение расстояния между двумя точками Radius = 6372795; // примерный радиус земли PiDiv180=Pi/180; var CosLatStart, SinLatStart, CosLatEnd, SinLatEnd, Delta, CosDelta, SinDelta, X, Y: Double; begin try CosLatStart := Cos(aStart.Latitude * PiDiv180); CosLatEnd := Cos(aEnd.Latitude * PiDiv180); SinLatStart := Sin(aStart.Latitude * PiDiv180); SinLatEnd := Sin(aEnd.Latitude * PiDiv180); Delta := (aEnd.Longitude * PiDiv180) - (aStart.Longitude * PiDiv180); CosDelta := Cos(Delta); SinDelta := Sin(Delta); Y := Sqrt(((CosLatEnd*SinDelta)*(CosLatEnd*SinDelta))+ ((CosLatStart*SinLatEnd-SinLatStart*CosLatEnd*CosDelta) *(CosLatStart*SinLatEnd-SinLatStart*CosLatEnd*CosDelta))); X := SinLatStart * SinLatEnd + CosLatStart * CosLatEnd * CosDelta; Result := Round(ArcTan2(Y, X) * Radius); except Result := -1; end; end; Alexander, Решение рабочее.
  19. Rusland

    GPS

    Пока придумал вести список последних N-координат (я взял 10) и 1.) сравнивать последнюю полученную с предыдущей на измененное расстояние. Если расстояние больше чем M-метров (в моем случае 100м), значит координата "захвачена" с базовой станции, а не GPS if (GetDistance(x,y,x2,y2)>100) then Result:=false 2.) во время стоянки объекта проверять принадлежит ли последняя координата (Ш0,Д0) многоугольнику вершинами которого являются предыдущие координаты (Ш1,Д1) - (ШN, ДN). type tPolygon = array of tPoint; //tPoint - это запись, с двумя полями, x и y ... function IsCoordInPoly(x,y: integer; myP: tPolygon): boolean; //x и y - это координаты var //myP - массив с вершинами полигона i,j,npol: integer; inPoly: boolean; begin inPoly:=false; npol:=length(myP)-1; j:=npol; for i:=0 to npol do begin if ((((myP[i].y<y) and (y<myP[j].y)) or ((myP[j].y<=y) and (y<myP[i].y))) and (x>(myP[j].x-myP[i].x)*(y-myP[i].y) / (myP[j].y-myP[i].y)+myP[i].x)) then inPoly:=not inPoly; j:=i; end; result:=inPoly; end; Но не оставляю надежды добраться до координат самого MapView
  20. Да, это удобно. Тоже использую FontAwesome. Но понадобилось мне добавить свою картинку в шрифт и тут затык - программы редакторы не могут отредактировать этот шрифт. Кто-нибудь пробовал добавить свой символ?
  21. Совсем забыл, из сервиса никак к БД не обратиться - иначе валится с ошибкой Segment fault и валит вместе с собой основное приложение.
  22. Rusland

    GPS

    Аналогично, я бы тоже хотел это знать. Видимо тут сам гугл чего-то подшаманивает, помогая установить точное положение.
×
×
  • Создать...