위치 가져오기를 하면 위치값이 다르게 잡힙니다

수고 많으십니다.

  1. 현재상황 : 산업단지 신규조성으로 좌 우측에 마을을 단지가 구성된 곳으로 단지내 통신사 기지국이 없음

  2. 증상 : gps를 잡으면 좌측마을, 우측마을의 좌표로 잡혀 주소지가 현위치와 다르게 나올때가 빈번합니다. 안드로이드 아이폰 마찬가지 입니다

  3. 소스코드

근태체크
<script type="text/javascript" src="/M/LIB/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="/M/LIB/jquery-cookie.js"></script>
<script type="text/javascript" src="/M/LIB/Site_Base.js"></script>
<script type="text/javascript" src="/M/LIB/Site_Project.js"></script>   <!-- 오른쪽 하단 위쪽 화살표 아이콘 제거시 (btnTop검색) 19-28Line -->
<link rel="stylesheet" href="/M/LIB/themes/jquery.mobile.icons.min.css" />     
<link rel="stylesheet" href="/M/LIB/jquery.mobile.structure-1.4.4.min.css" />
<script type="text/javascript" src="/M/LIB/jquery.mobile-1.4.4.min.js"></script>  	
<script type="text/javascript">
	$(document).ready(function () {
		var nSearch			= $(location).attr('search');
		var nSp				= nSearch.replace('?', '').split("/");
		var nDate = nSp[0];  $("#STR_USER_ID").val($.cookie('ckIdUser'));   // ckIdUser -- ID값
		var nDate = nSp[1];  $("#STR_USER_CD").val($.cookie('ckCdUser'));   // ckCdUser -- USER값 
		var nDate = nSp[2];  $("#STR_USER_MEID").val($.cookie('ckMEID'));   // ckMEID ---- DB에 저장된 기기값
		var nDate = nSp[3];  $("#s_MEID").val($.cookie('s_MEID'));   		// s_MEID ---- 사용자의 현재 기기값
		
		$("#STR_USER_ID2").val($.cookie('ckIdUser'));                       // ckIdUser -- ID값   나의근태 검색용
		
		
		
		
			let today = new Date(); 
			let hours = today.getHours(); // 시
			let minutes = today.getMinutes();  // 분 
			
		
							
			// 초기 HTML에 설정된 상태를 확인한다.
			$('#ChangeStat').trigger('change');	// change event를 발생시킨다.
			
			function En0001() {$('#ChangeStat option[value="1"]').prop('disabled', false);}	
			function En0000() {$('#ChangeStat option[value="99"]').prop('disabled', false);}	
			function En0002() {$('#ChangeStat option[value="2"]').prop('disabled', false);}	
			function En0003() {$('#ChangeStat option[value="3"]').prop('disabled', false);}	
			function En0004() {$('#ChangeStat option[value="4"]').prop('disabled', false);}	
			function En0005() {$('#ChangeStat option[value="5"]').prop('disabled', false);}	
			function En0006() {$('#ChangeStat option[value="6"]').prop('disabled', false);}	
			function En0007() {$('#ChangeStat option[value="7"]').prop('disabled', false);}	
			function En0008() {$('#ChangeStat option[value="8"]').prop('disabled', false);}	
			function En0009() {$('#ChangeStat option[value="9"]').prop('disabled', false);}					
				
			
			//새벽3시부터 14시 사이에만 식사신청을 할 수 있음 
			if(hours >= 03 && hours <=14){ 
					En0000();
					En0001();
					En0002();
					En0003();
					En0004();
					En0005();
					En0006();
					En0007();
					En0008();
					En0009();
				}else{
					En0001();  
			
				}	
					<!-- En0006(); -->
					<!-- En0007(); -->
					<!-- En0008(); -->
					<!-- En0009(); -->
			
	});
	
	
</script>
Menu

근태체크

Org
    <div role="main" class="ui-content" id="_Contents" style="padding:5px; margin-bottom:100px; align="center">

    <!--<div id="map" style="width:100%;height:120px;margin-top:10px;center "></div>    지도 생성 및 사이즈 변경 -->
        <div id="map" style="display:none"></div>   <!-- 지도 숨김 -->
     
        <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=9c643a91d6649fb65877eb8897c23291&libraries=services"></script>  <!-- 카카오 지도 API key값 -->
        <script>
            var span;

            window.onload = function () {
                span = document.getElementById("display");
                if (navigator.geolocation) 													// 브라우저에서 웹 지오로케이션 지원여부 판단
                {

// span.innerHTML = “GeoLocation API 를 지원하는 브라우저”;
var options = { timeout: 3000, maximumAge: 4000 }; // PositionOptions 객체 설정용
options.enableHighAccuracy = true;
navigator.geolocation.getCurrentPosition(sucCall, errCall, options); // 현재 위치정보 딱 한번 얻기
}
else {
span.innerHTML = “GeoLocation API 를 지원하지 않는 브라우저 입니다.”;
}
};

            var sucCall = function (position) {							      // 위치정보 얻기 성공시 자동으로 호출되는 콜백함수. 인자는 Position 객체
                var lat = position.coords.latitude;							  // 위도, 경도 얻기
                var lng = position.coords.longitude;

// alert(“모바일 근태는 위치정보 허용이 필요하며,\n기록되지않습니다”);
displayMap(lat, lng);
markerMap(lat, lng);
positionName();
span.innerHTML = “위치 확인 성공”;
};

            function errCall(error) {										// 위치정보 얻기 실패시 자동으로 호출되는 콜백함수. 인자는 PositionError 객체
                switch	 (error.code) {
                    case 1:
                        span.innerHTML = "허용거부됨";
                        break;
                    case 2:
                        span.innerHTML = "위치 확인 불가";
                        break;
                    case 3:
                        span.innerHTML = "시간초과";
                        break;
                    case 0:
                        span.innerHTML = "알 수 없는 오류";
                        break;
                    default:
                        span.innerHTML = error.message;
                }
				alert("위치 허용 확인 후 다시 시도하시기 바랍니다");
				history.go(-1);												// 에러 발생시 이전 화면으로 이동
            };
			

            function displayMap(lat, lng) {
                var container = document.getElementById('map');
                var options = {
                    center: new kakao.maps.LatLng(lat, lng),	// 지도의 중심좌표
                    level: 6	// 지도의 확대 레벨
                };
                map = new kakao.maps.Map(container, options);   // 지도를 생성합니다
            }

            function markerMap(lat, lng) {		// 마커 생성
                markerPosition = new kakao.maps.LatLng(lat, lng);
                marker = new kakao.maps.Marker({ position: markerPosition }), infowindow = new kakao.maps.InfoWindow({ zindex: 1 });   // 주소에 마커를 표시할 인포윈도우입니다
                marker.setMap(map);
                document.getElementsByName('R_LATITUDE')[0].value = lat;   // 좌표값을 form name값에 전달한다
                document.getElementsByName('R_LONGITUDE')[0].value = lng;
            }

            function positionName() {		// 지도에서 주소 표시
                var geocoder = new kakao.maps.services.Geocoder();        // 주소-좌표 변환 객체를 생성합니다
                var callback = function (result, status) {
                    if (status == kakao.maps.services.Status.OK) {
                        content = '주소 : ' + result[0].address.address_name;
                        infowindow.setContent(content);
                        infowindow.open(map, marker);

                        var add = result[0].address.address_name;
                        document.getElementsByName('R_ADDR')[0].value = add;
                    }
                };
                geocoder.coord2Address(markerPosition.getLng(), markerPosition.getLat(), callback);			// 좌표로 상세 주소 정보를 요청합니다
            }
			
		
			
        </script>

        <form method="POST" action="/M/VB/mWorkGpsInf.asp" name="post_ok">
            <br>
            <b>근무장소</b><input type="text" id="R_COMMENT" name="R_COMMENT" placeholder="근무장소를 입력하세요" required><br><br>
			
			
			<b>체온측정</b>
			 <select id="ChangeStat" name="R_TEMPCHK">								
					<option value="1" disabled selected>정상체온(35~6℃)</option>						
					<option value="2" disabled>비정상(37.3~℃) 지원팀 문의필요</option>												
			</select><br><br>
           
			<b>식사선택</b>
			<select id="ChangeStat" name="R_EVENT" required>		
					<option value=""  disabled selected hidden>Select</option>
					<option value="1" disabled>신청안함</option>
					<option value="2" disabled>점심</option>
					<option value="3" disabled>점심+내일저녁</option>					 
					<option value="4" disabled>내일저녁</option>					 
					<option value="5" disabled>점심+휴일점심</option>		 
			</select>							
				<input type="hidden" id="R_ADDR" 	    name="R_ADDR" 	     style="display:none;"/>	<!-- 위치정보 -->
                <input type="hidden" id="R_LATITUDE"    name="R_LATITUDE"    style="display:none;"/>	<!-- X좌표값 -->
                <input type="hidden" id="R_LONGITUDE"   name="R_LONGITUDE"   style="display:none;"/>	<!-- Y좌표값 -->
                <input type="hidden" id="STR_USER_ID"   name="STR_USER_ID"   style="display:none;"/>	<!-- ckIdUser -->
				<input type="hidden" id="STR_USER_CD"   name="STR_USER_CD"   style="display:none;"/>	<!-- ckCdUser -->
				<input type="hidden" id="STR_USER_MEID" name="STR_USER_MEID" style="display:none;"/>	<!-- ckMEID -->
				<input type="hidden" id="s_MEID" 		name="s_MEID" 		 style="display:none;"/>	<!-- s_MEID --> 
				
						
								
				<table align="center" width=80%>   <!-- 버튼 폭 조절 -->
					<colgroup align="center">
						<col width="30%"><col width="5%">						
						<col width="30%">
					</colgroup>
					<tr>
							<!-- <input type="hidden" name="R_FLAG" value="출근"> -->
						<td scope="col"><input type="submit" id="R_FLAG" name="R_FLAG" value="출근" style="background-Color:#ff0000;"><center>Work Start</td><td scope="col"></td>						
						<td scope="col"><input type="submit" id="R_FLAG" name="R_FLAG" value="퇴근" style="background-Color:#00ff00;"><center>Work End</td>
					</tr>
				</table>
		</form>  
				<br><hr><br>

		<form method="POST" action='/M/VB/mWorkTime_End.asp'>				
			<table align="center" width=80%> 
				<colgroup align="center">
					<col width="45%"><col width="10%">
					<col width="45%">
				</colgroup>
				
			</table>
		</form>
				
		<form method="POST" action='/M/VB/mWorkGpsView.asp'>		
                <div data-role="controlgroup" data-type="horizontal" align="center">
				    <input type="submit" value="나의근태" /> 
                    <input type="button" value="휴가계상신"   onclick="location = '/M/HTML/mWorkVacation.html'" />
                    <input type="button" value="개인정보처리방침" onclick="location = '/M/HTML/mPrivercy.html'" /> 
                </div>
				<input type="hidden" id="STR_USER_ID2"  name="STR_USER_ID2" style="display:none;"//>	
				<p>
				<center>
					<br><span id="display" style="color:red;font-size:1.5em;font-weight:bold"></span><br><br>
					<font style="font-size:0.9em;font-weight:bold">모바일 근태는 위치정보 허용이 필요하며, 기록되지 않습니다</font>
				</center>		<!-- 안내 메시지 font 속성변경 -->
        </form>

    </div>
    <div id="_Footer" style="width:100%; position:fixed; bottom:0px; z-index:990; white-space: normal; background:#0F2439;">
        <div class="ui-block-a" style="text-align:left;   width:20%;"><a href="/M/HTML/mMain.html" rel="external" class="ui-shadow ui-btn ui-btn-c ui-corner-all ui-icon-home ui-btn-icon-notext ui-btn-inline">Home</a></div>
        <div class="ui-block-b" style="text-align:center; width:60%;"><div id="" style="padding:13px 0 0 10px; color:#66ff00; font-weight:bold;">(주)&nbsp;YHT</div></div>
        <div class="ui-block-c" style="text-align:right;  width:20%;"><a href="#" rel="external" onclick="BaseLogOut();" class="ui-shadow ui-btn ui-btn-c ui-corner-all ui-icon-power ui-btn-icon-notext ui-btn-inline">Logout</a></div>
    </div>
    <div data-role="panel" id="panel_LNB" data-position="left" data-display="overlay" data-theme="b"></div>  <!-- Left_Pannel Menu -->

GPS를 이용한 위치 검색은
IP 기반의 위치 검색보단 오차범위가 적지만
GPS 센서가 없는 경우, 건물 안인 경우, 주변에 건물과 사람이 많은 경우 등등…
오차가 생겨 정확한 위치 정보를 찾지 못하는 경우도 있습니다.

geolocation은 브라우저에서 지원하는 네이티브 API로
지도 API와는 무관하기 때문에 자세한 답변 드리지 못하는 점 양해 부탁드립니다.

그렇다면 모바일 웹에서 정확도를 높히려면 어떤 방식을 사용하면 좋은지 추천받을 수 있을까요?