رفتن به مطلب

گوگل مپ در بیسیک 6.5 به بالا


mehran3d

ارسال‌های توصیه شده

سلام

کار با گوگل مپ رو جناب خلیلی توی این تاپیک توضیح دادند

اما اخیرا حدود 6 7 ماهی هست که روش گوگل مپ توی بیسیک آپدیت شده و تغییر پیدا کرده

که من برای شما توضیح میدم

البته تا جایی که بدونم و دانشم اجازه بده

اول باید گوگل پلی سرویس  sdk   خودتون رو آپدیت کنید همچنین باید  android support repository  و google repository رو هم به اس دی کی خودتون اضافه کنید

sssssss.PNG

فرض بر این هست که شما api  نقشه گوگل رو قبلا طبق آموزش جناب خلیلی گرفتید

خوب شما باید اول برنامه این کد رو اضافه کنید

#AdditionalJar: com.google.android.gms:play-services-maps

و توی کد های مانیفست هم اینو باید بزارید

AddApplicationText(<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="AIzXXXXXXXXXXXXXXXXXXXXXX"/>
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"/>)

خو بعدش دو کتابخونه  google maps  و google maps extras  رو ادد کنید 

تا الان  اس دی کی رو آپدیت کردیم

مانیفست رو اضافه کردیم

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

از نسخه 6 بیسیک به بعد نقشه از طریق دیزاینر باید اضافه بشه به این صورت

 

addded.png

 

این ادد کردن باید بعد از اضافه کردن کتابخونه انجام بشه چون اگه کتابخونه رو ادد نکنید مپ فراگمنت رو نمیبینید

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

addded.png

اولی که تعریف مپ فرگمنت هست رو باید بعدا انجام بدید

دومی هم رویدادی هستش که در صورت آماده شدن نقشه اجرا میشه 

camera change  هم یه ساب هست که در صورت حرکت دادن مپ صدا زده میشه

click  به ما میگه کجای نقشه رو کاربر لمس کرده

long clik  به ما میگه کاربر کجای نقشه تاچ طولانی انجام داده

marker click  وقتی انجام میشه که کار بر روی مارکر تاچ کنه

لایه رو ذخیره میکنیم من با اسم  amooozesh سیو کردم

حالا میریم به اکتیویتی نقشه

متغیر گوگل مپ رو تعریف می کنیم

Dim gmap As GoogleMap

مپ فراگمنت رو تعریف میکنیم

(توی کاستوم ویو مپ فراگمنت . گزینه اول)

بعد   ساب ready

بعد  marker click

خوب

حالا میریم برای ادامه کد های اکتیویتی

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

If MapFragment1.IsGooglePlayServicesAvailable = False Then
		ToastMessageShow("Google Play services not available.", True)
	 
	End If

اگه گوگل پلی سرویسز دستگاه آپدیت بود  MapFragment1_Ready صدا زده میشه

بعدش توی ساب MapFragment1_Ready اینو مینویسیم

gmap = MapFragment1.GetMap

و با استفاده از  addmarker  چند مکان رو اضافه می کنیم

که اینجوری میشه

Sub MapFragment1_Ready
	gmap = MapFragment1.GetMap
	gmap.AddMarker(34.584453, 50.916289, "جمکران مسجد مقدس")
	gmap.AddMarker(34.641940, 50.879569, "حرم مطهر حضرت معصومه ص")
	gmap.AddMarker(34.644662, 50.883254, "مسجد امام حسن عسکری")
End Sub

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

Sub MapFragment1_MarkerClick (SelectedMarker As Marker) As Boolean 'Return True to consume the click
	Label1.text=SelectedMarker.Title
End Sub

 حالا اگه بخ.ام وقتی که روی عنوان مارکر (اون کادر سفیده روی مارکر) کلیک شد یه کاری انجام بده چی؟

اینجا  google play extras  وارد عمل میشه

اول برنامه جایی که گوگل مپ رو تعریف کردیم یه متغیر از نوع  OnInfoWindowClickListener  تعریف کنید و بعدش اینیشیالایز کنید

Dim oninfoclick As OnInfoWindowClickListener
oninfoclick.Initialize("oninfoclick")

سابش رو هم ایجاد میکنیم

Sub oninfoclick_Click(Marker1 As Marker)
	
End Sub

 

ایشالا که کمکی کرده باشم

ببخشید اگه ناقص بود

 

همه ی کد اکتیویتی 

#Region  Project Attributes 
	#ApplicationLabel: map
	#VersionCode: 1
	#VersionName: 
	'SupportedOrientations possible values: unspecified, landscape or portrait.
	#SupportedOrientations: unspecified
	#CanInstallToExternalStorage: False
		#AdditionalJar: com.google.android.gms:play-services-maps
	#BridgeLogger: true
	

#End Region

#Region  Activity Attributes 
	#FullScreen: true
	#IncludeTitle: False
	
#End Region



Sub Process_Globals
	 
End Sub

Sub Globals
 
	Dim gmap As GoogleMap
	Private MapFragment1 As MapFragment
	Private Label1 As Label
	
	
End Sub

Sub Activity_Create(FirstTime As Boolean)
 
	Activity.LoadLayout("amooozesh")

	If MapFragment1.IsGooglePlayServicesAvailable = False Then
		ToastMessageShow("Google Play services not available.", True)
	 
	End If

End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub


Sub MapFragment1_Ready
	gmap = MapFragment1.GetMap
	gmap.AddMarker(34.584453, 50.916289, "جمکران مسجد مقدس")
	gmap.AddMarker(34.641940, 50.879569, "حرم مطهر حضرت معصومه ص")
	gmap.AddMarker(34.644662, 50.883254, "مسجد امام حسن عسکری")
End Sub

Sub MapFragment1_MarkerClick (SelectedMarker As Marker) As Boolean 'Return True to consume the click
	Label1.text=SelectedMarker.Title
End Sub

رمز

mapexample

لینک جدید

 

photo_2017_06_07_01_08_22.jpg

 

photo_2017_06_07_01_08_16.jpg

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بنده  موفق به دیدن  این قسمت نمی شوم

addded.png

 یک خطا هم بعد باز شدن برنامه میبینیم

eroo_1.jpg

 

 

استاد لطفا راهنمایی کنید.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

شاید کتابخونه گوگل مپ شما قدیمیه دقت کنید باید نسخه ی ۲ باشه

توی فایل پیوستی کتابخونه ها رو گذاشتم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 6 ساعت قبل، mehran3d گفته است :

کتابخونه گوگل مپ شما قدیمیه دقت کنید باید نسخه ی ۲ باشه

مشکل همین بود.

با یک دکمه تشکر واقعا نمیشه از شما سپاسگذاری کرد.

 

یک دنیا ممنونم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

  • 3 ماه بعد...

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

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 6 ساعت قبل، marius گفته است :

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

احتمالا به خاطر اینه که key رو دریافت نکردید از گوگل.  به آدرس زیر برید و کلید رو بگیرید(فندق شکن وصل باشه حتما)

https://developers.google.com/maps/documentation/android-api/signup

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

<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="کلید گرفته شده اینجا قرار گیرد"/>

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

  • 2 هفته بعد...
در در 1396/06/27, 01:48:25، marius گفته است :

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

جناب شاهپیری فرمودند

شما باید مطمئن باشید که پکیج نیم برنامتون هم با  api key  هماهنگه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

  • 1 ماه بعد...

سلام دوست عزیز

من سورس رو دانلود کردم و بدون هیچ تغیری کامپایل کردم

اما وقتی به مرحله Generating R file. میرسه گیر میکنه

الان متوجه شدم بخاطر اینه

#AdditionalJar: com.google.android.gms:play-services-maps

میشه راهنمایی کنید

ox1y_compile.jpg

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 12 ساعت قبل، atlasm گفته است :

سلام دوست عزیز

من سورس رو دانلود کردم و بدون هیچ تغیری کامپایل کردم

اما وقتی به مرحله Generating R file. میرسه گیر میکنه

الان متوجه شدم بخاطر اینه


#AdditionalJar: com.google.android.gms:play-services-maps

میشه راهنمایی کنید

ox1y_compile.jpg

sdk  رو آپدیت کنید و لینک چدید رو دانلود کنید

http://s9.picofile.com/file/8310497692/mapexample.rar.html

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ممنونم از راهنمایی دوستان

مشکل حل شد.

فقط ی مشکل دیگه ک مونده اینه ک حالا نقشه ها رو لود نمیکنه

مراحل API گوگل رو هم انجام دادم جواب نداد.

ممکنه اینم راهنماییم کنید؟

ممنونم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام و عرض ادب

ی چنتا سوال داشتم.

1- چطوری میشه یه نقطه رو روی نقشه انتخاب کرد؟

2- موقعیت فعلی رو زوم کنیم ؟

3- دوتا نقطه رو مسیریابی کرد.

 

ممنونم راهنماییک کنید.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در در 1396/03/17, 01:08:26، mehran3d گفته است :

gmap.AddMarker(34.584453, 50.916289, "جمکران مسجد مقدس")

چیکار کنیم که کنار این متن عکس هم نمایش بده ؟ 

photo_2017_11_06_08_56_56.jpg

مثل این 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در در 1396/08/15, 12:03:09، atlasm گفته است :

سلام و عرض ادب

ی چنتا سوال داشتم.

1- چطوری میشه یه نقطه رو روی نقشه انتخاب کرد؟

2- موقعیت فعلی رو زوم کنیم ؟

3- دوتا نقطه رو مسیریابی کرد.

 

ممنونم راهنماییک کنید.

سلام خسته نباشید.

ساب ها زیر مجموعه  mapfragment  هستند

۱-منظور از انتخاب یعنی چه؟کلیک معمولی یا کلیک طولانی؟

برای کلیک معمولی (تاچ کردن مپ)این ساب

Sub map_Click (Point As LatLng)
'log kardan lat
Log(Point.Latitude)
'log katdane long
Log(Point.Longitude)
''میتونید از این مختصات استفاده کنید
End Sub

برای کلیک طولانی (نگه داشتن انگشت روی مپ)این ساب

Sub map_LongClick (Point As LatLng)
	 
'log kardan lat
Log(Point.Latitude)
'log katdane long
Log(Point.Longitude)
''میتونید از این مختصات استفاده کنید
 
End Sub

 

۲-با استفاده از camera position

اینجوری

Sub map_Click (Point As LatLng)
Log(Point.Latitude)
Log(Point.Longitude)
Dim cp As CameraPosition
cp.Initialize(Point.Latitude),Point.Longitude,8)
'8 mizane zoom hast
 gmap.AnimateCamera(cp)
End Sub

۳-مسیر یابی؟نمیدونم دقیقا کار نکردم.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 2 دقیقه قبل، mehran3d گفته است :

سلام خسته نباشید.

۱-منظور از انتخاب یعنی چه؟کلیک معمولی یا کلیک طولانی؟

برای کلیک طولانی این ساب

 

برای کلیک معمولی این ساب

 

 

۲-با استفاده از camera position

اینجوری

۳-مسیر یابی؟نمیدونم دقیقا کار نکردم.

قسمت اول رو میشه یکم واضح تر توضیح بدین ؟

فک کنم یکم مشکل برخورده توضیحاتتون ی بررسی میکنید ؟

ممنونم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در ۱ ساعت قبل، hocein2 گفته است :

چیکار کنیم که کنار این متن عکس هم نمایش بده ؟ 

photo_2017_11_06_08_56_56.jpg

مثل این 

نمیدونم

فک کنم با

Dim Markeropts As MarkerOptions
Markeropts.Initialize
Dim AndroidResources1 As AndroidResources
Dim BitmapDescriptor1 As BitmapDescriptor
Dim BitmapDescriptorFactory1 As BitmapDescriptorFactory
Dim Icon As Bitmap
Dim Mydrawable1 As BitmapDrawable
Mydrawable1=AndroidResources1.GetApplicationDrawable("icon1")
Icon=Mydrawable1.Bitmap
BitmapDescriptor1=BitmapDescriptorFactory1.FromBitmap(Icon)
Markeropts.Icon(BitmapDescriptor1)
Dim Marker1 As Marker=GoogleMapsExtras1.AddMarker(GoogleMap1, Markeropts)

Android Question - Google Map Marker icon Chopped | B4X Community - Android, iOS, desktop, server and IoT programming tools

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 7 ساعت قبل، mehran3d گفته است :

Dim Marker1 As Marker=GoogleMapsExtras1.AddMarker(GoogleMap1, Markeropts)

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

Android Question - Google Map Rotate Marker | B4X Community - Android, iOS, desktop, server and IoT programming tools

نمونه شو گذاشته اما من نتونستم کار کنم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 4 ساعت قبل، hocein2 گفته است :

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

Android Question - Google Map Rotate Marker | B4X Community - Android, iOS, desktop, server and IoT programming tools

نمونه شو گذاشته اما من نتونستم کار کنم

پیدا کردم

اگه متوچه نشدید تا هفته دیگه مثال آماده کنم

 

Sub Process_Globals
End Sub

Sub Globals
   Dim ContainerPanel As Panel
    Dim GoogleMap1 As GoogleMap
   Dim InfoWindowPanel As Panel
    Dim MapFragment1 As MapFragment
    Dim MapPanel As Panel
   Dim Markers As Map
   Dim SnippetLabel As Label
   Dim ThumbImage As ImageView
   Dim TitleLabel As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
   Activity.LoadLayout("Main")
    If MapFragment1.IsGooglePlayServicesAvailable = False Then
        ToastMessageShow("Google Play services not available.", True)
    Else
        MapFragment1.Initialize("MapFragment1", MapPanel)
    End If 
End Sub

Sub MapFragment1_Ready
    Log("MapFragment1_Ready")
    GoogleMap1 = MapFragment1.GetMap
    If GoogleMap1.IsInitialized = False Then
        ToastMessageShow("Error initializing map.", True)
    Else
      Dim GoogleMapsExtras1 As GoogleMapsExtras
      Dim InfoWindowAdapter1 As InfoWindowAdapter
      
      InfoWindowAdapter1.Initialize("InfoWindowAdapter1")
      GoogleMapsExtras1.SetInfoWindowAdapter(GoogleMap1, InfoWindowAdapter1)
      
      InfoWindowPanel.Initialize("")
      InfoWindowPanel.LoadLayout("InfoWindow")
      '    a hack(ish) way to set InfoWindowPanel width and height!
      MapPanel.AddView(InfoWindowPanel, 0, 0, 280dip, 120dip)
      InfoWindowPanel.RemoveView
      
      Markers.Initialize
      
      Dim Marker1 As Marker
        Marker1=GoogleMap1.AddMarker(52.75619, 0.3980, "Home Sweet Home")
      Marker1.Snippet="Home is where the heart is!"
      Markers.Put(Marker1, Marker1)
      
      Dim Marker1 As Marker
        Marker1=GoogleMap1.AddMarker(52.93514, 0.4829, "Hunstanton")
      Marker1.Snippet="A charming seaside town. Popular with the tourists."
      Markers.Put(Marker1, Marker1)
      
        Dim CameraPosition1 As CameraPosition
        CameraPosition1.Initialize(52.75619, 0.3980, 8)
        GoogleMap1.AnimateCamera(CameraPosition1)
    End If
End Sub

Sub InfoWindowAdapter1_GetInfoContents(Marker1 As Marker) As View

   '   Return Null
   
   '   the default InfoContent will be used if this event Sub is not defined or if it returns Null
   Log("InfoWindowAdapter1_GetInfoContents")
   
   TitleLabel.Text=Marker1.Title
   SnippetLabel.Text=Marker1.Snippet
   '   ThumbImage.Bitmap=?   how will you store the file path/file name of the image to display?
   '   it's a shame that the Marker object has no Tag property which could be used to store such info
   
   Return InfoWindowPanel
End Sub

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 19 ساعت قبل، mehran3d گفته است :

سلام خسته نباشید.

ساب ها زیر مجموعه  mapfragment  هستند

۱-منظور از انتخاب یعنی چه؟کلیک معمولی یا کلیک طولانی؟

برای کلیک طولانی این ساب


Sub map_Click (Point As LatLng)
'log kardan lat
Log(Point.Latitude)
'log katdane long
Log(Point.Longitude)
''میتونید از این مختصات استفاده کنید
End Sub

برای کلیک معمولی این ساب


Sub map_LongClick (Point As LatLng)
	 
'log kardan lat
Log(Point.Latitude)
'log katdane long
Log(Point.Longitude)
''میتونید از این مختصات استفاده کنید
 
End Sub

 

۲-با استفاده از camera position

اینجوری


Sub map_Click (Point As LatLng)
Log(Point.Latitude)
Log(Point.Longitude)
Dim cp As CameraPosition
cp.Initialize(Point.Latitude),Point.Longitude,8)
'8 mizane zoom hast
 gmap.AnimateCamera(cp)
End Sub

۳-مسیر یابی؟نمیدونم دقیقا کار نکردم.

ممنونم از راهنمایی ک کردی کاربردی بود واسم.

اما ی چیز دیگه ک هس اینه ک مث برنامه های رزرو تاکسی (مث اسنپ یا تاچ سی) ی محل رو انتخاب کنیم و اونجا ی مارک گذاشته بشه و مقدار اونجا رو برگردونه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

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

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...