
يجمع كائن tmagnetoaccelerometerfusion بين إخراج مستشعر الهاتف من:
للحصول على ناقل موقف الهاتف . هذا هو الاتجاه الذي يشير إليه الهاتف والدوران فيما يتعلق بالرأسية. يحسب الكائن الإحداثيات المستطيلة للهاتف. يمكن استخدام هذا لتشغيل تطبيقات الواقع المعزز للأجهزة المحمولة. العديد من الأسماء للإحداثيات المستطيلة: السمت/الارتفاع/لفة أو عنوان/الارتفاع/لفة أو الملعب/بنك/لفة. اخترت.
phone attitude - rectangular coordinates
-Y Z altitude X
| / heading Y
| / roll Z
/===+===\ ( Y points down, Z points inside the screen )
| | / ||
| |/ ||
| *---|---------- X
| ||
| O ||
-------//
Cross Platform Delphi Object Pascal لنظام Android و iOS. لا يوجد دعم Windows في هذا الوقت.
ماذا يفعل الكائن:
يستخدم إصدار iOS جهاز توقيت 100 مللي ثانية للحصول على قراءات المستشعر. سيكون من الأفضل استخدام أحداث تغيير المستشعر ، لكنني لا أعرف كيفية القيام بذلك.
يستخدم إصدار Android رمز المستشعر الأصلي (من Delphiworlds). يستخدم Delphi TlocationSensor أيضًا. تتطلب التغييرات الحديثة على كل من Android و iOS تصريحًا صريحًا قبل بدء مستشعر GPS.
لاحظ أن مستشعر iOS GPS لديه خاصية ذات تراجع حقيقي ، والتي يمكن استخدامها مباشرة ، وتجنب كل هذا. ولكن لديها مشكلة عندما يعبر الارتفاع حدود 45 درجة. يقفز GPS TrueShoneing عدة درجات في تلك المرحلة. أظن أن iOS يغير محور الإحداثيات المستطيلة عندما يكون الارتفاع أكثر من 45 درجة ، وهو ما أعتقد أنه خطأ. لست متأكدا.
في الإصدارات قبل D10.3.3 استخدمت اختراقًا لتمرير int64 عبر JNI على Android (واجهت Delphi Jni مشكلة endian). تم التعليق على هذا عندما تم تصحيح المترجم. شاهد إذا كان استخدام إصدارات Delphi السابقة (أي عدم الاختراق) على D10.4.1 يبدو أن الخطأ قد عاد ، لذلك أعيد تقديم الاختراق: | استكمال: DEZ20: اعتبارًا من D10.4.1 Sydney ، مطلوب العمل حول Android 32 بت. المصدر تم تحديثه لإصلاح هذا.
TmagnetoAccelerometerfusion ليس مكونًا ، لذا ليست هناك حاجة لتثبيته كحزمة. إنه محدد في وقت التشغيل.
أضف وحدة للاستخدامات: MagnetometerAccelerometerfusion
إضافة متغير النموذج: fmagaccelfusion: tmagnetoaccelerometerfusion ؛
على formcreate:
fMagAccelFusion := TMagnetoAccelerometerFusion.Create(Self);
// fMagAccelFusion.OnAccelerometerChange := FusionSensorAccelChanged; // optional sensor events
// fMagAccelFusion.OnMagnetometerChange := FusionSensorMagChanged;
fMagAccelFusion.OnHeadingAltitudeChange:= FusionSensorHeadingAltitudeChanged; // combined sensor change handler
تنفيذ معالج المستشعر:
procedure TfrmMain.FusionSensorHeadingAltitudeChanged(Sender:TObject);
begin
// in this sample just show rectagular coordinates
labMagHeading.Text := Format('m: %5.1f°', [fMagAccelFusion.fTCMagHeading]);
labTrueHeading.Text := Format('t: %5.1f°', [fMagAccelFusion.fTCTrueHeading]);
labAltitude.Text := Format('%5.1f°', [fMagAccelFusion.fAltitude] );
labRoll.Text := Format('%5.1f°', [fMagAccelFusion.fRoll] );
....
...
على التكوين: ابدأ أجهزة الاستشعار. بالنسبة إلى Android ، عليك أن تطلب الإذن لاستخدام المستشعرات والبدء عند منح الأذونات. على أجهزة استشعار بدء تشغيل iOS من FormActivate لم تنجح. بدلاً من ذلك ، بدأت من مؤقت. لاحظ أن تطبيق العينة لا يبدأ المستشعرات بهذه الطريقة. يتعين على المستخدم البدء يدويًا في استخدام مربع الاختيار.
إضافة system.permissions للاستخدامات
procedure TfrmMain.timerStartSensorsiOSTimer(Sender: TObject); // iOS deferred start timer
begin
fMagAccelFusion.StartStopSensors({bStart:} true ); //start ios sensor feed
timerStartSensorsiOS.Enabled := false; //once
end;
procedure TfrmMain.FormActivate(Sender: TObject);
begin
{$IFDEF Android} // request permissions to start sensor
const PermissionAccessFineLocation = 'android.permission.ACCESS_FINE_LOCATION';
PermissionsService.RequestPermissions([PermissionAccessFineLocation],
procedure(const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray)
begin
if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then
fMagAccelFusion.StartStopSensors( true ) // bStart=true
else TDialogService.ShowMessage('Location permission not granted');
end)
{$ENDIF Android}
{$IFDEF IOS}
// for IOS I found u cannot start LocationSensor from FormActivate or the sensor breaks
// used a Timer to defer sensor start a couple seconds
timerStartSensorsiOS.Enabled := true;
{$ENDIF IOS}
...
end;

تطبيقات iOS و Android. متاجر تطبيقات البحث عن:
"Camsextant" - استخدم أجهزة استشعار الهاتف كسيكستانت مع حاسبة سماوية. أبسط حل التنقل السماوي. استخدم الهاتف كأداة Celnav كاملة (Sextant + Calculator). الدائم البحري السنوي. يستخدم أجهزة الاستشعار لالتقاط ارتفاعات الكائنات السماوية. احصل على مشاهد أو أكثر ولديك إصلاح (موقف فلكي)+.
"Planetfun" - نموذج نظام الطاقة الشمسية 4D (الفضاء 3D+الوقت). يمكن إرفاق الكاميرا ثلاثية الأبعاد للمشهد بأجهزة استشعار الهاتف ، مما يخلق تجربة واقعية معززة. يستخدم بيانات كوكب الخطيرة Almanac (نظرية VSOP 2013 لحساب Planet Pósitions).
انظر https://github.com/omarreis/vsop2013/tree/master/planetfun
"Navigator HD" - أداة التنقل السماوية الكاملة ، مع Almanac الدائمة ، مرور ميريديان ، خطوط الموضع ، الموقف الفلكي. الكتاب الإلكتروني مع أساسيات الملاحة السماوية.
"Opyc" - لعبة الإبحار. توجيه القارب مع ميل الهاتف.
أو البحث عن مطور "Omarreis".