များသောအားဖြင့် GPS ကိုသွဒီနိတ်များသည် floating point နံပါတ်များတွင်ကိုယ်စားပြုသည်။
လတ်တီတွဒ်: 31.2304
လောင်ဂျီတွဒ်: 121.4737
Timestamp: ဥပမာအားဖြင့်, Unix Timestamp 1716720000
JSOS ကဲ့သို့သော string ပုံစံဖြင့်တိုက်ရိုက်ပေးပို့ပါကအရွယ်အစားကြီးမားသည်နှင့် bandwidth နှင့်အတူ iot devices များအတွက်မသင့်တော်ပါ။ Pack () function ကို အသုံးပြု. ကျွန်ုပ်တို့သည်ဤတန်ဖိုးများကို fixed-length data packet တစ်ခုထဲသို့ binary format ဖြင့်ထည့်သွင်းနိုင်ပြီး bandwidth ကိုသိမ်းဆည်းခြင်းနှင့်လက်ခံခြင်းကိုတိကျစွာပြန်ယူနိုင်သည်။
POP () POP () PHP တွင် built-in function တစ်ခုဖြစ်ပြီးအချက်အလက်များကို binary strings များသို့ပြောင်းလဲရန်, ကွန်ယက်ဆက်သွယ်ရေး, ဖိုင်သိုလှောင်မှုစသည်ဖြင့်အသုံးပြုသည်။ အခြေခံ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
string pack(string $format, mixed ...$values)
Parameter $ format သည် format control string တစ်ခုဖြစ်သည်။ ဥပမာ, နောက်ဆက်တွဲတန်ဖိုးများ၏အမျိုးအစားနှင့်အမိန့်ကိုသတ်မှတ်သည့်အမျိုးအစားနှင့်အမှာစာများကိုသတ်မှတ်သည့်ပုံစံဖြစ်သည်။
F : 32-bit floating point နံပါတ် (Little endian)
D : 64-bit floating အမှတ်နံပါတ်
N : 32-bit unsigned integer (Big Endian)
v : 32-bit unsigned integer (Little endian)
လိုက်ဖက်တဲ့နှင့်ဒေတာကျစ်လစ်သိပ်သည်းမှုအတွက်ကျွန်ုပ်တို့အသုံးပြုသည်ဟုယူဆပါ -
လတ်တီတွဒ်: float (bytes 4 bytes, littledian)
လောင်ဂျီတွဒ်: float (4 bytes, အသေးစား endian)
Timestamp: Uint32 (4 bytes, little endian)
ဤအချက်အလက်များကို package လုပ်ရန်အောက်ပါကုဒ်ကိုသုံးနိုင်သည်။
<?php
// GPSအချက်များ
$latitude = 31.2304;
$longitude = 121.4737;
$timestamp = time(); // လက်ရှိ timestamp
// အသေးစား - endian format ကိုသုံးပြီးထုပ်ပိုး(latitude: float, longitude: float, timestamp: uint32)
$binaryData = pack('ffV', $latitude, $longitude, $timestamp);
// မလုပ်မနေရမဟုတ်သော:将打包后的二进制အချက်များ进行Hexကုဒ်,ကြည့်ရှုရန်လွယ်ကူသည်
$hexData = bin2hex($binaryData);
echo "打包后的二进制အချက်များ为: $hexData\n";
?>
ဤကုဒ်သည်အောက်ပါတို့ကိုထုတ်ပေးလိမ့်မည်။
打包后的二进制အချက်များ为: 9ad4fc3f7089514270128c66
အပိုင်းတစ်ခုစီသည်ထုပ်ပိုးသောလတ်တီတွဒ်, လောင်ဂျီတွဒ်နှင့်အချိန်တံဆိပ်ခေါင်းများနှင့်သက်ဆိုင်သည်။ ဆာဗာကိုပြန်ခွဲရန်သင် ဖြည့်တင်း () ကို သုံးနိုင်သည်။
<?php
$receivedData = $binaryData; // ဒါကြောင့် device ကိုကနေလက်ခံရရှိခဲ့သည်ယူဆ
$unpacked = unpack('flatitude/flongitude/Vtimestamp', $receivedData);
print_r($unpacked);
?>
Device သည် Binary strough ကို သုံး. MQTT, HTTP Post သို့မဟုတ် UDP မှတဆင့်ဆာဗာသို့တင်ရန်တူညီသော binary structure ကိုသုံးနိုင်သည်။ ဥပမာအားဖြင့်:
$url = "https://m66.net/api/receive.php";
$data = $binaryData;
$options = [
'http' => [
'method' => "POST",
'header' => "Content-Type: application/octet-stream\r\n",
'content' => $data
]
];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
echo "ဆာဗာတုံ့ပြန်မှု: $response\n";
ဆာဗာသည်မူလ binary data ကို PHP: // input မှတစ်ဆင့်ဖတ်နိုင်ပြီး၎င်းကိုခွဲခြမ်းစိတ်ဖြာနိုင်သည်။
Pack တွင် floating point နံပါတ် () floating point note format သည်မတူညီသောပလက်ဖောင်းများနှင့်အနည်းငယ်ကွဲပြားနိုင်သည်။
ကိရိယာနှင့်ဆာဗာသည်တူညီသော byte အမိန့်ကိုအသုံးပြုပါ။
ကူးစက်သောဒေတာဖွဲ့စည်းပုံသည်ရှုပ်ထွေးပြီးပါကဒေတာ header identifier ကိုထည့်သွင်းရန်အကြံပြုသည် (ဥပမာ, ဗားရှင်းနံပါတ်စသည်) ။