SlideShare ist ein Scribd-Unternehmen logo
1 von 46
Downloaden Sie, um offline zu lesen
UX Considerations for Mapping Apps
on Touch Devices

“Touch-friendly mapping apps”



Allan Laframboise
Frank Garofalo



                           #uxmaptouchapp #esriuc #mapux #gisux
So you’ve got a web mapping app…




                        #uxmaptouchapp #esriuc #mapux #gisux
So you’ve got a web mapping app…
             …is it usable on a touch device?




                         #uxmaptouchapp #esriuc #mapux #gisux
#uxmaptouchapp #esriuc #mapux #gisux
Why?




       #uxmaptouchapp #esriuc #mapux #gisux
Time                     Design
       Cost


              Knowledge


Standards

        Technical Limitations


                   #uxmaptouchapp #esriuc #mapux #gisux
it’s a jungle out there!




                           #uxmaptouchapp #esriuc #mapux #gisux
it’s a jungle out there!




                                               Touch


                           #uxmaptouchapp #esriuc #mapux #gisux
touch = mouseless




             #uxmaptouchapp #esriuc #mapux #gisux
Device challenges

 Viewports

 Interaction

 Processors/speed

 Connectivity




                    #uxmaptouchapp #esriuc #mapux #gisux
Viewports - Resolution/Orientation

 1024, 768,480,320

 Rotation, orientation

 UX
   •   Handling physical device
   •   Large screen size = small buttons (OK!)
   •   Small screen size = big buttons (challenge!)
   •   Glare, fingerprints…



                                       #uxmaptouchapp #esriuc #mapux #gisux
Interaction - Keyboard vs mouse vs touch

 •   Physical differences… / Input

 •   Form factor

 •   UX
     •   Click vs tap vs voice
     •   Mouse cursor vs direct interaction (finger)
     •   Keyboard shortcuts vs gestures
     •   Right-click, mouse over (don’t exist)



                                        #uxmaptouchapp #esriuc #mapux #gisux
Processor Speed & Connectivity

 -   Connected & Disconnected

 -   Wifi vs mobile

 -   UX
     -   user feedback one when connection status
     -   too slow due to connection speed
     -   out of memory/memory limitations




                                      #uxmaptouchapp #esriuc #mapux #gisux
Mapping dev challenges

 Mouse vs touch events

 Mouse vs touch vs mapping events

 Usability




                            #uxmaptouchapp #esriuc #mapux #gisux
So where do I start?




               #uxmaptouchapp #esriuc #mapux #gisux
Think mobile first




              #uxmaptouchapp #esriuc #mapux #gisux
Think relevance




            #uxmaptouchapp #esriuc #mapux #gisux
Think simple




          #uxmaptouchapp #esriuc #mapux #gisux
Think reusable (content)




                #uxmaptouchapp #esriuc #mapux #gisux
Think “responsive”




             #uxmaptouchapp #esriuc #mapux #gisux
Your app running everywhere…




                        #uxmaptouchapp #esriuc #mapux #gisux
Plan/design for each device
What is most relevant?




                              #uxmaptouchapp #esriuc #mapux #gisux
Mock-up first (mobile, tablet & desktop)




                           #uxmaptouchapp #esriuc #mapux #gisux
Use case: Javascript Dev Starter App

     Web app


     Touch


     Responsive


     Good UX




                              #uxmaptouchapp #esriuc #mapux #gisux
Dev solutions, thinking responsive...

  Touch

  Fluid layout (960 grid)

  Media Queries – screen, print, handheld

  Smart css




                              #uxmaptouchapp #esriuc #mapux #gisux
Touch

 Minimum “press-able” area 36px x 36px

 Keep “press-able” elements away from edges

 No right-click & hover / mouse-over for touch

 Avoid the "double tap"

 Gestures should be used as shortcuts


                             #uxmaptouchapp #esriuc #mapux #gisux
Fluid Explained…

 Percentage based widths

 960 grid system (www.960.gs)


                            grid_16



          grid_5                      grid_11



                   grid_8                   grid_8



                                      #uxmaptouchapp #esriuc #mapux #gisux
Media Query

   @media
     @media all and ( min-width : 768px ) and ( max-width : 1024px ) and
         ( orientation : portrait ) { … }                                /* Tablet - Portrait */


     @media all and ( min-width: 768px ) and ( max-width : 1024px ) and
         (max-height : 768px) and ( orientation : landscape ) { … }         /* Tablet - Landscape */


     @media all and ( min-width: 321px ) and ( max-width: 480px ) { … }     /* Smartphone - Landscape */


     @media all and ( max-width: 320px ) { … }                              /* Smartphone - Portrait */


     @media all and ( min-width: 800px ) and ( min-height: 800px ) and
         ( max-width: 1279px ) { … }                                        /* Desktop */


     @media all and ( min-width : 1280px ) { … }                            /* Desktop - Wide Screen */


Resource: http://css-tricks.com/snippets/css/media-queries-for-standard-devices/

                                                                  #uxmaptouchapp #esriuc #mapux #gisux
Smart CSS
    <body class = “ … ” >

    “ui_iOS ui_iOS_iPhone”      “ui_Android ui_AndroidPhone”      “ui_Win ui_Win7_Phone”




Same HTML with different CSS applied

                                                       #uxmaptouchapp #esriuc #mapux #gisux
Mobile browser challenges…




Tool bars take up space too!



                               #uxmaptouchapp #esriuc #mapux #gisux
Touch-friendly dev




             #uxmaptouchapp #esriuc #mapux #gisux
ArcGIS Javascript Compact


<script
type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.0compact">
</script




                                                       #uxmaptouchapp #esriuc #mapux #gisux
Viewport and orientation

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0,
     user-scalable=no"/>
…

"autoResize": function ( window ) {
  var supportsOrientationChange = "onorientationchange" in window,
       orientationEvent = supportsOrientationChange ? "orientationchange" : "resize";

     function orientationChanged( map ) {
       if (map) {
           map.resize();
           map.reposition();
       }
     }

     // Attach
     if ( window.addEventListener )
         window.addEventListener( orientationEvent, function () { orientationChanged(map); }, false );
},




                                                                #uxmaptouchapp #esriuc #mapux #gisux
Device detection
var mobileDevice = {
  Android: function () {
     return navigator.userAgent.match(/Android/i) ? true : false;
  },
  BlackBerry: function () {
     return navigator.userAgent.match(/BlackBerry/i) ? true : false;
  },
  iPhone: function () {
     return navigator.userAgent.match(/iPhone|iPod/i) ? true : false;
  },
  iPad: function () {
     return navigator.userAgent.match(/iPad/i) ? true : false;
  },
  Windows: function () {
     return navigator.userAgent.match(/IEMobile/i) ? true : false;
  },
  any: function () {
     return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iPhone() || isMobile.iPad()
              || isMobile.Windows());
  }




                                                               #uxmaptouchapp #esriuc #mapux #gisux
Events: onclick vs ontouchstart

 <button id="addPoint" class="buttonControls" onclick="setActiveTool(this);"
 ontouchstart ="setActiveTool(this);"><span class="buttonLabel">Add Point</span></button>

 <button id="addLine" class="buttonControls" onclick="setActiveTool(this);"
 ontouchstart ="setActiveTool(this);"><span class="buttonLabel">Add Point</span></button>

 <button id="addPolygon" class="buttonControls" onclick="setActiveTool(this);"
 ontouchstart ="setActiveTool(this);"><span class="buttonLabel">Add Point</span></button>

 <button id="clearGraphics" class="buttonControls" onclick="setActiveTool(this);"
 ontouchstart ="setActiveTool(null);"><span class="buttonLabel">Add Point</span></button>




                   onmousedown + onclick = ontouchstart

                   ontouchstart != onmousedown || onclick



                                                         #uxmaptouchapp #esriuc #mapux #gisux
Events: No onmouseover (hover)

<div id="containerMenu" class="">

         <div id="basemaps" class="buttonNav selected" onmouseover="setActiveModule( this, true );"
                ontouchstart="setActiveModule( this, true );"><p>Basemaps</p></div>

         <div id="geolocation" class="buttonNav" onmouseover="setActiveModule( this, true );"
                ontouchstart ="setActiveModule( this, true );"><p>Geolocation</p></div>

         <div id="graphics" class="buttonNav" onmouseover="setActiveModule( this, true );"
                ontouchstart ="setActiveModule( this, false );"><p>Add Graphics</p></div>

         <div id="findAddress" class="buttonNav" onmouseover="setActiveModule( this, true );"
                ontouchstart ="setActiveModule( this, true );"><p>Find Place</p></div>
         …

</div>




                                                            #uxmaptouchapp #esriuc #mapux #gisux
Events: No doubleclick
function addGraphicCallback( evt ) {

      var pt = evt.mapPoint;
      clearAddGraphics( false );

      var finished = ( evt.type == "dblclick" || evt.type == "touchend“ );

      switch ( activeToolId )
      {
            case 'addPoint':
               addPoint( pt, finished );
               break;
            case 'addLine':
               addLine( pt, finished );
               break;
            case 'addPolygon':
               addPolygon( pt, finished );
               break;
            default:
      }
}



                                                              #uxmaptouchapp #esriuc #mapux #gisux
Locking map navigation

function setActiveTool ( ctrl, active) {
   lockMapNavigation( active );
   …
}

function lockMapNavigation( lock ) {

     if ( lock ) {
         map.disableDoubleClickZoom();
         map.disableClickRecenter();
         map.disablePan();
     } else {
         map.enableDoubleClickZoom();
         map.enableClickRecenter();
         map.enablePan();
     }

 }




                                           #uxmaptouchapp #esriuc #mapux #gisux
Final UX thoughts
Toggle - turn tools on and off (expected)

Guide your user
   - “just-in-time-assistance” (user message)

Give them a way to “back-out”




                                   #uxmaptouchapp #esriuc #mapux #gisux
Remember the “Javascript Dev Starter App”?




                             #uxmaptouchapp #esriuc #mapux #gisux
Grand Finale




http://edn1.esri.com/starterapp/



                          #uxmaptouchapp #esriuc #mapux #gisux
In the end…


              Design for devices

               Design for touch

              Design for the user!



               There are challenges!



                                 #uxmaptouchapp #esriuc #mapux #gisux
Questions?

Allan Laframboise        Frank Garofalo
.NET Technical Lead,     UI / Human Factors Engineer,
Esri Developer Network   Esri Professional Services

@Al_Laframboise          @fgarofalo




                           #uxmaptouchapp #esriuc #mapux #gisux
Questions?

Allan Laframboise                Frank Garofalo
.NET Technical Lead,             UI / Human Factors Engineer,
Esri Developer Network           Esri Professional Services

@Al_Laframboise                  @fgarofalo



         http://edn1.esri.com/starterapp/



                                   #uxmaptouchapp #esriuc #mapux #gisux
UX Considerations for Touch Mapping Apps

Weitere ähnliche Inhalte

Andere mochten auch

Application devevelopment with open source libraries
Application devevelopment with open source librariesApplication devevelopment with open source libraries
Application devevelopment with open source librariesAllan Laframboise
 
Where are you with gis and geolocation
Where are you with gis and geolocationWhere are you with gis and geolocation
Where are you with gis and geolocationAllan Laframboise
 
Building responsive web mobile mapping applications
Building responsive web mobile mapping applicationsBuilding responsive web mobile mapping applications
Building responsive web mobile mapping applicationsAllan Laframboise
 
THEME – 1 Geoinformatics and Genetic Resources under Changing Climate
THEME – 1 Geoinformatics and Genetic Resources under Changing ClimateTHEME – 1 Geoinformatics and Genetic Resources under Changing Climate
THEME – 1 Geoinformatics and Genetic Resources under Changing ClimateICARDA
 
Building a ArcGIS mobile, cloud, checkin app in 75 minutes - zero to hero
Building a ArcGIS mobile, cloud, checkin app in 75 minutes - zero to heroBuilding a ArcGIS mobile, cloud, checkin app in 75 minutes - zero to hero
Building a ArcGIS mobile, cloud, checkin app in 75 minutes - zero to heroAllan Laframboise
 

Andere mochten auch (6)

Application devevelopment with open source libraries
Application devevelopment with open source librariesApplication devevelopment with open source libraries
Application devevelopment with open source libraries
 
Where are you with gis and geolocation
Where are you with gis and geolocationWhere are you with gis and geolocation
Where are you with gis and geolocation
 
Building responsive web mobile mapping applications
Building responsive web mobile mapping applicationsBuilding responsive web mobile mapping applications
Building responsive web mobile mapping applications
 
Esri Map App Builders
Esri Map App BuildersEsri Map App Builders
Esri Map App Builders
 
THEME – 1 Geoinformatics and Genetic Resources under Changing Climate
THEME – 1 Geoinformatics and Genetic Resources under Changing ClimateTHEME – 1 Geoinformatics and Genetic Resources under Changing Climate
THEME – 1 Geoinformatics and Genetic Resources under Changing Climate
 
Building a ArcGIS mobile, cloud, checkin app in 75 minutes - zero to hero
Building a ArcGIS mobile, cloud, checkin app in 75 minutes - zero to heroBuilding a ArcGIS mobile, cloud, checkin app in 75 minutes - zero to hero
Building a ArcGIS mobile, cloud, checkin app in 75 minutes - zero to hero
 

Ă„hnlich wie UX Considerations for Touch Mapping Apps

2013 URISA Track, Kickstarter for JavaScript Web and Mobile GIS Development b...
2013 URISA Track, Kickstarter for JavaScript Web and Mobile GIS Development b...2013 URISA Track, Kickstarter for JavaScript Web and Mobile GIS Development b...
2013 URISA Track, Kickstarter for JavaScript Web and Mobile GIS Development b...GIS in the Rockies
 
@Ionic native/google-maps
@Ionic native/google-maps@Ionic native/google-maps
@Ionic native/google-mapsMasashi Katsumata
 
Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....
Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....
Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....Patrick Lauke
 
3 Approaches to Mobile - An A to Z Primer.
3 Approaches to Mobile - An A to Z Primer.3 Approaches to Mobile - An A to Z Primer.
3 Approaches to Mobile - An A to Z Primer.agup2009
 
KODE JS POKENNNNN
KODE JS POKENNNNNKODE JS POKENNNNN
KODE JS POKENNNNNPipo Atem
 
Mobile HTML, CSS, and JavaScript
Mobile HTML, CSS, and JavaScriptMobile HTML, CSS, and JavaScript
Mobile HTML, CSS, and JavaScriptfranksvalli
 
WebGL, HTML5 and How the Mobile Web Was Won
WebGL, HTML5 and How the Mobile Web Was WonWebGL, HTML5 and How the Mobile Web Was Won
WebGL, HTML5 and How the Mobile Web Was WonTony Parisi
 
Building mobile apps with the ArcGIS api for Javascript, Esri, Andy Gup and A...
Building mobile apps with the ArcGIS api for Javascript, Esri, Andy Gup and A...Building mobile apps with the ArcGIS api for Javascript, Esri, Andy Gup and A...
Building mobile apps with the ArcGIS api for Javascript, Esri, Andy Gup and A...Esri Nederland
 
mobl
moblmobl
moblzefhemel
 
EP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
EP2016 - Moving Away From Nodejs To A Pure Python Solution For AssetsEP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
EP2016 - Moving Away From Nodejs To A Pure Python Solution For AssetsAlessandro Molina
 
A More Flash Like Web?
A More Flash Like Web?A More Flash Like Web?
A More Flash Like Web?Murat Can ALPAY
 
FINHTML5 - Breaking the mobile web
FINHTML5 - Breaking the mobile webFINHTML5 - Breaking the mobile web
FINHTML5 - Breaking the mobile webMaximiliano Firtman
 
Leaving Flatland: getting started with WebGL
Leaving Flatland: getting started with WebGLLeaving Flatland: getting started with WebGL
Leaving Flatland: getting started with WebGLgerbille
 
Measuring Continuity
Measuring ContinuityMeasuring Continuity
Measuring ContinuityNicholas Jansma
 
HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?Ankara JUG
 
Sperimentazioni lezione6 from_designtoapplication copy
Sperimentazioni lezione6 from_designtoapplication copySperimentazioni lezione6 from_designtoapplication copy
Sperimentazioni lezione6 from_designtoapplication copySalvatore Iaconesi
 

Ă„hnlich wie UX Considerations for Touch Mapping Apps (20)

2013 URISA Track, Kickstarter for JavaScript Web and Mobile GIS Development b...
2013 URISA Track, Kickstarter for JavaScript Web and Mobile GIS Development b...2013 URISA Track, Kickstarter for JavaScript Web and Mobile GIS Development b...
2013 URISA Track, Kickstarter for JavaScript Web and Mobile GIS Development b...
 
@Ionic native/google-maps
@Ionic native/google-maps@Ionic native/google-maps
@Ionic native/google-maps
 
Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....
Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....
Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....
 
3 Approaches to Mobile - An A to Z Primer.
3 Approaches to Mobile - An A to Z Primer.3 Approaches to Mobile - An A to Z Primer.
3 Approaches to Mobile - An A to Z Primer.
 
KODE JS POKENNNNN
KODE JS POKENNNNNKODE JS POKENNNNN
KODE JS POKENNNNN
 
Gup web mobilegis
Gup web mobilegisGup web mobilegis
Gup web mobilegis
 
Android 3
Android 3Android 3
Android 3
 
Mobile HTML, CSS, and JavaScript
Mobile HTML, CSS, and JavaScriptMobile HTML, CSS, and JavaScript
Mobile HTML, CSS, and JavaScript
 
WebGL, HTML5 and How the Mobile Web Was Won
WebGL, HTML5 and How the Mobile Web Was WonWebGL, HTML5 and How the Mobile Web Was Won
WebGL, HTML5 and How the Mobile Web Was Won
 
Building mobile apps with the ArcGIS api for Javascript, Esri, Andy Gup and A...
Building mobile apps with the ArcGIS api for Javascript, Esri, Andy Gup and A...Building mobile apps with the ArcGIS api for Javascript, Esri, Andy Gup and A...
Building mobile apps with the ArcGIS api for Javascript, Esri, Andy Gup and A...
 
JQuery Flot
JQuery FlotJQuery Flot
JQuery Flot
 
mobl
moblmobl
mobl
 
Location Based Services Without the Cocoa
Location Based Services Without the CocoaLocation Based Services Without the Cocoa
Location Based Services Without the Cocoa
 
EP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
EP2016 - Moving Away From Nodejs To A Pure Python Solution For AssetsEP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
EP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
 
A More Flash Like Web?
A More Flash Like Web?A More Flash Like Web?
A More Flash Like Web?
 
FINHTML5 - Breaking the mobile web
FINHTML5 - Breaking the mobile webFINHTML5 - Breaking the mobile web
FINHTML5 - Breaking the mobile web
 
Leaving Flatland: getting started with WebGL
Leaving Flatland: getting started with WebGLLeaving Flatland: getting started with WebGL
Leaving Flatland: getting started with WebGL
 
Measuring Continuity
Measuring ContinuityMeasuring Continuity
Measuring Continuity
 
HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?
 
Sperimentazioni lezione6 from_designtoapplication copy
Sperimentazioni lezione6 from_designtoapplication copySperimentazioni lezione6 from_designtoapplication copy
Sperimentazioni lezione6 from_designtoapplication copy
 

Mehr von Allan Laframboise

Nutrition and Race Planning for Mountain Bikers
Nutrition and Race Planning for Mountain BikersNutrition and Race Planning for Mountain Bikers
Nutrition and Race Planning for Mountain BikersAllan Laframboise
 
Building ArcGIS Mobile Solutions in the Cloud
Building ArcGIS Mobile Solutions in the CloudBuilding ArcGIS Mobile Solutions in the Cloud
Building ArcGIS Mobile Solutions in the CloudAllan Laframboise
 
Navteq Developer Days - ArcGIS + POI
Navteq Developer Days - ArcGIS + POINavteq Developer Days - ArcGIS + POI
Navteq Developer Days - ArcGIS + POIAllan Laframboise
 
Geo services, social media and gis applications - Live on Everest
Geo services, social media and gis applications - Live on EverestGeo services, social media and gis applications - Live on Everest
Geo services, social media and gis applications - Live on EverestAllan Laframboise
 
Gis & Social Media Integration
Gis & Social Media IntegrationGis & Social Media Integration
Gis & Social Media IntegrationAllan Laframboise
 
Social #WebApps - Ideas for developing GIS applications that are socially a ”...
Social #WebApps - Ideas for developing GIS applications that are socially a ”...Social #WebApps - Ideas for developing GIS applications that are socially a ”...
Social #WebApps - Ideas for developing GIS applications that are socially a ”...Allan Laframboise
 
GeoWeb Community Development: How Web 2.0 are you?
GeoWeb Community Development: How Web 2.0 are you?GeoWeb Community Development: How Web 2.0 are you?
GeoWeb Community Development: How Web 2.0 are you?Allan Laframboise
 

Mehr von Allan Laframboise (9)

Nutrition and Race Planning for Mountain Bikers
Nutrition and Race Planning for Mountain BikersNutrition and Race Planning for Mountain Bikers
Nutrition and Race Planning for Mountain Bikers
 
Building ArcGIS Mobile Solutions in the Cloud
Building ArcGIS Mobile Solutions in the CloudBuilding ArcGIS Mobile Solutions in the Cloud
Building ArcGIS Mobile Solutions in the Cloud
 
Live on everest
Live on everestLive on everest
Live on everest
 
Navteq Developer Days - ArcGIS + POI
Navteq Developer Days - ArcGIS + POINavteq Developer Days - ArcGIS + POI
Navteq Developer Days - ArcGIS + POI
 
Geo services, social media and gis applications - Live on Everest
Geo services, social media and gis applications - Live on EverestGeo services, social media and gis applications - Live on Everest
Geo services, social media and gis applications - Live on Everest
 
Gis & Social Media Integration
Gis & Social Media IntegrationGis & Social Media Integration
Gis & Social Media Integration
 
Social #WebApps - Ideas for developing GIS applications that are socially a ”...
Social #WebApps - Ideas for developing GIS applications that are socially a ”...Social #WebApps - Ideas for developing GIS applications that are socially a ”...
Social #WebApps - Ideas for developing GIS applications that are socially a ”...
 
What Is GIS?
What Is GIS?What Is GIS?
What Is GIS?
 
GeoWeb Community Development: How Web 2.0 are you?
GeoWeb Community Development: How Web 2.0 are you?GeoWeb Community Development: How Web 2.0 are you?
GeoWeb Community Development: How Web 2.0 are you?
 

KĂĽrzlich hochgeladen

Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
WhatsApp 9892124323 âś“Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 âś“Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 âś“Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 âś“Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 

KĂĽrzlich hochgeladen (20)

Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
WhatsApp 9892124323 âś“Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 âś“Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 âś“Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 âś“Call Girls In Kalyan ( Mumbai ) secure service
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 

UX Considerations for Touch Mapping Apps

  • 1. UX Considerations for Mapping Apps on Touch Devices “Touch-friendly mapping apps” Allan Laframboise Frank Garofalo #uxmaptouchapp #esriuc #mapux #gisux
  • 2. So you’ve got a web mapping app… #uxmaptouchapp #esriuc #mapux #gisux
  • 3. So you’ve got a web mapping app… …is it usable on a touch device? #uxmaptouchapp #esriuc #mapux #gisux
  • 5.
  • 6. Why? #uxmaptouchapp #esriuc #mapux #gisux
  • 7. Time Design Cost Knowledge Standards Technical Limitations #uxmaptouchapp #esriuc #mapux #gisux
  • 8. it’s a jungle out there! #uxmaptouchapp #esriuc #mapux #gisux
  • 9. it’s a jungle out there! Touch #uxmaptouchapp #esriuc #mapux #gisux
  • 10. touch = mouseless #uxmaptouchapp #esriuc #mapux #gisux
  • 11. Device challenges Viewports Interaction Processors/speed Connectivity #uxmaptouchapp #esriuc #mapux #gisux
  • 12. Viewports - Resolution/Orientation 1024, 768,480,320 Rotation, orientation UX • Handling physical device • Large screen size = small buttons (OK!) • Small screen size = big buttons (challenge!) • Glare, fingerprints… #uxmaptouchapp #esriuc #mapux #gisux
  • 13. Interaction - Keyboard vs mouse vs touch • Physical differences… / Input • Form factor • UX • Click vs tap vs voice • Mouse cursor vs direct interaction (finger) • Keyboard shortcuts vs gestures • Right-click, mouse over (don’t exist) #uxmaptouchapp #esriuc #mapux #gisux
  • 14. Processor Speed & Connectivity - Connected & Disconnected - Wifi vs mobile - UX - user feedback one when connection status - too slow due to connection speed - out of memory/memory limitations #uxmaptouchapp #esriuc #mapux #gisux
  • 15. Mapping dev challenges Mouse vs touch events Mouse vs touch vs mapping events Usability #uxmaptouchapp #esriuc #mapux #gisux
  • 16. So where do I start? #uxmaptouchapp #esriuc #mapux #gisux
  • 17. Think mobile first #uxmaptouchapp #esriuc #mapux #gisux
  • 18. Think relevance #uxmaptouchapp #esriuc #mapux #gisux
  • 19. Think simple #uxmaptouchapp #esriuc #mapux #gisux
  • 20. Think reusable (content) #uxmaptouchapp #esriuc #mapux #gisux
  • 21. Think “responsive” #uxmaptouchapp #esriuc #mapux #gisux
  • 22. Your app running everywhere… #uxmaptouchapp #esriuc #mapux #gisux
  • 23. Plan/design for each device What is most relevant? #uxmaptouchapp #esriuc #mapux #gisux
  • 24. Mock-up first (mobile, tablet & desktop) #uxmaptouchapp #esriuc #mapux #gisux
  • 25. Use case: Javascript Dev Starter App  Web app  Touch  Responsive  Good UX #uxmaptouchapp #esriuc #mapux #gisux
  • 26. Dev solutions, thinking responsive... Touch Fluid layout (960 grid) Media Queries – screen, print, handheld Smart css #uxmaptouchapp #esriuc #mapux #gisux
  • 27. Touch Minimum “press-able” area 36px x 36px Keep “press-able” elements away from edges No right-click & hover / mouse-over for touch Avoid the "double tap" Gestures should be used as shortcuts #uxmaptouchapp #esriuc #mapux #gisux
  • 28. Fluid Explained… Percentage based widths 960 grid system (www.960.gs) grid_16 grid_5 grid_11 grid_8 grid_8 #uxmaptouchapp #esriuc #mapux #gisux
  • 29. Media Query @media @media all and ( min-width : 768px ) and ( max-width : 1024px ) and ( orientation : portrait ) { … } /* Tablet - Portrait */ @media all and ( min-width: 768px ) and ( max-width : 1024px ) and (max-height : 768px) and ( orientation : landscape ) { … } /* Tablet - Landscape */ @media all and ( min-width: 321px ) and ( max-width: 480px ) { … } /* Smartphone - Landscape */ @media all and ( max-width: 320px ) { … } /* Smartphone - Portrait */ @media all and ( min-width: 800px ) and ( min-height: 800px ) and ( max-width: 1279px ) { … } /* Desktop */ @media all and ( min-width : 1280px ) { … } /* Desktop - Wide Screen */ Resource: http://css-tricks.com/snippets/css/media-queries-for-standard-devices/ #uxmaptouchapp #esriuc #mapux #gisux
  • 30. Smart CSS <body class = “ … ” > “ui_iOS ui_iOS_iPhone” “ui_Android ui_AndroidPhone” “ui_Win ui_Win7_Phone” Same HTML with different CSS applied #uxmaptouchapp #esriuc #mapux #gisux
  • 31. Mobile browser challenges… Tool bars take up space too! #uxmaptouchapp #esriuc #mapux #gisux
  • 32. Touch-friendly dev #uxmaptouchapp #esriuc #mapux #gisux
  • 33. ArcGIS Javascript Compact <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.0compact"> </script #uxmaptouchapp #esriuc #mapux #gisux
  • 34. Viewport and orientation <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/> … "autoResize": function ( window ) { var supportsOrientationChange = "onorientationchange" in window, orientationEvent = supportsOrientationChange ? "orientationchange" : "resize"; function orientationChanged( map ) { if (map) { map.resize(); map.reposition(); } } // Attach if ( window.addEventListener ) window.addEventListener( orientationEvent, function () { orientationChanged(map); }, false ); }, #uxmaptouchapp #esriuc #mapux #gisux
  • 35. Device detection var mobileDevice = { Android: function () { return navigator.userAgent.match(/Android/i) ? true : false; }, BlackBerry: function () { return navigator.userAgent.match(/BlackBerry/i) ? true : false; }, iPhone: function () { return navigator.userAgent.match(/iPhone|iPod/i) ? true : false; }, iPad: function () { return navigator.userAgent.match(/iPad/i) ? true : false; }, Windows: function () { return navigator.userAgent.match(/IEMobile/i) ? true : false; }, any: function () { return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iPhone() || isMobile.iPad() || isMobile.Windows()); } #uxmaptouchapp #esriuc #mapux #gisux
  • 36. Events: onclick vs ontouchstart <button id="addPoint" class="buttonControls" onclick="setActiveTool(this);" ontouchstart ="setActiveTool(this);"><span class="buttonLabel">Add Point</span></button> <button id="addLine" class="buttonControls" onclick="setActiveTool(this);" ontouchstart ="setActiveTool(this);"><span class="buttonLabel">Add Point</span></button> <button id="addPolygon" class="buttonControls" onclick="setActiveTool(this);" ontouchstart ="setActiveTool(this);"><span class="buttonLabel">Add Point</span></button> <button id="clearGraphics" class="buttonControls" onclick="setActiveTool(this);" ontouchstart ="setActiveTool(null);"><span class="buttonLabel">Add Point</span></button> onmousedown + onclick = ontouchstart ontouchstart != onmousedown || onclick #uxmaptouchapp #esriuc #mapux #gisux
  • 37. Events: No onmouseover (hover) <div id="containerMenu" class=""> <div id="basemaps" class="buttonNav selected" onmouseover="setActiveModule( this, true );" ontouchstart="setActiveModule( this, true );"><p>Basemaps</p></div> <div id="geolocation" class="buttonNav" onmouseover="setActiveModule( this, true );" ontouchstart ="setActiveModule( this, true );"><p>Geolocation</p></div> <div id="graphics" class="buttonNav" onmouseover="setActiveModule( this, true );" ontouchstart ="setActiveModule( this, false );"><p>Add Graphics</p></div> <div id="findAddress" class="buttonNav" onmouseover="setActiveModule( this, true );" ontouchstart ="setActiveModule( this, true );"><p>Find Place</p></div> … </div> #uxmaptouchapp #esriuc #mapux #gisux
  • 38. Events: No doubleclick function addGraphicCallback( evt ) { var pt = evt.mapPoint; clearAddGraphics( false ); var finished = ( evt.type == "dblclick" || evt.type == "touchend“ ); switch ( activeToolId ) { case 'addPoint': addPoint( pt, finished ); break; case 'addLine': addLine( pt, finished ); break; case 'addPolygon': addPolygon( pt, finished ); break; default: } } #uxmaptouchapp #esriuc #mapux #gisux
  • 39. Locking map navigation function setActiveTool ( ctrl, active) { lockMapNavigation( active ); … } function lockMapNavigation( lock ) { if ( lock ) { map.disableDoubleClickZoom(); map.disableClickRecenter(); map.disablePan(); } else { map.enableDoubleClickZoom(); map.enableClickRecenter(); map.enablePan(); } } #uxmaptouchapp #esriuc #mapux #gisux
  • 40. Final UX thoughts Toggle - turn tools on and off (expected) Guide your user - “just-in-time-assistance” (user message) Give them a way to “back-out” #uxmaptouchapp #esriuc #mapux #gisux
  • 41. Remember the “Javascript Dev Starter App”? #uxmaptouchapp #esriuc #mapux #gisux
  • 42. Grand Finale http://edn1.esri.com/starterapp/ #uxmaptouchapp #esriuc #mapux #gisux
  • 43. In the end… Design for devices Design for touch Design for the user! There are challenges! #uxmaptouchapp #esriuc #mapux #gisux
  • 44. Questions? Allan Laframboise Frank Garofalo .NET Technical Lead, UI / Human Factors Engineer, Esri Developer Network Esri Professional Services @Al_Laframboise @fgarofalo #uxmaptouchapp #esriuc #mapux #gisux
  • 45. Questions? Allan Laframboise Frank Garofalo .NET Technical Lead, UI / Human Factors Engineer, Esri Developer Network Esri Professional Services @Al_Laframboise @fgarofalo http://edn1.esri.com/starterapp/ #uxmaptouchapp #esriuc #mapux #gisux