اعلانات انجمن


ارسال پاسخ 
 
امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
آموزش تبدیل shapefile فارسی به استاندارد جهانی یونیکد
نویسنده پیام
علوی آفلاین
ناظر انجمن
******

ارسال‌ها: 495
تاریخ عضویت: مرد ۱۳۹۲
اعتبار: 246
ارسال: #1
آموزش تبدیل shapefile فارسی به استاندارد جهانی یونیکد
سلام
همونطور که داده های مکانی برای خودشون سیستم مختصات دارند و در هر داده ای دانستن سیستم مختصات اون از اهمیت ویژه ای برخوردار هست، تکست ها و متن ها نیز در فضای کامپیوتر دارای سیستم مختصات خودشون هستند. این که بعضی وقت ها متنی رو با نرم افزاری باز می کنیم و می بینیم که به صورت کاراکترهای درهم ریخته نمایش داده میشه، به خاطر این هست که سیستم مختصات اون توسط نرم افزار شناسایی نشده و به همین خاطر نرم افزار مربوطه اون رو در سیستم مختصات پیش فرض باز کرده. به سیستم مختصات متن ها اصطلاحا Encoding گفته می شه. Encoding های مختلفی وجود داره که پرکاربردترین اون ها انکودینگی هست به اسم ANSI که پیش فرض خیلی از نرم افزارها هم هست.
بسیاری از shapefile هایی که دارای فیلد فارسی هستند به خاطر وضعیت فارسی نویسی در ویندوز معمولا از Encoding با این مشخصات  استفاده می کنند: Windows-1256 . این انکودینگ برای زبان عربی طراحی شده، برای همین شما مثلا در این انکودینگ حرف "ي" رو می بینید که زیرش دو تا نقطه است؛ یعنی یای عربی نه فارسی. خب برای نمایش زیاد مشکلی وجود نداره. مشکل زمانی شروع میشه که بخوایم در shapefile خودمون جستجو کنیم مثلا Select By Attribute در ArcGIS . در این حالت فرض کنید ما برای پیداکردن شهر انزلی عبارت "انزلی" رو سرچ می کنیم -که با یای فارسی در عبارت جستجو نوشته شده- اما در دیتای ما صرفا عبارت "انزلي" – با یای عربی- هست. خب طبعا جستجوی ما هیچ نتیجه ای دربرنخواهد داشت؛ در حالی که در دیتای ما شهر انزلی وجود داره. این مشکل در خیلی از جاهای دیگه به وجود می یاد مثلا در WebGIS .
بهترین راه حل این هست که انکودینگ دیتای رو از Windows-1256 تبدیل کنیم به Unicode. یونیکد استاندارد جهانی برای انکودینگ هست که همه زبان ها رو در برمی گیره و اکثر نرم افزارها هم از اون پشتیبانی می کنن و خیلی راحت اون رو هندل می کنند. (انکودینگ Windows-1256 که خاص زبان عربی هست و بسیاری از انکودینگ های دیگه رو خیلی از نرم افزارها مستقیما پشتیبانی نمی کنند.) برای این تبدیل چند راه وجود داره:
1- ساخت یک ژئودیتابیس و وارد کردن شیپ فایل به اون. پیش فرض ژئودیتابیس ها انکودینگ Unicode هست. پس شیپ فایل شما تبدیل میشه به Unicode . بعد میشه همین لایه رو از ژئودیتابیس به فرمت Shapefile خروجی گرفت.
2- در نرم افزار QGIS شیپ فایل رو باز کرده و مجدد ذخیره کنید. در پنجره Save As نرم افزار از شما  Encoding رو می پرسه که اون رو روی UTF-8 قرار بدید. (خود یونیکد ورژن های مختلفی داره مثل UTF-8 و UTF-16 که UFT-8 بیشتر استفاده می شه).
3- راه های دیگه ای هم هست مثل استفاده از دیتابیس ها که دو تا راه حل بالا، دم دست ترین و راه ها بودند.
 
صد البته که در این مرحله صرفا انکودینگ عوض شده و هنوز یای عربی به شکل یای عربی با دو تا نقطه زیرش هست. برای تغییر اون از Calculate field  در ArcGIS میشه استفاده کرد. زبان رو در این پنجره روی پایتون بذارید و از عبارت زیر استفاده کنید:



کد:
!NAME!.replace(u"ي",u"ی")



Name اسم فیلدی هست که دیتای فارسی داره و میخوایم درستش کنیم. یای اولی یای عربی هست – یعنی همونی که با Shift+X نوشته می شه – و یای دوم هم یای فارسی هست – که با کلید D از صفحه کلید نوشته میشه-.
(اگر می پرسید چرا از همون اول این تغییر یای عربی به فارسی رو انجام ندادیم، خب برای این که در انکودینگ Windows-1256 که اصالتا برای زبان عربی هست حرف یای فارسی تعریف نشده. در نتیجه دستور بالا تغییری صورت نخواهد داد.)
حالا اگه عبارت "انزلی" رو تایپ و جستجو کنیم شهر انزلی به عنوان نتیجه جستجو به ما نشان داده خواهد شد.
نکته  آخر: شیپ فایل از فایل های مختلفی تشکیل شده. فایل های shp,shx,dbf رو که فایل های اصلی هستند حتما می شناسید. یک فایل دیگه با پسوند cpg می تونه کنار این فایل ها باشه که این فایل انکودینگ رو مشخص می کنه. یک فایل متنی ساده هست که در مورد بالا اگر بازش کنید فقط عبارت UTF-8 توش هست. ArcGIS از این فایل استفاده می کنه برای تشخیص انکودینگ شیپ فایل و اگر هم این فایل وجود نداشت در انکودینگ پیش فرض ویندوز اون رو باز می کنه.
 
موفق باشید
 

یک نکته دیگه هم بگم که: این پایان ماجرا نیست. مشکل زبان فارسی و عربی با همدیگه همچنان ادامه داره.
یکی دیگه از حروف مشکل ساز "ك" عربی هست- یعنی کاف که روش همزه داره- در مقابل "ک" فارسی که بدون همزه هست.
یا بحث فاصله و نیم فاصله. که البته این یکی دیگه به تفاوت زبان فارسی و عربی ربطی نداره. 

دو اصل اساسی انجمن:
1- احترام به یکدیگر
2- درصورت نقل مطلب، ذکر منبع و لینک به اصل مطلب

برای تقدیر و تشکر از دکمه [تصویر:  postbit_reputation.gif] در پایین هر ارسال استفاده کنید.
(آخرین ویرایش در این ارسال: ۱۷-۲-۱۳۹۵ ۱۲:۲۴ عصر، توسط علوی.)
۱۷-۲-۱۳۹۵ ۱۲:۰۰ عصر
مشاهده‌ی وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در یک پاسخ
 اعتبار داده شده توسط : یوسفی(+1) ، jafari_GIS(+1) ، ali.kheradmand(+1)
ارسال پاسخ 


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 2 مهمان