GIE(1) PROJ GIE(1)

gie - محیط بررسی یکپارچگی اطلاعات مکانی (Geospatial Integrity Investigation Environment)

gie [ -hovql [ args ] ] file[s]

ابزار gie (محیط بررسی یکپارچگی اطلاعات مکانی)، یک محیط آزمون پس‌رفت (regression testing) برای کتابخانهٔ تبدیل‌های PROJ است. هدف اصلی از طراحی آن، فراهم آوردن امکان اجرای آزمون‌های پس‌رفت روی کدهای متعلق به PROJ است، بدون آنکه به هیچ ابزاری فراتر از همان کامپایلر C استفاده‌شده برای کامپایل کتابخانه نیاز باشد.

نمایش اطلاعات نحوهٔ استفاده
مشخص کردن نام فایل خروجی
پرگویی: ارائه خروجی‌های اطلاعاتی غیرضروری. برای جزئیات بیشتر -v را تکرار کنید (مانند -vv)
بی‌صدا: نقطهٔ مقابل پرگویی. در حالت بی‌صدا حتی خطاها نیز گزارش نمی‌شوند. تنها راه تعامل از طریق کد بازگشتی است (۰ برای موفقیت، و مقدار غیرصفر نشان‌دهندهٔ تعداد آزمون‌های ناموفق است)
فهرست کردن کدهای خطای سامانه داخلی PROJ
نمایش شماره نسخه

آزمون‌های 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

تعریف یک عملیات 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
تعریف مختصات ورودی برای خواندن. مختصات آزمایشی را دریافت می‌کند. این مختصات می‌تواند با ۲، ۳ یا ۴ مقدار تعریف شود، که در آن دو مقدار اول مؤلفه‌های x- و y-، مقدار سوم مؤلفهٔ z- و مقدار چهارم مؤلفهٔ زمان هستند. تعداد مؤلفه‌ها در مختصات مشخص می‌کند که کدام نسخه از عملیات مورد آزمایش قرار می‌گیرد (2D، 3D یا 4D). مختصات‌های متعددی را می‌توان برای یک operation پذیرفت. برای هر accept یک دستور متناظر expect مورد نیاز است.

توجه داشته باشید که gie نویسهٔ زیرخط (_) را به عنوان جداکننده هزارگان می‌پذیرد. استفاده از آن الزامی نیست (در واقع، به طور کامل توسط روتین ورودی نادیده گرفته می‌شود)، اما خوانایی رشته‌های بسیار طولانی اعداد را که معمولاً در مختصات‌های تصویرشده مورد نیاز است، به طور چشمگیری بهبود می‌بخشد.

برای مشاهده مثال به operation مراجعه کنید.

تعریف مختصات مورد انتظاری که از مختصات پذیرفته‌شدهٔ عبور داده شده از یک عملیات بازگردانده خواهد شد. مختصات مورد انتظار مشابه 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 باید
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) روی یک عملیات. دستور 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 مشخص می‌کند که یک عملیات در کدام جهت انجام شود. این مقدار می‌تواند 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" است.

این دستور به‌ویژه در مواردی از آزمون که به یک شبکه (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 را ببینید.

در دسترس بودن شبکهٔ <grid_name> را بررسی می‌کند. اگر یافت نشود، تمام جفت‌های accept/expect تا operation بعدی نادیده گرفته خواهند شد. require_grid را می‌توان چندین بار برای مشخص کردن چندین شبکه که حضور آن‌ها الزامی است، تکرار کرد.
افزودن متن تعریف‌شده توسط کاربر به جریان خروجی. مثال زیر را ببینید.
<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. در مثال زیر تنها آزمون نخست انجام خواهد شد و از آزمون دوم صرف‌نظر می‌شود. این ویژگی عمدتاً هنگام نوشتن آزمون‌های جدید برای اشکال‌زدایی کاربرد دارد.
<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>

مهم‌تر از این‌که 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 است.

proj(1), cs2cs(1), cct(1), geod(1), projinfo(1), projsync(1)

فهرستی از باگ‌های شناخته‌شده را می‌توانید در https://github.com/OSGeo/PROJ/issues بیابید که در آن‌جا امکان ارسال گزارش‌های جدید باگ نیز فراهم است.

https://proj.org

Thomas Knudsen

1983-2026، مشارکت‌کنندگان PROJ

10 avril 2026 9.8