| GIE(1) | PROJ | GIE(1) |
نام (NAME)
gie - محیط بررسی یکپارچگی اطلاعات مکانی (Geospatial Integrity Investigation Environment)
خلاصه دستور (SYNOPSIS)
توضیحات (DESCRIPTION)
ابزار gie (محیط بررسی یکپارچگی اطلاعات مکانی)، یک محیط آزمون پسرفت (regression testing) برای کتابخانهٔ تبدیلهای PROJ است. هدف اصلی از طراحی آن، فراهم آوردن امکان اجرای آزمونهای پسرفت روی کدهای متعلق به PROJ است، بدون آنکه به هیچ ابزاری فراتر از همان کامپایلر C استفادهشده برای کامپایل کتابخانه نیاز باشد.
- -h, --help
- نمایش اطلاعات نحوهٔ استفاده
- -o <file>, --output <file>
- مشخص کردن نام فایل خروجی
- -v, --verbose
- پرگویی: ارائه خروجیهای اطلاعاتی غیرضروری. برای جزئیات بیشتر -v را تکرار کنید (مانند -vv)
- -q, --quiet
- بیصدا: نقطهٔ مقابل پرگویی. در حالت بیصدا حتی خطاها نیز گزارش نمیشوند. تنها راه تعامل از طریق کد بازگشتی است (۰ برای موفقیت، و مقدار غیرصفر نشاندهندهٔ تعداد آزمونهای ناموفق است)
- -l, --list
- فهرست کردن کدهای خطای سامانه داخلی PROJ
- --version
- نمایش شماره نسخه
آزمونهای gie در فایلهای متنی ساده تعریف میشوند که معمولاً دارای پسوند .gie هستند. این آزمونها به زبان دستوری ویژهای نوشته میشوند که منحصراً برای gie طراحی شده است. کارکرد پایهٔ زبان دستوری gie تنها با ۳ فعل دستوری پیادهسازی شده است: operation که عملیات PROJ مورد آزمایش را مشخص میکند، accept که مختصات ورودی جهت خواندن را تعیین میکند، و expect که نتیجهٔ مورد انتظار را مشخص میسازد.
یک نمونه فایل آزمون برای gie که از سه دستور پایهٔ فوق استفاده میکند به شکل زیر است:
<gie> -------------------------------------------- Test output of the UTM projection -------------------------------------------- operation +proj=utm +zone=32 +ellps=GRS80 -------------------------------------------- accept 12 55 expect 691_875.632_14 6_098_907.825_05 </gie>
تجزیهٔ یک فایل gie از <gie> آغاز شده و با رسیدن به </gie> پایان مییابد. هر محتوایی قبل از <gie> و بعد از </gie> نادیده گرفته میشود. موارد آزمون با تعریف یک operation ایجاد میشوند که مختصات ورودی را با accept دریافت کرده و مختصات خروجی را با expect انتظار دارد.
به دلیل اینکه آزمونهای gie درون برچسبهای <gie>/</gie> قرار میگیرند، اضافه کردن موارد آزمون به فایلهای init سفارشی <#init-files> نیز امکانپذیر است. این آزمونها هنگام خواندن فایل init توسط PROJ با +init نادیده گرفته میشوند، و ابزار gie نیز هر متنی را که درون <gie>/</gie> نباشد نادیده میگیرد.
آزمونهای gie توسط مجموعهای از دستورها مانند operation، accept و expect در مثال بالا تعریف میشوند. این دستورها در کنار یکدیگر زبان دستوری gie را تشکیل میدهند. هر خطی در فایل gie که با یک دستور شروع نشود نادیده گرفته خواهد شد. در مثال بالا مشاهده میشود که چگونه میتوان از این امکان برای افزودن توضیحات، یادداشتها و قالببندی به فایلهای آزمون gie استفاده کرد تا هم خوانایی آنها بالاتر برود و هم هدف آزمونهای گوناگون مستند شود.
در ادامه، زبان دستوری gie با جزئیات کامل شرح داده شده است..SH "مثالها (EXAMPLES)"
- 1.
- اجرای تمام آزمونها در یک فایل با فعال بودن تمامی اطلاعات اشکالزدایی
gie -vvvv corner-cases.gie
- 2.
- اجرای تمام آزمونها در چندین فایل
gie foo bar
زبان دستورات GIE (GIE COMMAND LANGUAGE)
- operation <+args>
- تعریف یک عملیات PROJ برای آزمایش. مثال:
operation proj=utm zone=32 ellps=GRS80 # test 4D function accept 12 55 0 0 expect 691875.63214 6098907.82501 0 0 # test 2D function accept 12 56 expect 687071.4391 6210141.3267
- accept <x y [z [t]]>
- تعریف
مختصات
ورودی برای
خواندن.
مختصات
آزمایشی را
دریافت
میکند. این
مختصات
میتواند
با ۲، ۳ یا ۴
مقدار
تعریف شود،
که در آن دو
مقدار اول
مؤلفههای
x- و y-، مقدار
سوم مؤلفهٔ
z- و مقدار
چهارم
مؤلفهٔ
زمان هستند.
تعداد
مؤلفهها
در مختصات
مشخص
میکند که
کدام نسخه
از عملیات
مورد
آزمایش
قرار
میگیرد (2D، 3D
یا 4D).
مختصاتهای
متعددی را
میتوان
برای یک operation
پذیرفت.
برای هر accept
یک دستور
متناظر expect
مورد نیاز
است.
توجه داشته باشید که gie نویسهٔ زیرخط (_) را به عنوان جداکننده هزارگان میپذیرد. استفاده از آن الزامی نیست (در واقع، به طور کامل توسط روتین ورودی نادیده گرفته میشود)، اما خوانایی رشتههای بسیار طولانی اعداد را که معمولاً در مختصاتهای تصویرشده مورد نیاز است، به طور چشمگیری بهبود میبخشد.
برای مشاهده مثال به operation مراجعه کنید.
- expect <x y [z [t]]> | <error code>
- تعریف
مختصات
مورد
انتظاری که
از مختصات
پذیرفتهشدهٔ
عبور داده
شده از یک
عملیات
بازگردانده
خواهد شد.
مختصات
مورد
انتظار
مشابه accept
میتواند
با ۲، ۳ یا ۴
مؤلفه
تعریف شود.
برای یک operation
میتوان
چندین
مختصات را
انتظار
داشت. برای
هر expect یک accept
متناظر
نیاز است.
برای مشاهده مثال به operation مراجعه کنید.
علاوه بر انتظار داشتن مختصات، در صورتی که امکان ایجاد یک عملیات وجود نداشته باشد، امکان انتظار یک کد خطای PROJ نیز وجود دارد. این ویژگی زمانی مفید است که بخواهید بررسی کنید که آیا خطاها به درستی دریافت و مدیریت میشوند یا خیر. در زیر مثالی آورده شده است که آزمایش میکند عملگر پایپلاین در هنگام ساخته شدن یک پایپلاین غیرقابل معکوس، به درستی با خطا مواجه شود.
operation proj=pipeline step
proj=urm5 n=0.5 inv
expect failure pjd_err_malformed_pipeline
برای دیدن فهرستی از کدهای خطایی که میتوان انتظار داشت، به gie --list مراجعه کنید.
- tolerance <tolerance>
- دستور tolerance مشخص میکند که مختصاتهای پذیرفتهشده تا چه اندازه میتوانند از مختصات مورد انتظار انحراف داشته باشند. این دستور برای آزمایش اینکه آیا یک عملیات با آستانهٔ رواداری عددی مشخصی مطابقت دارد یا خیر کاربردی است. از برخی عملیاتها انتظار میرود که در حد میلیمتر دقیق باشند، در حالی که برخی دیگر ممکن است تنها در حد چند متر دقت داشته باشند. tolerance باید
operation proj=merc # test coordinate as returned by ```echo 12 55 | proj +proj=merc`` tolerance 1 cm accept 12 55 expect 1335833.89 7326837.72 # test that the same coordinate with a 50 m false easting as determined # by ``echo 12 55 |proj +proj=merc +x_0=50`` is still within a 100 m # tolerance of the unaltered coordinate from proj=merc tolerance 100 m accept 12 55 expect 1335883.89 7326837.72
رواداری پیشفرض 0.5 mm است. برای دیدن فهرستی از واحدهای ممکن، به proj -lu <#cmdoption-proj-lu> مراجعه کنید.
- roundtrip <n> <tolerance>
- انجام
آزمایش
رفتوبرگشت
(roundtrip) روی یک
عملیات.
دستور roundtrip
برای
عملکرد خود
به
دستورهای
operation و accept نیاز
دارد.
مختصات
پذیرفتهشده
ابتدا در
حالت
مستقیم (forward)
به عملیات
فرستاده
میشود،
سپس خروجی
حاصل از
عملیات
مستقیم،
مجدداً به
عملیات
معکوس (inverse)
ارسال
میگردد.
این فرایند
n بار تکرار
میشود. اگر
مختصات
حاصل در
محدودهٔ
رواداری
تعیینشده
نسبت به
مختصات
اولیه
باشد،
آزمون با
موفقیت
قبول
میشود.
مثال با ۱۰۰ تکرار پیشفرض و رواداری پیشفرض:
operation proj=merc accept 12 55 roundtrip
مثال با تعداد دفعات و رواداری پیشفرض:
operation proj=merc accept 12 55 roundtrip 10000
مثال با تعداد دفعات و رواداری مشخص:
operation proj=merc accept 12 55 roundtrip 10000 5 mm
- direction <direction>
- دستور direction مشخص میکند که یک عملیات در کدام جهت انجام شود. این مقدار میتواند forward یا inverse باشد. نمونهای از این کاربرد در زیر مشاهده میشود که در آن بررسی میشود آیا یک پایپلاین تبدیل متقارن، در هر دو جهت نتایج یکسانی بازمیگرداند یا خیر.
operation proj=pipeline zone=32 step
proj=utm ellps=GRS80 step
proj=utm ellps=GRS80 inv
tolerance 0.1 mm
accept 12 55 0 0
expect 12 55 0 0
# Now the inverse direction (still same result: the pipeline is symmetrical)
direction inverse
expect 12 55 0 0
جهت پیشفرض "forward" است.
- ignore <error code>
- این دستور بهویژه در مواردی از آزمون که به یک شبکه (grid) وابسته هستند که در دسترس بودنش تضمین نشده است، مفید است. در زیر مثالی از این وضعیت آمده است.
operation proj=hgridshift +grids=nzgd2kgrid0005.gsb ellps=GRS80 tolerance 1 mm ignore pjd_err_failed_to_load_grid accept 172.999892181021551 -45.001620431954613 expect 173 -45
برای فهرستی از کدهای خطایی که میتوان آنها را نادیده گرفت، gie --list را ببینید.
- require_grid <grid_name>
- در دسترس بودن شبکهٔ <grid_name> را بررسی میکند. اگر یافت نشود، تمام جفتهای accept/expect تا operation بعدی نادیده گرفته خواهند شد. require_grid را میتوان چندین بار برای مشخص کردن چندین شبکه که حضور آنها الزامی است، تکرار کرد.
- echo <text>
- افزودن متن تعریفشده توسط کاربر به جریان خروجی. مثال زیر را ببینید.
<gie> echo ** Mercator projection tests ** operation +proj=merc accept 0 0 expect 0 0 </gie>
که نتیجهٔ زیر را بازمیگرداند:
------------------------------------------------------------------------------- Reading file 'test.gie' ** Mercator projection test ** ------------------------------------------------------------------------------- total: 1 tests succeeded, 0 tests skipped, 0 tests failed. -------------------------------------------------------------------------------
- skip
- صرفنظر کردن از هر آزمونی پس از نخستین رخداد skip. در مثال زیر تنها آزمون نخست انجام خواهد شد و از آزمون دوم صرفنظر میشود. این ویژگی عمدتاً هنگام نوشتن آزمونهای جدید برای اشکالزدایی کاربرد دارد.
<gie> operation proj=merc accept 0 0 expect 0 0 skip accept 0 1 expect 0 110579.9 </gie>
در نسخهٔ 7.1 اضافه شد.
گونهای سختگیرانهتر از نحو معمول gie را میتوان با قرار دادن دستورهای gie میان <gie-strict> و </gie-strict> به کار برد. در حالت سختگیرانه، خطوط توضیحات باید با نویسهٔ شارپ (#) آغاز شوند. دستورهای ناشناخته به عنوان خطا تلقی خواهند شد. یک دستور همچنان میتواند در چند خط شکسته شود، اما خطوط میانی باید با نویسهٔ فاصله و به دنبال آن یک بکاسلش برای مشخص کردن ادامهٔ خط خاتمه یابند.
<gie-strict>
# This is a comment. The following line with multiple repeated characters too
-------------------------------------------
# A command on several lines must use " \" continuation
operation proj=hgridshift +grids=nzgd2kgrid0005.gsb \
ellps=GRS80
tolerance 1 mm
ignore pjd_err_failed_to_load_grid
accept 172.999892181021551 -45.001620431954613
expect 173 -45
</gie-strict>
پیشزمینه (BACKGROUND)
مهمتر از اینکه gie سرواژهای برای "Geospatial Integrity Investigation Environment" باشد، سرنامها، شناسهٔ کاربری و نشانی ایمیل USGS متعلق به Gerald Ian Evenden (۱۹۳۵--۲۰۱۶) بود؛ پیشگام دادههای مکانی که از دههٔ ۱۹۸۰ پایهگذار چیزی شد که امروزه به PROJ تبدیل شده است.
دیدگاه روشن جرالد این بود که سیستمهای تصویر نقشه صرفاً توابعی خاص هستند. برخی از آنها نسبتاً پیچیده و بیشتر آنها دو متغیره هستند، اما همگی صرفاً توابعی خاص میباشند، و تفاوت چندانی با sin()، cos()، tan() و hypot() که هماکنون در کتابخانهٔ استاندارد C در دسترس هستند، ندارند.
و بنابراین، به باور جرالد، استفاده از آنها برای یک برنامهنویس نباید خیلی سختتر از توابع دمدستی sin()، tan() و hypot() باشد.
نبوغ جرالد در پیادهسازی این دیدگاه نیز نمایان شد؛ جایی که او سامانهای جامع و در عین حال ساده از جفتهای کلید-مقدار را برای پارامتربندی سیستم تصویر نقشه، و ساختار بسیار منعطف PJ <#c.PJ> را برای ذخیرهسازی نسخههای ترجمهشدهٔ زمان اجرای این کلید-مقدارها ابداع کرد، تا فراخوانی تابع سیستم تصویر نقشه، pj_fwd(PJ, point)، به همان سادگی یک فراخوانی تابع سنتی مانند hypot(x,y) باشد.
اگرچه امروزه سامانههای فرادادهای با تعریف رسمیتر و بهتری داریم (که برجستهترین آنها نمایش OGC WKT2 است)، هیچکدام از نظر خوانایی آسان ("سازگار با انسان") به پای سامانهٔ کلید-مقدار جرالد نمیرسند. این سامانه بهویژه، و سامانهٔ PROJ بهطور کلی، هدیهٔ بزرگ جرالد به هر کسی بود که از دادههای مکانی استفاده میکند یا پیرامون آن به تبادل اطلاعات میپردازد.
کاملاً منطقی و شایسته است که نام برنامهای که بر یکپارچگی سامانهٔ PROJ نظارت دارد، به افتخار جرالد نامگذاری شود.
بنابراین به پاسداشت و امید است در راستای روحیهٔ Gerald Ian Evenden (۱۹۳۵--۲۰۱۶)، این برنامه Geospatial Integrity Investigation Environment است.
همچنین ببینید (SEE ALSO)
proj(1), cs2cs(1), cct(1), geod(1), projinfo(1), projsync(1)
گزارش باگها (BUGS)
فهرستی از باگهای شناختهشده را میتوانید در https://github.com/OSGeo/PROJ/issues بیابید که در آنجا امکان ارسال گزارشهای جدید باگ نیز فراهم است.
صفحه اصلی (HOME PAGE)
نویسندگان (AUTHORS)
Thomas Knudsen
کپیرایت و تکثیر (COPYRIGHT)
1983-2026، مشارکتکنندگان PROJ
| 10 avril 2026 | 9.8 |