[Android] 화면 터치 중 Swiping을 이용한 View 전환

화면 터치가 가능한 모바일 단말기에서 터치를 통한 UI의 조작은 매우 효과적입니다. 이러한 터치 기반의 UI의 활용에 대해 자연스러운 사용은 사용자에게 프로그램의 친밀도를 높여줍니다. 화면 터치에 대한 조작 중 Swiping은 사용자가 화면을 스치듯이 상하좌우로 쓸어넘기는 행위입니다. 이러한 Swiping 중 좌우에 대한 이벤트를 처리하기 위한 클래스는 다음과 같습니다.

package geoservice.nexgen

import android.content.Context
import android.view.GestureDetector
import android.view.MotionEvent
import android.view.View

abstract class OnSwipeTouchListener(context: Context?) : View.OnTouchListener {
    companion object {
        private const val SWIPE_DISTANCE_THRESHOLD = 100
        private const val SWIPE_VELOCITY_THRESHOLD = 100
    }

    private val gestureDetector: GestureDetector

    abstract fun onSwipeLeft()
    abstract fun onSwipeRight()

    override fun onTouch(v: View?, event: MotionEvent?): Boolean {
        return gestureDetector.onTouchEvent(event)
    }

    private inner class GestureListener : GestureDetector.SimpleOnGestureListener() {
        override fun onDown(e: MotionEvent): Boolean {
            return true
        }

        override fun onFling(e1: MotionEvent, e2: MotionEvent, velocityX: Float, velocityY: Float): Boolean {
            val distanceX = e2.x - e1.x
            val distanceY = e2.y - e1.y
            if (Math.abs(distanceX) > Math.abs(distanceY) 
                    && Math.abs(distanceX) > SWIPE_DISTANCE_THRESHOLD 
                    && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                if (distanceX > 0) onSwipeRight() else onSwipeLeft()
                return true
            }
            return false
        }
    }

    init {
        gestureDetector = GestureDetector(context, GestureListener())
    }
}

위 클래스를 실제 View에 적용하는 코드의 예는 다음과 같습니다.

llListScroll.setOnTouchListener(object: OnSwipeTouchListener(context) {
    override fun onSwipeLeft() { btnNext.performClick() }
    override fun onSwipeRight() { btnPrevious.performClick() }
})

실제 위의 코드는 모바일 기반의 GIS 솔루션인 Mobile NexGen에 반영된 코드인데요. 위의 코드와 연관된 기능에 대한 시연 영상은 아래와 같습니다.

NexGen의 GeoAI 기능, 영상판독

GeoAI는 공간정보과학(Geospatial Science; Spatial Data Science)과 인공지능(Artificial Intelligence)의 합성어이며, 공간 빅데이터(Spatial Big Data)로부터 유의미한 정보를 도출하기 위해 인공지능 기술(A.I.: Machine Learning, Deep Learning)과 고성능 컴퓨터를 활용하는 분야입니다. GeoAI에는 여러가지 기능이 있는데, NexGen에서 영상판독 GeoAI 기능을 아래의 동영상 시연으로 소개합니다.

NexGen에서 GeoAI 서비스를 실행하기 위한 개략적인 시스템 구성도는 다음과 같습니다.

NexGen은 GIS를 활용한 업무에 특화된 기능을 제공하는 솔루션으로 커스터마이징이 가능하도록 개발되었습니다. TTA 1등급 인증을 받은 GIS 미들웨어인 GeoService-Xr과 오픈소스인 클라이언트 지도 엔진인 FingerEyes-Xr을 사용하여 개발되었습니다. NexGen에 대한 더 많은 내용은 아래의 글을 참고하시기 바랍니다.

웹 GIS 솔루션, NexGen 소개

신경망 학습을 위해서는 학습 데이터가 필요한데, 학습 데이터 구축은 직접 개발한 레이블링 툴을 이용하였습니다. GIS에 특화된 학습 데이터를 빠르게 구축할 수 있으며, 신경망 학습을 위한 형식으로 Export할 수 있는 기능을 제공합니다. 보다 자세한 내용은 아래의 글을 참고하시기 바랍니다.

GeoAI Labeling Tool 소개

학습 데이터는 데모 수준으로 구축했으며, 구축 수는 건물은 약 만개, 비닐하우스는 약 오천개 정도 구축하여 학습했습니다. 매우 소량이며, 실제 업무에 사용하기 위한 영상판독을 위해서는 더욱 많은 학습 데이터를 구축해야 하며, 앞서 언급한 레이블링 툴을 이용하여 빠르고 정확한 학습 DB 구축이 가능합니다.

NexGen, 웹 GIS에서 로컬 데이터 파일 활용

웹기반의 GIS 시스템은 지도탐색, 주소검색, 길찾기 등과 같은 매우 편리한 기능을 제공하며 인터넷이 되는 환경이라면 쉽게 접근하여 사용할 수 있습니다. 그러나 보다 높은 수준의 GIS 기능을 원하는 전문 사용자나 특화된 업무를 GIS에 접목하고자 하는 사용자에게는 많이 부족합니다.

이러한 사용자들이 느끼는 웹 GIS 기능의 결핍은 웹 GIS 보다는 여전이 QGIS나 ArcGIS 등과 같은 Application 형태의 GIS 프로그램들을 선택하게 합니다. 하지만 웹 GIS는 Desktop GIS가 갖지 못하는 장점을 제공합니다. 설치 없이 URL을 통해 바로 접속해 사용할 수 있다는 편의성, 기본적으로 제공되는 완벽하고 아름다운 배경맵, 완벽한 주소검색과 길찾기 등의 기능은 사용자가 별도의 설정 없이 바로 사용할 수 있습니다.

반면 웹 GIS의 단점은 서버 측에서 제공하지 않은 데이터의 사용에 큰 제약이 존재합니다. 예를 들어서, 사용자가 자신만의 노하우가 반영된 의미있고 유용한 결과를 공간 데이터 파일로 제작했다면, 이 공간 데이터 파일을 웹 GIS의 배경지도에 중첩해 보고, 다양한 편의 기능에 적용하여 활용하고 싶은 경우가 있습니다. 이런 요구사항은 웹 GIS의 기능성에 비례하여 커집니다.

만약 사용자가 QGIS, ArcGIS 또는 공간 분석 툴을 이용해 생성한 공간 데이터 파일을 웹 GIS에서 완벽하게 활용할 수 있다면 앞서 언급한 사용자의 요구사항은 상당 부분 충족될 것입니다. 바로 웹 GIS 기반 시스템인 NexGen은 사용자가 자신의 로컬 PC에 저장된 공간 데이터 파일을 바로 활용할 수 있습니다.

아래는 사용자가 보유한 SHP 파일들을 NexGen의 배경지도 위에 중첩하고 그리기 심벌과 라벨 들을 설정하는 예를 시연하고 있습니다.

위의 예는 단순히 SHP 파일을 통한 지도 구성 정도의 데모이지만, SHP 파일을 활용할 수 있음으로 해서 SHP 파일이 제공하는 공간 데이터를 웹 GIS에서 제공하는 다른 기능과 융합하여 다양하게 활용될 수 있습니다.

덧붙여 아래의 글은 외부 파일로 CSV를 통한 통계지도를 저작하는 NexGen의 기능 소개입니다.

넥스젠(NexGen)의 통계지도 기능

넥스젠(NexGen)의 지오코딩(Geocoding) 기능

NexGen에서 제공하는 지오코딩 기능을 소개합니다. 지오코딩을 통해 주소를 좌표로 변환하여 원하는 심벌로 지도에 표시할 수 있는데요. 넥스젠에서는 지오코딩을 통해 변환된 공간 데이터는 기본적인 수치지도 레이어와 동일하게 라벨 등과 같은 모든 기능을 활용할 수 있습니다. 아래는 NexGen의 지오코딩 기능에 대한 소개 동영상입니다.

넥스젠의 지오코딩 기능은 사용이 심플하지만 그 어떤 GIS 프로그램에서 제공하는 지오코딩 보다 직관적이고 강력합니다. 넥스젠의 지오코딩은 이미 2014년부터 현재까지 매우 많은 분들이 사용하고 있는, Geocoder-Xr의 기반 서비스를 그대로 활용하고 있습니다.

주소 좌표 변환 툴, Geocoder-Xr

NexGen의 지오코딩은 항상 최신 주소 DB 사용할 수 있습니다. 최신 주소 DB를 통해 변환된 위치를 최신의 배경지도 위에 중첩할 수 있습니다. 이제 NexGen을 통해 웹에서도 바로 지오코딩을 하고, 지도 상에서 빠르게 시각화해 보세요.