امتیاز دهید

دنبال کردن



اسفاده از نقشه گوگل در سی شارپ قسمت اول





farsoft logo
فرسافت

ما در این مقاله سعی داریم استفاده از نقشه گوگل و کتابخانه GMAP.NET را آموزش دهیم.


نقشه گوگل در سی شارپ

اولین کاری که باید بکنبد اینه که کتابخانه GMAP.NET را از اینجا دانلود کنید. در فایل فشرده ای که دانلود میکنید 2 تا فایل DLL قرار گرفته که باید به پروژه اضافه کنید. بعد از اینکه یک پروژه ایجاد کردید در solution explorer قسمت reference کلیک راست کرده و گزینه add reference رو بزنید. در پنجره ای که باز میشه مسیر فایل های dll رو میدین و اوکی میکنید. یک بار که اینکار رو انجام بدین در پروژه های بعدی در لیست reference ها میمونه فقط کافیه که تیک بزنید و اضافه کنید.

اضافه کردن به reference

قدم بعدی که باید انجام بشه اضافه کردن کامپوننت gmap control هست که کافیه فایل GMap.NET.WindowsForms.dll درگ کنید و در toolbox رها کنید. و یه راه هم اینکه رو toolbox کلیک راست کنید و گزینه choose item رو بزنید و سپس گزینه browse رو بزنید و مسیر فایل رو بهش بدین. بعد چک کنید که تیک GMAPControl زده باشه بعد اوکی کنید.

اضافه کردن به toolbox

سپس میبینید که کنترل به toolbox شما اضافه شده

اضافه کردن کنترل

خب تا اینجا مراحل اضافه کردن فایل ها و کامپوننت ها تموم شد .

ایجاد نقشه در Window Form

خب گام بعدی که باید انجام بدید اینه که کامپوننت gmap control رو از tool box درگ کنید و رو ویندوز فرم رها کنید تا یک نمونه از آن ساخته شه. تنها چیزی کی شما میبینید یک مربع سفید با یک + قرمز رنگ وسطش.

ایجاد یک کامپوننت نقشه

. واسه راحتی کار ما تو properties اسم کامپوننت رو میذاریم gmap . وقتی کامپوننت رو انتخاب کردین تو پنجره properties ویژگی های اونو نمایش میده که با چند تایی که بیشتر کار داریم رو توضیح میدم.

ویژگی های کنترل

CanDragMap

وقتی این گزینه true باشه کاربر این اجازه رو داره که نقشه رو جا به جا کنه و به قسمت هایی که دوست داره نقشه رو درگ کنه. (بهتره که این قسمت true باقی بمونه )

MarkersEnabled

زمانی که این خاصیت true باشه علامت هایی (Marker) که رو نقشه باشه رو نشون میده. البته بهتره تا آموزش های بعدی که ایجاد مارکر رو توضیح میدیم این قسمت true بمونه.

MinZoom , MaxZoom ,Zoom

برای نقشه گوگل بهترین تنظیمات اینه که حداقل زوم 0 باشه و حداکثر رو هم رو 18 تنظیم کنیم. و خود Zoom رو میتونید رو 5 ست کنید که نمای کلی از کشور رو نشون میده. البته میتونید واسه شهر ها مقدار زوم رو زیاد تر کنید ، مثلا 14.

خب حالا نوبت لود کردن فرم میرسه. ما میخوایم نقشه تو فرم لود اجرا بشه، دیگه بستگی به خودتون کی و چطوری نقشه رو فراخوانی کنید. تو فرم لود پروژه کد های زیر رو بنویسید.

					
private void Form1_Load(object sender, EventArgs e)
  {
          
     gmap.MapProvider = GMap.NET.MapProviders.GoogleMapProvider.Instance;
     GMap.NET.GMaps.Instance.Mode = GMap.NET.AccessMode.ServerAndCache;
     gmap.SetPositionByKeywords("IRAN,isfahan");
  }
					
				

اگه قبل از اجرا تو پنجره properties خاصیت minzoom=2 و maxzoom=18 و zoom=13 باشه نقشه به این شکل بالا میاد.

لود شدن نقشه

خب حالا کدها رو یه بررسی کنیم :

1- Configure a map provider

خط اول ما یه نمونه از مپ ایجاد کردیم که از نوع google هست ولی شما هر مپی که نیاز داشتین میتونید انتخاب کنید.

2- Set the GMap working mode to use only server data

خط دوم ما انتخاب کردیم که نثشه به چه شکل لود بشه که گزینه انتخابی ما ServerAndCache شد . گزینه اول servrOnly بود که فقط به صورت آنلاین مپ لود میشه و بدون اینترنت نقشه لود نمیشه. گزینه که ما انتخاب کردیم نقشه به صورت آنلاین لود میشه و همزمان به صورت کش ذخیره میشه که اگر باز لود کردیم ولی اینترنت نداشتیم قسمت هایی که قبلا به صورت کش ذخیره شده باشه رو نمایش بده. و قسمت سوم تنها به صورت کش نمایش میده .

3- Center the map

با اجرای تابع SetPositionByKeywords میگیم که نقشه از کجا لود بشه. یا مرکز جایی که قرار رو نقشه باشه کجا باشه.

البته باید در نظر داشت که همیشه با این تابع نمیشه از کجا لود بشه، بستگی داره نقشه اسم اون شهر یا مکانی که میدیم رو بشناسه یا نه. روش جایگزین برای این تابع استفاده موقعیت (position) هست که شما میتونید با دادن طول و عرض جغرافیایی دقیقا بگین از چه قسمتی نقشه لود بشه. واسه به دست آوردن طول و عرض جغرافیایی میتونید از سایت ها متفاوتی استفاده کنید که یک نمونش میتونید از اینجا استفاده کنید.

حالا می تونید خط سوم کد را با این کد عوض کنید. من به جای اسم کشور و شهر از طول و عرض جغرافیایی استفاده کردم که دقیقا همون مکان رو نشون میده.

					
gmap.Position = new GMap.NET.PointLatLng(32.648163, 51.674332);
					
				

خب کار ما فعلا تو این قسمت تمومه. تو قسمت بعدی آموزش علامت گذاری (marker) روی نقشه رو آموزش میدیم.

ایجاد نقشه در سی شارپ ویندوز فرم


فراخوانی نقشه

در صورت مفید بودن این مطلب را به اشتراک بگذارید




دیدگاه خود را درباره این مطلب بنویسید:




  • محمد
    Profile Avatar

    سلام استاد ببخشید میشه نقشه هارو به صورت افلاین استفاده کرد؟چه طوری؟

    ستار شاکری
    Profile Avatar

    سلام. بله. در این خط کد که بالا هم توضیح دادم : GMap.NET.GMaps.Instance.Mode = GMap.NET.AccessMode.ServerAndCache; زمانی که cache رو میزنید ، ابتدا باید به صورت آنلاین نقشه لود بشه. در دفعات بعد اگر به اینترنت وصل نباشید قسمت هایی که قبلا لود شده رو آفلاین میبینید.

    محمد
    Profile Avatar

    استاد ببخشید اگه اون سیستم هیچ وقت به اینترنت وصل نشده و نمیشه چی کار کنم؟

    ستار شاکری
    Profile Avatar

    با این کتابخانه متاسفانه امکانش نیست

  • سامی
    Profile Avatar

    سلام و تشکر بابت اموزش من با استفاده از دستور زیر تونستم نقشه رو استخراج کنم که بصورت یک دیتابیس اسکیولایت ذخیره میشود. gmap.Manager.ExportToGMDB( sfd.FileName); مشکلی که مطرحه اینه که چطوری دوباره اینو لود کنم ؟ دستور زیر رو نوشتم ولی متاسفانه کار نکرد! gmap.Manager.ImportFromGMDB (dlg.FileName);

    ستار شاکری
    Profile Avatar

    شما چیزی که باید در دیتابیس ذخیره کنید 2 تا مقدار هست. طول و عرض جغرافیایی که به صورت long در دیتابیس ذخیره میکنید . در اصل به عنوان 2 عدد باهاش رفتار میکنیدچه ذخیره کردن و چه select کردن.

  • مصطفی
    Profile Avatar

    سلام خسته نباشید خیلی ممنون بابت آموزش خوبتون استاد یک مشکل من خاصیت Allow Drop را True گذاشتم اما نمیتونم توی نقشه حرکت کنم

    ستار شاکری
    Profile Avatar

    سلام . ممنون از شما . منظورتون از حرکت در نقشه رو دقیقا متوجه نشدم. اگه منظورتون جا به جا کردن نقشه هست کلیک موس راست رو نگه دارین و نقشه رو حرکت بدین.

  • مهرداد
    Profile Avatar

    سلام و خسته نباشید. من با نرم افزار google map downloader عکسای خام نقشه رو دانلود کردم و میخواستم ازشون استفاده کنم.ولی هرکار کردم با gmap.net انجام بدم نتونستم. اگه میشه یه کتابخونه با این قابلیت معرفی کنید

    ستار شاکری
    Profile Avatar

    سلام. برای انجام اینکار میتونید از اینجا کمک بگیرید.

  • مهرداد
    Profile Avatar

    سلام و خسته نباشید مهندس عزیز. می خواستم بدونم چطوری میشه داخل نقشه بین دو نقطه خط کشید. فرض کنید بخوام مسیر خط لوله نمایش بدم

    ستار شاکری
    Profile Avatar

    سلام. وقت شما بخیر. در آموزش سوم همین مبحث طریقه کشیدن مسیر و خط و طول مسافت رو توضیح دادیم. ایجاد مسیر در نقشه سی شارپ

  • مهرداد
    Profile Avatar

    سلام و خسته نباشید. من چطور میتونم یه مارک رو به نقشه اضافه کنم. جوری که ترنسپرنت هم باشه و یک مختصات از فرم بهش بدم نه لت و لانگ. ینی میخوام مثلا گوشه صفحه یه آرم بذارم. با پنل این کارو کردم. ولی موقع حرکت نقشه عکسای نقشه روی پنل تیکه تیکه میشد...

    ستار شاکری
    Profile Avatar

    سلام. به جای پنل میتونید از picture box استفاده کنید و برای شفاف بودن میتونید خاصیت opacity رو کاهش بدین. برای مختصات هم میتونید از x و y فرم استفاده کنید.

  • مجید
    Profile Avatar

    سلام خسته نباشید مطلب عالی بود چطور میتونم لوکیشن خودمو بگیرم

    ستار شاکری
    Profile Avatar

    سلام ممنون از شما. فکر کنم بتونید تو این مقاله به جواب سوالتون برسید.

  • monireh
    Profile Avatar

    دمتون گرم عالی بود واقعا

  • مجید
    Profile Avatar

    ممنون از پاسختون دو سوال دیگه هم در این مورد دارم.. عذر میخام! با این حساب میشه مپ اندروید رو با سی شارپ پیاده سازی کرد. اون مپ ی خاصیتی داره که اگه اسم ی خیابون رو وارد کنیم به صورت ساجسشن نام شهرهایی که اون خیابون رو داره یا خیابون های فرعی با اون خیابون رو نشون میده خواستم ببینم میشه با این کتابخونه میشه این طور چیزی پیاده سازی کرد یا الگوریتمش رو باید خودمون بنویسیم؟ سوال بعدی اینکه من در مورد ماهیت مپ های میخام تحقیق کنم (مثلا اینکه چه مدل فایل هایی هستند و چطور به این شکل در اومدن) اما به منبع درستی دسترسی ندارم! و با سرچی که کردم بجایی نرسیدم این ش

    ستار شاکری
    Profile Avatar

    سلام. در مورد جستجوی اسم مکان ها (شهر ، خیابان و ...) این قابلیت مربوط به خود مپ هستش و فرقی نمیکنه که از سی شارپ باشه ، وب یا اندروید چون در هر صورت همه به یک مپ متصل میشن .