{"id":6622,"date":"2025-09-14T16:27:11","date_gmt":"2025-09-14T16:27:11","guid":{"rendered":"https:\/\/obsidiansofteducation.com\/?page_id=6622"},"modified":"2025-12-11T19:20:38","modified_gmt":"2025-12-11T19:20:38","slug":"mit-app-inventor-maps-tutorial","status":"publish","type":"page","link":"https:\/\/obsidiansofteducation.com\/index.php\/mit-app-inventor-maps-tutorial\/","title":{"rendered":"Place Finder App in MIT App Inventor | Maps &amp; OpenStreetMap Tutorial"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<p class=\"has-medium-font-size\">Hello friends, and welcome to Obsidian Soft<\/p>\n\n\n\n<p class=\"has-medium-font-size\">In today\u2019s tutorial, I will teach you how to use the maps component in MIT App Inventor. We will build a place finder app.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">So, let\u2019s begin:<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Open up MIT App Inventor and start a new project. Name it placeFinderApp and keep the toolkit default. This is very important. For screen 1, make align horizontal center, align vertical center, and set the screen orientation to portrait.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Drag and drop a <strong>ListPicker <\/strong>from the <strong>User Interface<\/strong> palette onto the viewer. Make background color orange, font bold, font size 18, and change text to \u201c<strong>Choose Place<\/strong>\u201d. In elements from string, type in hospital, restaurant, atm, school. You can add other amenities too, but be careful with the spellings. Check out the following link for the list of amenities. https:\/\/wiki.openstreetmap.org\/wiki\/Category:Amenities<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Now, add a <strong>Map <\/strong>component from the <strong>Maps <\/strong>palette. Make height 75% and width fill parent.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Add a <strong>Location <\/strong>sensor from the <strong>Sensors <\/strong>palette.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Add <strong>Web <\/strong>and <strong>Activity Starter<\/strong> from the <strong>Connectivity <\/strong>palette and a <strong>Notifier <\/strong>from the <strong>User Interface<\/strong> palette.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Our screen design is done, so let\u2019s go to the blocks section.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">We need a few global variables:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"493\" height=\"233\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-13.png\" alt=\"\" class=\"wp-image-6623\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-13.png 493w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-13-300x142.png 300w\" sizes=\"auto, (max-width: 493px) 100vw, 493px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">First, we will work on putting a green marker at our home location.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Make an empty procedure called goToHome.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"282\" height=\"122\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-14.png\" alt=\"\" class=\"wp-image-6624\"\/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Next, get the LocationChanged event of the location sensor. Check if the map doesn\u2019t already have markers, as this means the home was already set. If the list of markers is empty, then set global variables for home latitude and longitude to the latitude and longitude detected by the location sensor, and then call goToHome procedure.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"341\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-15-1024x341.png\" alt=\"\" class=\"wp-image-6625\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-15-1024x341.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-15-300x100.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-15-768x256.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-15.png 1098w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Now, let\u2019s work on the goToHome procedure. First, we center themap around our home\u2019s latitude and longitude. Then, we empty our markers list. This goToHome will be called at two points: when our location is determined for the first time, and when we choose some other amenity in the places list picker.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Then, we create our homeMarker at our location\u2019s latitude and longitude. We set the homeMarker\u2019s properties, such as title and color, and also enable the info box. This means that the title will show when the user taps on a marker.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Next, we will add this homeMarker to our list of markers.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"771\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-16-1024x771.png\" alt=\"\" class=\"wp-image-6626\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-16-1024x771.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-16-300x226.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-16-768x578.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-16.png 1392w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">When the user chooses an amenity or place, the list picker\u2019s AfterPicking event is triggered.First, we check if the location sensor\u2019s latitude isn\u2019t 0. This means that the user hasn\u2019t turned on their location. So, use the notifier to show a relevant message in the else. In If, set the web component\u2019s URL to a call to the Overpass API, which is a way of accessing OpenStreetMap data.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">So, the URL is a join of 7 things.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><a href=\"https:\/\/overpass-api.de\/api\/interpreter?data=[out:json];node[amenity=\" target=\"_blank\" rel=\"noopener\"><strong>https:\/\/overpass-api.de\/api\/interpreter?data=[out:json];node[amenity=<\/strong><\/a><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>ListPicker.selection<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>](around:2000,<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>LocationSensor.Latitude<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>,<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>LocationSensor.Longitude<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>);out;<\/strong><\/li>\n<\/ol>\n\n\n\n<p class=\"has-medium-font-size\">Copy and paste the text parts very carefully.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Then, call web1. Get. Verify the blocks in ListPicker.AfterPicking event super carefully as a small spelling mistake can lead to the API call failing. Your block structure should look like the following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"501\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-17-1024x501.png\" alt=\"\" class=\"wp-image-6627\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-17-1024x501.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-17-300x147.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-17-768x376.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-17.png 1484w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">The call to Web1.Get will trigger Web1.GotText event.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"954\" height=\"172\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-18.png\" alt=\"\" class=\"wp-image-6628\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-18.png 954w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-18-300x54.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-18-768x138.png 768w\" sizes=\"auto, (max-width: 954px) 100vw, 954px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">The responseContent looks like this when we call the Overpass API. So, we need to decode it.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">{<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&#8220;version&#8221;: 0.6,<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&#8220;generator&#8221;: &#8220;Overpass API 0.7.62.5 1bd436f1&#8221;,<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&#8220;osm3s&#8221;: {<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&nbsp;&nbsp;&#8220;timestamp_osm_base&#8221;: &#8220;2025-05-19T08:50:42Z&#8221;,<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&nbsp;&nbsp;&#8220;copyright&#8221;: &#8220;The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.&#8221;<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;},<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&#8220;elements&#8221;: [<\/p>\n\n\n\n<p class=\"has-medium-font-size\">{<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&#8220;type&#8221;: &#8220;node&#8221;,<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&#8220;id&#8221;: 458106054,<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&#8220;lat&#8221;: 41.8098280,<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&#8220;lon&#8221;: -87.9657834,<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&#8220;tags&#8221;: {<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&nbsp;&nbsp;&#8220;amenity&#8221;: &#8220;restaurant&#8221;,<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&nbsp;&nbsp;&#8220;name&#8221;: &#8220;ZaZa&#8217;s&#8221;<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;}<\/p>\n\n\n\n<p class=\"has-medium-font-size\">},<\/p>\n\n\n\n<p class=\"has-medium-font-size\">{<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&#8220;type&#8221;: &#8220;node&#8221;,<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&#8220;id&#8221;: 4619166089,<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&#8220;lat&#8221;: 41.7786793,<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&#8220;lon&#8221;: -87.9756891,<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&#8220;tags&#8221;: {<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&nbsp;&nbsp;&#8220;amenity&#8221;: &#8220;restaurant&#8221;,<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&nbsp;&nbsp;&#8220;cuisine&#8221;: &#8220;mexican&#8221;,<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;&nbsp;&nbsp;&#8220;name&#8221;: &#8220;Marmelly&#8221;<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;&nbsp;}<\/p>\n\n\n\n<p class=\"has-medium-font-size\">},<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"188\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-19-1024x188.png\" alt=\"\" class=\"wp-image-6629\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-19-1024x188.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-19-300x55.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-19-768x141.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-19-1536x281.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-19.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">And we need the list of places inside this responseDict against the key: \u201celements\u201d. Spelling is very important when getting data from dictionaries. We will put all places inside a local list of placesData.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"301\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-20-1024x301.png\" alt=\"\" class=\"wp-image-6630\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-20-1024x301.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-20-300x88.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-20-768x226.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-20-1536x452.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-20.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Next, we are going to reset our global places names and map\u2019s features. This is to remove existing markers from the map. We also call the goHome procedure, as we want to get the map back to the original state with a green marker for our home.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"375\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-21-1024x375.png\" alt=\"\" class=\"wp-image-6631\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-21-1024x375.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-21-300x110.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-21-768x281.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-21-1536x563.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-21.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Now comes the main part of creating markers on our map. We go through each item in our placesData, the local list containing all the places. We make a local variable name for containing the name of our place, which is basically inside our dictionary against the key \u201ctags\u201d and within this dictionary, a value against the key \u201cname\u201d. We add the local variable name to our placesNames list. Then, we get the latitude and longitude. Create a marker at that point. Set its properties. And then, add the marker to the markers list. Outside the for loop, we set the map\u2019s features to this markers list.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1003\" height=\"1024\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-22-1003x1024.png\" alt=\"\" class=\"wp-image-6632\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-22-1003x1024.png 1003w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-22-294x300.png 294w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-22-768x784.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-22-1504x1536.png 1504w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-22.png 1567w\" sizes=\"auto, (max-width: 1003px) 100vw, 1003px\" \/><\/figure>\n\n\n\n<p>Since we have so many markers, here, any component blocks are super helpful in coding. We get the any Marker click event. We check that the marker\u2019s title isn\u2019t Home. And then, we store this marker in the global clickedMarker variable. And we show a dialog user Notifier\u2019s ShowChooseDialog asking whether the user wants to open Google Maps to show directions.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"494\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-23-1024x494.png\" alt=\"\" class=\"wp-image-6633\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-23-1024x494.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-23-300x145.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-23-768x370.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-23.png 1448w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">When the user chooses something on the dialog: yes or no button, Notifier\u2019s After Choosing event is triggered. If their choice is yes, we will open up Google Maps using the activity starter; otherwise, we will dismiss the dialog.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">The way to set the activity starter is as follows:<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Action = android.intent.action.VIEW<\/p>\n\n\n\n<p class=\"has-medium-font-size\">DataUri is a join of<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><a href=\"https:\/\/www.google.com\/maps\/search\/?api=1&amp;query=\" target=\"_blank\" rel=\"noopener\">https:\/\/www.google.com\/maps\/search\/?api=1&amp;query=<\/a><\/li>\n\n\n\n<li class=\"has-medium-font-size\">The clicked marker\u2019s latitude<\/li>\n\n\n\n<li class=\"has-medium-font-size\">,<\/li>\n\n\n\n<li class=\"has-medium-font-size\">The clicked marker\u2019s longitude<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"434\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-24-1024x434.png\" alt=\"\" class=\"wp-image-6634\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-24-1024x434.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-24-300x127.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-24-768x325.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-24-1536x651.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/09\/image-24.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">So, our app is done, in which we have marked our own location. We can look at different types of amenities within 2 km of our own location. I hoped you liked this tutorial.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">You can also get the AIA project file<\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong><a href=\"https:\/\/obsidiansoft.gumroad.com\/l\/ehpsw\" target=\"_blank\" rel=\"noopener\">Place Finder AIA File<\/a><\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size\">You can also have a look at the video tutorial here:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<p class=\"responsive-video-wrap clr\"><iframe loading=\"lazy\" title=\"Place Finder App in MIT App Inventor | Maps &amp; OpenStreetMap Tutorial\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/zcHoKdufSBA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<\/div><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Please like my videos and share it with your friends and family. Also, subscribe to my channel and press the bell icon so you don\u2019t miss any of the great projects I have planned for you.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><a href=\"https:\/\/www.youtube.com\/c\/obsidiansofteducation\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/c\/obsidiansofteducation<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\">Please like my Facebook page and Instagram page for more educational resources and tips.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Facebook:<\/strong><a href=\"https:\/\/www.blogger.com\/blog\/page\/edit\/4947000819484484884\/7140650632339107612#\" target=\"_blank\" rel=\"noopener\">&nbsp;https:\/\/www.facebook.com\/ObsidianSoft\/<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Instagram:<\/strong><a href=\"https:\/\/www.blogger.com\/blog\/page\/edit\/4947000819484484884\/7140650632339107612#\" target=\"_blank\" rel=\"noopener\">&nbsp;https:\/\/www.instagram.com\/obsidiansoftapps\/<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Pinterest:<\/strong>&nbsp;<a href=\"https:\/\/www.pinterest.com\/obsidiansoft\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.pinterest.com\/obsidiansoft\/<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\">For links to free educational&nbsp;<a href=\"https:\/\/obsidiansofteducation.com\/index.php\/flappy-bird-game-mit-app-inventor\/#\">&nbsp;apps<\/a>, have a look at the&nbsp;<a href=\"https:\/\/obsidiansofteducation.com\/index.php\/mobile-apps\/\">educational apps page<\/a><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello friends, and welcome to Obsidian Soft In today\u2019s tutorial, I will teach you how to use the maps component in MIT App Inventor. We will build a place finder app. So, let\u2019s begin: Open up MIT App Inventor and start a new project. Name it placeFinderApp and keep the toolkit default. This is very [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-6622","page","type-page","status-publish","hentry","entry"],"_links":{"self":[{"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/pages\/6622","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/comments?post=6622"}],"version-history":[{"count":4,"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/pages\/6622\/revisions"}],"predecessor-version":[{"id":6820,"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/pages\/6622\/revisions\/6820"}],"wp:attachment":[{"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/media?parent=6622"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}