PDA

View Full Version : دریافت اطلاعات ( METAR , SPECI ) هوا از پیام خام هواشناسی ( AFTN )



seyed_farid
پنج شنبه 23 اردیبهشت 1389, 01:26 صبح
با سلام
:تشویق:دوستان كسي كه با زبان جاوا آشناست ميشه كمكم كنه.:تشویق:
ميخوام اين دستورات رو به دلفي بنويسم:

<SCRIPT language="Javascript1.2">

function decode_token(token)

{

// Check if token is "calm wind"

if(token == "00000KT")

{

add_output("Calm wind\n");

return;

}


// Check if token is Wind indication

var reWindKT = /^(\d{3}|VRB)(\d{2,3})(G\d{2,3})?(KT|MPS|KMH)$/;

if(reWindKT.test(token))

{

// Wind token: dddss(s){Gss(s)}KT -- ddd is true direction, ss(s) speed in knots

var myArray = reWindKT.exec(token);

var units = myArray[4];

add_output("Wind: ");

if(myArray[1]=="VRB")

add_output(" Variable in direction");

else

add_output(" True direction = " + myArray[1] + " degrees");

add_output(", Speed: " + parseInt(myArray[2],10));

if(units=="KT") add_output(" knots");

else if(units=="KMH") add_output(" km/h");

else if(units=="MPS") add_output(" m/s");

if(myArray[3] != null)

{

// I don't have the time nor the energy to investigate why

// MSIE and Firefox behave differently with respect to an

// omitted regular subexpression. Hence this quick hack to

// detect if myArray[3] is not a number.

if (myArray[3]!="")

{

add_output(", with Gusts of maximum speed " + parseInt(myArray[3].substr(1,myArray[3].length),10));

if(units=="KT") add_output(" knots");

else if(units=="KMH") add_output(" km/h");

else if(units=="MPS") add_output(" m/s");

}

}


add_output("\n"); return;

}

seyed_farid
پنج شنبه 23 اردیبهشت 1389, 05:08 صبح
اين هم يه DLL هست در همين رابطه كه نتونستم دستوراتشو بنويسم و استفاده كنم.
http://www.nirsoft.net/cmp/mweather.html
تو اين زمينه هم اگر كمك كنيد مسئله حل مي شه.

vcldeveloper
پنج شنبه 23 اردیبهشت 1389, 11:59 صبح
این کد جاوا نیست، بلکه JavaScript هست. JavaScript کاملا با جاوا فرق میکنه، غیر از اینکه هر دو توی اسمشان عبارت "جاوا" وجود داره!

اون کد سعی میکنه یک رشته ورودی را Parse کنه، و اطلاعات مربوط به وضع هوا را به صورت تفکیک شده، از آن استخراج کنه.


اين هم يه DLL هست در همين رابطه كه نتونستم دستوراتشو بنويسم و استفاده كنم.
این یک ActiveX هست. باید اول در سیستم رجیستر بشه، بعد ازش استفاده بشه. بعد از رجیستر کردن آن، می تونید با استفاده از Import Type Library در دلفی، آن را در داخل پروژه خودتان استفاده کنید (البته بدون Import هم میشه، ولی اینطوری براتون آسانتر هست).

استفاده کردن ازش هم که در همون لینک توضیح داده، رشته مربوطه را از یکی از سایت های هواشناسی دریافت می کنید، و به متد DecodeMetarLine این ActiveX ارسال می کنید. اگر مقدار برگشتی True بود، واحد های اندازه گیری مورد نظرتان را به ActiveX میدید، و هر کدام از اطلاعات آب و هوا را که از آن رشته نیاز داشتید، با استفاده از متد GetWeatherData آن، و ارسال پارامتر مربوط به اون بخش از اطلاعات، دریافت می کنید.

seyed_farid
پنج شنبه 23 اردیبهشت 1389, 15:57 عصر
ممنون از پاسختون.
حالا اين زبان جاوا اسكريپت رو بخوام به زبون دلفي بنويسم شما ميتونيد بيشتر راهنمائيم كنيد؟ ممنونم.:تشویق:

اما در مورد استفاده از DLL يا اكتيواكس مورد نظر با مثالهايي كه تو سايت بود نتونستم روش استفاده اش رو پيدا كنم. ميتونيد بيشتر توضيح بديد و روش كدنويسيش رو بديد؟ و بدون Import چطور ميشه؟
ممنون ممنونم.:تشویق:

seyed_farid
شنبه 25 اردیبهشت 1389, 19:08 عصر
با دلفي چطور ميشه اين دستور را نوشت؟

var reWindKT = /^(\d{3}|VRB)(\d{2,3})(G\d{2,3})?(KT|MPS|KMH)$/;

seyed_farid
چهارشنبه 29 اردیبهشت 1389, 17:51 عصر
پیام هواشناسی با یک فرمت تکس ارسال میگردد که به صورت خام می باشد. برای آشکار کردن این اطلاعات من بالاخره تونستم به روش Parsing این کار را انجام بدم.
چون تو اینترنت خیلی گشتم اما با دلفی چیزی گیر نیاوردم مجبور شدم خودم این کار را بکنم.
حالا این هم سورس و نمونه برنامه جهت دوستانی که لازم دارند.:بوس:
اینهم توضیحات تکمیلی:
http://en.wikipedia.org/wiki/METAR