java定位选择店铺
来源:互联网 发布:斗鱼主播都用什么软件 编辑:程序博客网 时间:2024/04/28 21:11
app开发:java定位选择店铺
开发环境:maven3.3+eclipse4.5+jdk1.7+mysql5.7
框架:springvc+spring+mybatis+jsp+jquery+js
页面效果:
app选择省市区使用mobileSelect.js-master.zip插件,该插件及省市区数据下载地址:http://download.csdn.net/download/u014079773/9952084
jsp页面引入css和js文件如:
<link rel="stylesheet" href="${basePath}/css/mobileSelect.css"/>
<script src="${basePath}/js/mobileSelect.js"></script>
jsp页面:
<!--选择店铺--><div class="ctChooseShop overlay-slidedown"><#--存储当前定位店铺数据--><input type="hidden" id="locaStoreId" value="${storeId!''}"/><input type="hidden" id="locaStoreName" value="${storeName!''}"/><input type="hidden" id="locaStoreImage" value="${storeImage!''}"/><input type="hidden" id="locaStoreArea" value="${storeArea!''}"/> <i class="closeChooseShop"></i> <!--定位--> <div class="ctLocation positionStore" style="display:block;"> <h3>当前定位店铺</h3> <div class="shop"> <i><img width="180px;" height="180px;" src=""/></i> <div> <h6></h6> <p></p> <span><b class="nowStore">当前店铺</b><a href="javascript:;" class="goLocationShop">进入此店铺</a></span> </div> </div> </div> <!--GPS定位--> <div class="ctGps ctLocation gpsStore" style="display:block;"> <h3>GPS定位店铺</h3> <div class="noStore" style="display:block;"> <i class="positioning"><img src="${basePath}/images/bgy/dingwei1.png" alt=""/></i> <p class="positionText">正在定位中...</p> <a class="positionBtn" href="javascript:void(0)" onclick="showLocation()" style="display:none;">重新定位</a> </div> <div class="shop" style="display:none;"> <i><img width="180px;" height="180px;" src=""/></i> <div> <h6></h6> <p></p> <span><a href="javascript:;" class="goGpsShop">进入此店铺</a></span> </div> </div> </div> <!--手动选择--> <div class="ctChooseByHand"> <h3>手动选择店铺 <a href="javascript:void(0)" onclick="cleanShop();">清空</a></h3> <div class="item"> <a href="javascript:void(0)" id="ctCity"> <span>请选择所在城市</span> </a> </div> <div class="item"> <a href="javascript:;" id="ctVillage"> <span>请选择小区</span> </a> </div> </div> <div class="noStoreTips"> <p>本小区尚未开设凤凰优选门店,系统给您推荐了以下门店:</p> </div> <ul class="ctHandChooseShop"> <#--无小区显示定位距离最近5个店铺--> </ul></div>js业务逻辑操作:
/** * 首页操作 *//** * 首页初始化 */ //请求路径常量var basePath=$("#basePath").val();$(function () { //判断是否是手机if(isMobile()){//是手机,执行定位方法//gps定位选择店铺getLocation();}//locationResult();//用于本地测试//店铺名称var storeName=$("#locaStoreName").val();console.log("storeName:"+storeName);//给首页左上角店铺名称赋值$(".selectAero .shopName").html(storeName);});/** * 判断是否为手机 * @returns {Boolean} */function isMobile(){ var sUserAgent= navigator.userAgent.toLowerCase(), bIsIpad= sUserAgent.match(/ipad/i) == "ipad", bIsIphoneOs= sUserAgent.match(/iphone os/i) == "iphone os", bIsMidp= sUserAgent.match(/midp/i) == "midp", bIsUc7= sUserAgent.match(/rv:1.2.3.4/i) == "rv:1.2.3.4", bIsUc= sUserAgent.match(/ucweb/i) == "ucweb", bIsAndroid= sUserAgent.match(/android/i) == "android", bIsCE= sUserAgent.match(/windows ce/i) == "windows ce", bIsWM= sUserAgent.match(/windows mobile/i) == "windows mobile", bIsWebview = sUserAgent.match(/webview/i) == "webview"; return (bIsIpad || bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM);}/** * js调用客户端gps定位,该方法是调用h5定位,ios开发人员提供的 */function getLocation(){window.location='biguiyuan|location';}//定义全部变量,gps定位信息var msg;//获取定位数据callbackfunction locationResult(base64) {//str1用于本地测试//var str1='ewogICJlcnJvckluZm8iIDogIiIsCiAgInByb3ZpbmNlIiA6ICLlub/kuJznnIEiLAogICJsb25naXR1ZGUiIDogIjExMy4yNjg3NTciLAogICJzdHJlZXQiIDogIuWdpOa0suS6jOihlyIsCiAgImxhdGl0dWRlIiA6ICIyMi45MjQ1MzMiLAogICJjaXR5Q29kZSIgOiAiMDc1NyIsCiAgImFkZHJlc3MiIDogIuW5v@S4nOecgeS9m@WxseW4gumhuuW@t@WMuuWMl@a7mOmVh@eip@ahguWbreaAu@mDqCIsCiAgImNpdHkiIDogIuS9m@WxseW4giIsCiAgIm51bWJlciIgOiAiMjjlj7ciLAogICJkaXN0cmljdCIgOiAi6aG65b635Yy6IiwKICAicG9pTmFtZSIgOiAi56Kn5qGC5Zut5oC76YOoIiwKICAiZXJyb3JDb2RlIiA6ICIiLAogICJjb3VudHJ5IiA6ICLkuK3lm70iLAogICJhZENvZGUiIDogIjQ0MDYwNiIsCiAgInRvd25zaGlwIiA6ICLljJfmu5jplYciCn0=';//msg=str1;//loadLonAndLat(str1);//判断gps是否定位到数据//alert("gps2:"+base64);//正式环境msg = base64;loadLonAndLat(msg); } /** * 加载gps定位得到的经纬度信息 * @param msg gps定位得到的经纬度信息 */var gpsStoreId;function loadLonAndLat(msg){$.ajax({ type: 'post', url:basePath+'/chooseShop.htm', async:false,//同步 cache:false,//清空缓存 data:{"msg":msg,"type":"2"}, dataType:"json", success: function(data) { if(data!=null && data.length>0){ for(var i=0;i<data.length;i++){ var type=data[i].type; console.log("type:"+type); //alert("type2:"+type); if(type=="2"){ //店铺id var storeId=data[i].storeId; //小区id var villageId=data[i].villageId; //店铺名称 var storeName=data[i].storeName; //店铺图片 var storeImage=data[i].storeImage; //店铺所在的省市区 var storeArea=data[i].storeArea; //给当前店铺赋值 $(".ctLocation .shop img").attr("src",storeImage); $(".ctLocation .shop h6").text(storeName); $(".ctLocation .shop p").text(storeArea); //存储gps定位到的店铺id gpsStoreId=storeId; //定位成功后显示GPS定位店铺 $(".gpsStore .shop").show(); //隐藏重新定位 $(".gpsStore .noStore").hide(); }else{ //定位不到,手动选择 //隐藏GPS定位店铺 $(".gpsStore .shop").hide(); //显示重新定位 $(".gpsStore .noStore").show(); $(".positionText").html("未定位到店铺,请确认手机已开启GPS"); $(".positionBtn").show(); $(".positioning").addClass("noAnimation"); } } }else{ //定位不到,手动选择 //隐藏GPS定位店铺 $(".gpsStore .shop").hide(); //显示重新定位 $(".gpsStore .noStore").show(); $(".positionText").html("未定位到店铺,请确认手机已开启GPS"); $(".positionBtn").show(); $(".positioning").addClass("noAnimation"); } } });}/** * 根据gps定位,查询距离最近的5个店铺 * @param msg gps定位得到的经纬度信息 */function findNearestDistancByGps(msg){//判断是否有店铺var isStroe=false;$.ajax({ type: 'post', url:basePath+'/findNearestDistancByGps.htm', async:false,//同步 cache:false,//清空缓存 data:{"msg":msg}, dataType:"json", success: function(data) { //清空拼接数据 $(".ctHandChooseShop").html(""); var html=""; if(data!=null && data.length>0){ for(var i=0;i<data.length;i++){ html+="<li>"; html+="<i><img width='180px;' height='180px;' src=\""+data[i].storeImage+"\" /></i>"; html+="<div>"; html+="<h6>"+data[i].storeName+"</h6>"; html+="<p>"+data[i].storeArea+"</p>"; html+="<span><a href='javascript:;' onclick='goShop("+data[i].storeId+")'>进入此店铺</a></span>"; html+="</div>"; html+="</li>"; } //拼接距离最近5个店铺 $(".ctHandChooseShop").append(html); isStroe=true; } } });return isStroe;}/** * 若gps定位不到,或者gps关闭的情况下 * 推荐5家数据库里创建时间最早且是开店状态的店铺 */function findStoreEarliest(){$.ajax({ type: 'post', url:basePath+'/findStoreEarliest.htm', async:false,//同步 cache:false,//清空缓存 success: function(data) { //清空拼接数据 $(".ctHandChooseShop").html(""); var html=""; if(data!=null && data.length>0){ for(var i=0;i<data.length;i++){ html+="<li>"; html+="<i><img width='180px;' height='180px;' src=\""+data[i].storeImage+"\" /></i>"; html+="<div>"; html+="<h6>"+data[i].storeName+"</h6>"; html+="<p>"+data[i].storeArea+"</p>"; html+="<span><a href='javascript:;' onclick='goShop("+data[i].storeId+")'>进入此店铺</a></span>"; html+="</div>"; html+="</li>"; } //拼接数据库里创建时间最早且是开店状态的店铺 $(".ctHandChooseShop").append(html); } } });}//gps进入店铺$(".goGpsShop").click(function(){//exclusionsType=1表示过滤拦截器window.location.href=basePath+"/initMain.htm?exclusionsType=1&storeId="+gpsStoreId;});/** * 进入此店铺 * @param storeId 店铺id */function goShop(storeId){//exclusionsType=1表示过滤拦截器window.location.href=basePath+"/initMain.htm?exclusionsType=1&storeId="+storeId;}/** * 清除选择的店铺 */function cleanShop(){var ctCity = document.getElementById("ctCity");ctCity.innerHTML="请选择所在城市";var ctVillage = document.getElementById("ctVillage");ctVillage.innerHTML="请选择小区";$(".ctHandChooseShop").hide();$(".noStoreTips").hide();}//gps未定位到重新定位function showLocation(){$(".positionText").html("正在定位中...");$(".positionBtn").css("display","none");$(".positioning").removeClass("noAnimation");//调用客户端gps定位getLocation();}//手动选择地区$("#ctCity").click(function(){ $(".ctChooseShop .ctGps").slideUp(); $(".ctChooseShop .ctLocation").slideUp();});//选择店铺var locationStoreId;//全局变量存储当前定位店铺id$(".selectAero").click(function(){$(".ctChooseShop").addClass("open");$("body").css("overflow","hidden");//读取本地省市区json文件数据 $.ajax({ url:basePath+'/json/city.json', async:false,//同步 cache:false,//清空缓存 success: function(data) { UplinkData=data; }});//选择小区mobileSelect2 = new MobileSelect({ trigger: '#ctVillage', wheels: [ {data: villageData} ],callback:function(indexArr, data){var _this = indexArr[0];var _thisId = villageDataId[_this].id;if(ctVillage.innerHTML!="暂无小区"){//选中的小区idvar villageId=_thisId;//根据选中的小区id查询店铺var isStore=findStoreByVillageId(villageId);console.log("isStore:"+isStore);//alert("isStore:"+isStore);if(isStore==true){//小区下面有店铺//alert("小区下面有店铺");//显示店铺$(".ctHandChooseShop").show();//隐藏无店铺提示信息$(".noStoreTips").hide();return ;}else{//小区下面无店铺,现在定位距离最近的5个店铺//gps查询最近5个店铺var isGpsStore=findNearestDistancByGps(msg);console.log("isGpsStore:"+isGpsStore);//alert("isGpsStore:"+isGpsStore);if(isGpsStore==true){//alert("小区下面无店铺,现在定位距离最近的5个店铺");//清空原来的,展示gps定位最近的5个 //显示无店铺提示信息 $(".noStoreTips").show(); //显示店铺 $(".ctHandChooseShop").show(); return ;}else{//gps定位不到或者gps关闭则显示数据库创建最早且是开通的5个店铺//alert("显示数据库创建最早且是开通的5个店铺");//清空原来的,展示数据库创建最早且是开通的5个店铺findStoreEarliest();$(".noStoreTips").show(); //显示店铺 $(".ctHandChooseShop").show(); return ;}}}} });//选择省市区mobileSelect1 = new MobileSelect({ trigger: '#ctCity', wheels: [ {data: UplinkData} ],callback:function(indexArr, data){//显示清除$(".ctChooseByHand h3 a").show(); //选中的地区id var districtId=data[2].id; //根据选中的区县编号查询小区 chooseVillage(districtId);} });//测试用//alert("id:"+$("#locaStoreId").val());//alert("img:"+$("#locaStoreImage").val());//alert("name:"+$("#locaStoreName").val());//alert("area:"+$("#locaStoreArea").val());//给当前定位店铺赋值$(".positionStore .shop img").attr("src",$("#locaStoreImage").val());$(".positionStore .shop h6").text($("#locaStoreName").val());$(".positionStore .shop p").text($("#locaStoreArea").val());locationStoreId=$("#locaStoreId").val();});//当前定位店铺进入店铺$(".goLocationShop").click(function(){//exclusionsType=1表示过滤拦截器window.location.href=basePath+"/initMain.htm?exclusionsType=1&storeId="+locationStoreId;});//关闭选择店铺$(".closeChooseShop").click(function(){ $(".ctChooseShop").removeClass("open"); $("body").removeAttr("style"); $(".positionStore").show(); $(".gpsStore").show(); //隐藏清除 $(".ctChooseByHand h3 a").hide();})//手动选择省市区,小区//省级联动var UplinkData;//省市区数据var mobileSelect1;//选择省市区var mobileSelect2;//选择小区var villageData=['暂无小区'];//存储选中的小区名称var villageDataId=[];//存储选中的小区id值var ctVillage = document.getElementById("ctVillage");/** * 根据选中的区县编号查询小区 * @param districtId 区县id */function chooseVillage(districtId){$.ajax({ type: 'post', url:basePath+'/getAllCountryByDid.htm', async:false,//同步 cache:false,//清空缓存 data:{"districtId":districtId}, dataType:"json", success: function(data) { villageData=[]; if(data!=null && data.length>0){ for(var i=0;i<data.length;i++){ villageData.push(data[i].value); villageDataId.push({id:data[i].id,value:data[i].value}); } ctVillage.innerHTML = "请选择小区"; $(".noStoreTips").hide(); $(".ctHandChooseShop").hide(); }else{ villageData=['暂无小区']; ctVillage.innerHTML = "暂无小区"; //清空原来的,展示gps定位最近的5个 var isGpsStore=findNearestDistancByGps(msg); console.log("isGpsStore1:"+isGpsStore); //alert("isGpsStore1:"+isGpsStore); if(isGpsStore==true){//定位到gps定位最近的5个 //alert("定位到gps定位最近的5个"); //显示无店铺提示信息 $(".noStoreTips").show(); //显示店铺 $(".ctHandChooseShop").show(); return ; }else{//gps定位不到或者gps关闭则显示数据库创建最早且是开通的5个店铺 //alert("显示数据库创建最早且是开通的5个店铺"); //清空原来的,展示数据库创建最早且是开通的5个店铺 findStoreEarliest(); //显示无店铺提示信息 $(".noStoreTips").show(); //显示店铺 $(".ctHandChooseShop").show(); return ; } } mobileSelect2.updateWheel(0,villageData); }});}/** * 根据小区id查询店铺信息 * @param villageId 小区id */function findStoreByVillageId(villageId){//判断是否有店铺var isStroe=false;$.ajax({ type: 'post', url:basePath+'/findStoreByVillageId.htm', async:false,//同步 cache:false,//清空缓存 data:{"villageId":villageId}, dataType:"json", success: function(data) { $(".ctHandChooseShop").html(""); var html=""; if(data!=null && data.length>0){ for(var i=0;i<data.length;i++){ html+="<li>"; html+="<i><img width='180px;' height='180px;' src=\""+data[i].storeImage+"\" /></i>"; html+="<div>"; html+="<h6>"+data[i].storeName+"</h6>"; html+="<p>"+data[i].storeArea+"</p>"; html+="<span><a href='javascript:;' onclick='goShop("+data[i].storeId+")'>进入此店铺</a></span>"; html+="</div>"; html+="</li>"; } $(".ctHandChooseShop").append(html); isStroe=true; } }});return isStroe;}java后台代码:controller层:
/** * 用户未登录跳转店铺选择页面 * 初始化选择店铺页面 * @param req * @param resp * @return */ @RequestMapping("/initChooseShop") public ModelAndView initChooseShop(HttpServletRequest req,HttpServletResponse resp){ ModelAndView mav=new ModelAndView(); try { //返回页面mav.setViewName("mobileNew/chooseShop");} catch (Exception e) {e.printStackTrace();LOGGER.error("初始化选择店铺失败"+e.getMessage(),e);} return mav; } /** * 公共方法: * gps定位选择店铺 * @param req * @param resp * @param msg gps定位信息 * @param type 店铺类型 type=1当前定位type=2gps定位 * @return */ @RequestMapping(value="/chooseShop",produces="application/json;charset=UTF-8") @ResponseBody public String chooseShop(HttpServletRequest req,HttpServletResponse resp,String msg,String type){ //封装结果集 JSONArray result=new JSONArray(); //存储当前定位信息 Map<String, Object> locaMap=new HashMap<String, Object>(); //存储gps定位信息 Map<String, Object> gpsMap=new HashMap<String, Object>(); try { //店铺id String storeId=null; //首先从cookie中取存储的店铺id(上一次浏览的记录) Cookie[] cookies=req.getCookies(); if(cookies!=null){ for(Cookie cookie:cookies){ if(cookie!=null && "storeId".equals(cookie.getName())){ storeId=cookie.getValue(); break; } } } //此方法给用户未登录使用 //从cookie中取到店铺id if(StringUtils.isNotEmpty(storeId)){//从cookie中获得店铺信息(上一次浏览记录) locaMap=positionStore.getStoreInfoFromCookie(storeId);}else{//js调用客户端定位,遍历获得的json数据gpsMap=positionStore.getStoreInfoFromGPS(resp, msg);} //给首页,频道,分类定位gps选择店铺 //js调用客户端定位,遍历获得的json数据if("2".equals(type)){gpsMap=positionStore.getStoreInfoFromGPS(resp, msg);} result.add(locaMap); result.add(gpsMap); LOGGER.info("定位选择店铺result:"+result.toJSONString());} catch (Exception e) {e.printStackTrace();LOGGER.error("定位选择店铺失败"+e.getMessage(),e);} return result.toJSONString(); } /** * 公共方法: * 根据区县编号查询所有城市小区 * springmvc返回数据乱码解决:在requestMapping中添加produces="application/json;charset=UTF-8" * @param districtId 区县编号 * @return */ @RequestMapping(value="/getAllCountryByDid",produces="application/json;charset=UTF-8") @ResponseBody public String getAllCountryByDid(Long districtId){ StringBuilder sb=new StringBuilder("["); try { //查询数据 List<VillageBean> villageList=customerServiceMapper.getAllCountryByDid(districtId); //对数据重新封装 if(villageList!=null && !villageList.isEmpty()){ for(int i=0;i<villageList.size();i++){ sb=sb.append("{\"id\":\""+villageList.get(i).getVillageId()+"\",") .append("\"value\":").append("\"" +villageList.get(i).getVillageName()+"\"}"); if(i!=villageList.size()-1){ sb.append(","); } } } sb.append("]");} catch (Exception e) {e.printStackTrace();LOGGER.error("根据区县编号查询所有城市小区失败"+e.getMessage(),e);} return sb.toString(); } /** * 公共方法: * 根据小区id查询店铺信息 * @param villageId 小区id * @return */ @RequestMapping(value="/findStoreByVillageId",produces="application/json;charset=UTF-8") @ResponseBody public List<Map<String, Object>> findStoreByVillageId(Long villageId){ List<Map<String, Object>> resultMap=new ArrayList<Map<String,Object>>(); try {//查询数据 List<StoreInfo> storeInfoList=storeService.findStoreByVillageId(villageId); //重新组装数据 if(storeInfoList!=null && !storeInfoList.isEmpty()){ for(int i=0;i<storeInfoList.size();i++){ //店铺id Long storeId=storeInfoList.get(i).getStoreId(); //店铺名称 String storeName=storeInfoList.get(i).getStoreName(); //店铺图片 String storeImage=storeInfoList.get(i).getStoreImage(); //获得店铺地区id Long dId=storeInfoList.get(0).getStoreCounty(); //根据区县ID查询所属的城市和省份名称 AddressUtil addressUtil = districtService.queryAddressNameByDistrictId(dId); //店铺所在的省市区 String storeArea=addressUtil.getProvinceName() + addressUtil.getCityName() + addressUtil.getDistrictName(); Map<String, Object> paramMap=new HashMap<String, Object>(); paramMap.put("storeId", storeId); paramMap.put("villageId", villageId); paramMap.put("storeName", storeName); paramMap.put("storeImage", storeImage); paramMap.put("storeArea", storeArea); resultMap.add(paramMap); } }} catch (Exception e) {e.printStackTrace();LOGGER.error("根据小区id查询店铺信息失败"+e.getMessage(),e);} return resultMap; } /*** * 公共方法: * 根据gps定位,查询距离最近的5个店铺 * @param req * @param resp * @param msg gps定位信息 * @return */ @RequestMapping(value="/findNearestDistancByGps",produces="application/json;charset=UTF-8") @ResponseBody public List<Map<String, Object>> findNearestDistancByGps(HttpServletRequest req,HttpServletResponse resp,String msg){ List<Map<String, Object>> list=new ArrayList<Map<String,Object>>(); try { //js调用客户端定位,遍历获得的json数据if(StringUtils.isNotEmpty(msg)){//将获得的定位信息特殊字符替换掉msg=msg.replaceAll("@","\\+");//解密定位信息msg=Base64Util.decode(msg);//将获得的msg转换为json数据JSONObject obj=JSONObject.parseObject(msg);//经度String longitude=obj.getString("longitude");//纬度String latitude=obj.getString("latitude");Map<String, Object> paramMap=new HashMap<String, Object>();paramMap.put("longitudeDou", longitude);paramMap.put("latitudeDou", latitude);paramMap.put("distance", ConstantUtil.DISTANCE_RANG);//根据指定经纬度与数据库多条经纬度计算距离,取距离最近的List<StoreInfo> storeInfoList=storeService.findStoreDistance(paramMap);if(storeInfoList!=null && !storeInfoList.isEmpty()){for(int i=0;i<storeInfoList.size();i++){//店铺idLong storeId=storeInfoList.get(i).getStoreId();//小区idLong villageId=storeInfoList.get(i).getStoreVillage();//店铺名称String storeName=storeInfoList.get(i).getStoreName();//店铺图片String storeImage=storeInfoList.get(i).getStoreImage();//店铺区县Long dId=storeInfoList.get(i).getStoreCounty();//根据区县ID查询所属的城市和省份名称AddressUtil addressUtil = districtService.queryAddressNameByDistrictId(dId);//店铺所在的省市区String storeArea=addressUtil.getProvinceName() + addressUtil.getCityName() + addressUtil.getDistrictName();Map<String, Object> resultMap=new HashMap<String, Object>();resultMap.put("storeId", storeId);resultMap.put("villageId", villageId);resultMap.put("storeName", storeName);resultMap.put("storeImage", storeImage);resultMap.put("storeArea", storeArea);list.add(resultMap);}}}} catch (Exception e) {e.printStackTrace();LOGGER.error("根据gps定位距离最近的5个店铺失败"+e.getMessage(),e);} return list; } /** * 推荐5家数据库里创建时间最早且是开店状态的店铺 * @param req * @param resp * @return */ @RequestMapping(value="/findStoreEarliest",produces="application/json;charset=UTF-8") @ResponseBody public List<Map<String, Object>> findStoreEarliest(HttpServletRequest req,HttpServletResponse resp){ List<Map<String, Object>> list=new ArrayList<Map<String,Object>>(); try { //查询数据 List<StoreInfo> storeInfoList=storeService.findStoreEarliest(); //重新组装数据 if(storeInfoList!=null && !storeInfoList.isEmpty()){ for(int i=0;i<storeInfoList.size();i++){ //店铺idLong storeId=storeInfoList.get(i).getStoreId();//小区idLong villageId=storeInfoList.get(i).getStoreVillage();//店铺名称String storeName=storeInfoList.get(i).getStoreName();//店铺图片String storeImage=storeInfoList.get(i).getStoreImage();//店铺区县Long dId=storeInfoList.get(i).getStoreCounty();//根据区县ID查询所属的城市和省份名称AddressUtil addressUtil = districtService.queryAddressNameByDistrictId(dId);//店铺所在的省市区String storeArea=addressUtil.getProvinceName() + addressUtil.getCityName() + addressUtil.getDistrictName();Map<String, Object> resultMap=new HashMap<String, Object>();resultMap.put("storeId", storeId);resultMap.put("villageId", villageId);resultMap.put("storeName", storeName);resultMap.put("storeImage", storeImage);resultMap.put("storeArea", storeArea);list.add(resultMap); } }} catch (Exception e) {e.printStackTrace();LOGGER.error("数据库查询最早且是开通的店铺失败"+e.getMessage(),e);} return list; }
公共方法PositionStoreImpl:
package com.qianjiang.m.common.service.impl;import java.net.URLEncoder;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.annotation.Resource;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang.StringUtils;import org.springframework.stereotype.Service;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import com.qianjiang.common.util.ConstantUtil;import com.qianjiang.customer.dao.CustomerAddressMapper;import com.qianjiang.customer.service.CustomerServiceMapper;import com.qianjiang.m.common.service.PositionStore;import com.qianjiang.system.service.DistrictService;import com.qianjiang.system.util.AddressUtil;import com.qianjiang.thirdaudit.bean.StoreInfo;import com.qianjiang.thirdaudit.service.StoreService;import com.qianjiang.util.Base64Util;import com.qianjiang.util.MyLogger;/** * 公共方法定位选择店铺 * @author somnus * */@Service("positionStore")public class PositionStoreImpl implements PositionStore{ /** 记录日志对象 */ private static final MyLogger LOGGER = new MyLogger(PositionStoreImpl.class); //店铺业务层 @Resource(name = "storeService") private StoreService storeService; //省市区业务层 @Resource(name = "DistrictService") private DistrictService districtService; //用户业务层 @Resource(name = "customerServiceMapper") private CustomerServiceMapper customerServiceMapper; //用户收获地址 @Resource(name = "customerAddressMapper") private CustomerAddressMapper addressMapper; // 店铺列表 private static Map<String, StoreInfo> storeInfos = new HashMap<String, StoreInfo>(); // 最后更新时间 private static Map<String, Date> lastUpdate = new HashMap<String, Date>(); // 一小时更新一次 private static long INTERVAR_TIME = 60 * 60 * 1000; /** * 公共方法: * 从cookie中获得店铺信息 * @param storeId 店铺id * @return */public Map<String, Object> getStoreInfoFromCookie(String storeId) {Map<String, Object> resultMap=new HashMap<String, Object>();try {StoreInfo storeInfo = null;if (storeInfos.get(storeId) != null){Date date = lastUpdate.get(storeId);if (date != null && ((new Date()).getTime() - date.getTime() < INTERVAR_TIME)){storeInfo = storeInfos.get(storeId);}}if (storeInfo == null){//根据店铺id关联查询店铺跟小区信息,店铺状态开启storeInfo = storeService.findStoreAndVillageById(Long.parseLong(storeId));storeInfos.put(storeId, storeInfo);lastUpdate.put(storeId, new Date());}if(storeInfo != null){//店铺idLong storeIds=storeInfo.getStoreId();//小区idLong villageId=storeInfo.getStoreVillage();//店铺名称String storeName=storeInfo.getStoreName();//店铺图片String storeImage=storeInfo.getStoreImage();//店铺电话String storeTel=storeInfo.getStoreTel();//获取区县idLong dId=storeInfo.getStoreCounty();//获取QQString serviceQq=storeInfo.getServiceQq();//根据区县ID查询所属的城市和省份名称AddressUtil addressUtil = districtService.queryAddressNameByDistrictId(dId);//店铺所在的省市区String storeArea=addressUtil.getProvinceName() + addressUtil.getCityName() + addressUtil.getDistrictName();//将查询结果封装到返回结果中resultMap.put("storeId", storeIds);resultMap.put("villageId", villageId);resultMap.put("storeName", storeName);resultMap.put("storeImage", storeImage);resultMap.put("storeTel", storeTel);resultMap.put("storeArea", storeArea);resultMap.put("serviceQq", serviceQq);//表示上一次浏览记录resultMap.put("type", "1");}} catch (Exception e) {e.printStackTrace();LOGGER.error("从cookie中获得店铺信息失败"+e.getMessage(),e);}return resultMap;} /** * 公共方法: * 从gps定位信息中获得店铺信息 * @param resp 响应 * @param msg gps定位信息 * @return */public Map<String, Object> getStoreInfoFromGPS(HttpServletResponse resp, String msg) {Map<String, Object> resultMap=new HashMap<String, Object>();try {//js调用客户端定位,遍历获得的json数据if(StringUtils.isNotEmpty(msg)){//将获得的定位信息特殊字符替换掉msg=msg.replaceAll("@","\\+");//解密定位信息msg=Base64Util.decode(msg);//将获得的msg转换为json数据JSONObject obj=JSONObject.parseObject(msg);//经度String longitude=obj.getString("longitude");LOGGER.info("gps经度:"+longitude);//纬度String latitude=obj.getString("latitude");LOGGER.info("gps纬度"+latitude);Map<String, Object> paramMap=new HashMap<String, Object>();paramMap.put("longitudeDou", longitude);paramMap.put("latitudeDou", latitude);//paramMap.put("distance", ConstantUtil.DISTANCE_RANG);//根据指定经纬度与数据库多条经纬度计算距离,取距离最近的List<StoreInfo> storeInfoList = storeService.findStoreDistance(paramMap);if(storeInfoList!=null && !storeInfoList.isEmpty()){//店铺idString storeId=String.valueOf(storeInfoList.get(0).getStoreId());//小区idString villageId=String.valueOf(storeInfoList.get(0).getStoreVillage());//店铺名称String storeName=storeInfoList.get(0).getStoreName();//店铺图片String storeImage=storeInfoList.get(0).getStoreImage();//店铺电话String storeTel=storeInfoList.get(0).getStoreTel();//店铺区县Long dId = storeInfoList.get(0).getStoreCounty();//根据区县ID查询所属的城市和省份名称AddressUtil addressUtil = districtService.queryAddressNameByDistrictId(dId);//店铺所在的省市区String storeArea=addressUtil.getProvinceName() + addressUtil.getCityName() + addressUtil.getDistrictName();//将查询结果封装到返回结果中resultMap.put("storeId", storeId);resultMap.put("villageId", villageId);resultMap.put("storeName", storeName);resultMap.put("storeImage", storeImage);resultMap.put("storeArea", storeArea);resultMap.put("storeTel", storeTel);//表示gps定位数据resultMap.put("type", "2");}}} catch (Exception e) {e.printStackTrace();LOGGER.error("从gps定位信息中获得店铺信息失败"+e.getMessage(),e);}return resultMap;}/** * 公共方法: * 根据小区id查询店铺信息,店铺状态为开启 * @param storeInfoList 店铺信息 * @return */public Map<String, Object> getStoreInfoFromVillageId(List<StoreInfo> storeInfoList) {Map<String, Object> resultMap=new HashMap<String, Object>();try {//获得店铺idLong storeId=storeInfoList.get(0).getStoreId();//小区idLong villageId=storeInfoList.get(0).getStoreVillage();//获得店铺名称String storeName=storeInfoList.get(0).getStoreName();//店铺图片String storeImage=storeInfoList.get(0).getStoreImage();//获得店铺地区idLong dId=storeInfoList.get(0).getStoreCounty();//根据区县ID查询所属的城市和省份名称AddressUtil addressUtil = districtService.queryAddressNameByDistrictId(dId);//店铺所在的省市区String storeArea=addressUtil.getProvinceName() + addressUtil.getCityName() + addressUtil.getDistrictName();//将查询结果封装到返回结果中resultMap.put("storeId", storeId);resultMap.put("villageId", villageId);resultMap.put("storeName", storeName);resultMap.put("storeImage", storeImage);resultMap.put("storeArea", storeArea);resultMap.put("storeTel", storeInfoList.get(0).getStoreTel());} catch (Exception e) {e.printStackTrace();LOGGER.error("根据小区id查询店铺信息失败"+e.getMessage(),e);}return resultMap;} //测试public static void main(String[] args) {Map<String, Object> resultMap=new HashMap<String, Object>();resultMap.put("storeId", 3301);resultMap.put("villageId", 1005);resultMap.put("type", 1);Map<String, Object> resultMap2=new HashMap<String, Object>();resultMap2.put("storeId", 3302);resultMap2.put("villageId", 1006);resultMap2.put("type", 2);System.out.println("type1:"+resultMap.toString());System.out.println("type2:"+resultMap2.toString());JSONArray array=new JSONArray();array.add(resultMap);array.add(resultMap2);System.out.println("array:"+array.toJSONString());System.out.println("array:"+array.toString());}}xml文件获得数据:
<!-- 根据小区id查询店铺信息,店铺状态为开启 --> <select id="findStoreByVillageId" parameterType="long" resultMap="BaseResultMap"> select <include refid="Base_New_Column"/> from t_supplier_store_info ts,t_village tvwhere ts.store_village=tv.idand (ts.is_bind='0' or ts.is_bind='1')and ts.store_status='1'and tv.id=#{villageId} </select> <!-- 根据店铺id关联查询店铺跟小区信息,店铺状态开启 --> <select id="findStoreAndVillageById" parameterType="long" resultMap="BaseResultMap"> select ts.service_qq, <include refid="Base_New_Column"/> from t_supplier_store_info ts,t_village tvwhere ts.store_village=tv.id and (ts.is_bind='0' or ts.is_bind='1') and ts.store_status='1' and ts.store_id=#{storeId} </select> <!-- 根据指定经纬度与数据库多条经纬度计算距离,店铺状态开启 --> <select id="findStoreDistance" parameterType="map" resultMap="BaseResultMap"> select <include refid="Base_New_Column"/>,ROUND(6378.138*2*ASIN(SQRT(POW(SIN((#{latitudeDou}*PI()/180-latitude*PI()/180)/2),2)+COS(#{latitudeDou}*PI()/180)*COS(latitude*PI()/180)*POW(SIN((#{longitudeDou}*PI()/180-longitude*PI()/180)/2),2)))*1000)AS distancefrom t_supplier_store_info ts,t_village tvwhere ts.store_village=tv.idand (ts.is_bind='0' or ts.is_bind='1')and ts.store_status='1'<!-- <![CDATA[ GROUP BY ts.store_id having distance <= #{distance}]]> -->ORDER BY distance LIMIT 5 </select> <!-- 推荐5家数据库里创建时间最早且是开店状态的店铺 --> <select id="findStoreEarliest" resultMap="BaseResultMap"> select <include refid="Base_New_Column"/> from t_supplier_store_info ts,t_village tvwhere ts.store_village=tv.id and (ts.is_bind='0' or ts.is_bind='1') and ts.store_status='1' ORDER BY ts.create_time LIMIT 5 </select>
总结:
js调用客户端定位选择店铺,ios开发人员提供接口:
/** * js调用客户端gps定位 */function getLocation(){ window.location='biguiyuan|location';}/** * 返回回调数据: */function locationResult(base64) { //base64是编码定位数据 var str=base64 alert("str:"+str);}例如str:
ewogICJlcnJvckluZm8iIDogIiIsCiAgInByb3ZpbmNlIiA6ICLlub/kuJznnIEiLAogICJsb25naXR1ZGUiIDogIjExMy4yNjg3NTciLAogICJzdHJlZXQiIDogIuWdpOa0suS6jOihlyIsCiAgImxhdGl0dWRlIiA6ICIyMi45MjQ1MzMiLAogICJjaXR5Q29kZSIgOiAiMDc1NyIsCiAgImFkZHJlc3MiIDogIuW5v@S4nOecgeS9m@WxseW4gumhuuW@t@WMuuWMl@a7mOmVh@eip@ahguWbreaAu@mDqCIsCiAgImNpdHkiIDogIuS9m@WxseW4giIsCiAgIm51bWJlciIgOiAiMjjlj7ciLAogICJkaXN0cmljdCIgOiAi6aG65b635Yy6IiwKICAicG9pTmFtZSIgOiAi56Kn5qGC5Zut5oC76YOoIiwKICAiZXJyb3JDb2RlIiA6ICIiLAogICJjb3VudHJ5IiA6ICLkuK3lm70iLAogICJhZENvZGUiIDogIjQ0MDYwNiIsCiAgInRvd25zaGlwIiA6ICLljJfmu5jplYciCn0=
java后台接受前台传递的定位数据msg:
//返回数据格式:
{
"adCode": "440606",
"address": "广东省佛山市顺德区南平路靠近碧桂园总部",
"city": "佛山市",
"cityCode": "0757",
"country": "中国",
"district": "顺德区",
"errorCode": "0",
"errorInfo": "success",
"latitude": "22.924662",
"longitude": "113.26852",
"number": "28号",
"poiName": "碧桂园总部",
"province": "广东省",
"street": "坤洲二街",
"township": "北滘镇"
}
该案例数据库是mysql,故Mysql 拿指定经纬度与数据库多条经纬度进行距离计算,如下是项目中实际运用:
1.首先重前台获得传递的经纬度:
//将获得的定位信息特殊字符替换掉msg=msg.replaceAll("@","\\+");//解密定位信息msg=Base64Util.decode(msg);//将获得的msg转换为json数据JSONObject obj=JSONObject.parseObject(msg);//经度String longitude=obj.getString("longitude");LOGGER.info("gps经度:"+longitude);//纬度String latitude=obj.getString("latitude");LOGGER.info("gps纬度"+latitude);Map<String, Object> paramMap=new HashMap<String, Object>();paramMap.put("longitudeDou", longitude);paramMap.put("latitudeDou", latitude);//根据指定经纬度与数据库多条经纬度计算距离,取距离最近的List<StoreInfo> storeInfoList = storeService.findStoreDistance(paramMap);2.调用xml文件获得数据:
<!-- 根据指定经纬度与数据库多条经纬度计算距离,店铺状态开启 --><select id="findStoreDistance" parameterType="map" resultMap="BaseResultMap"> select <include refid="Base_New_Column"/>,ROUND(6378.138*2*ASIN(SQRT(POW(SIN((#{latitudeDou}*PI()/180-latitude*PI()/180)/2),2)+COS(#{latitudeDou}*PI()/180)*COS(latitude*PI()/180)*POW(SIN((#{longitudeDou}*PI()/180-longitude*PI()/180)/2),2)))*1000) AS distancefrom t_supplier_store_info ts,t_village tvwhere ts.store_village=tv.idand (ts.is_bind='0' or ts.is_bind='1')and ts.store_status='1'ORDER BY distance LIMIT 5</select>
mysql执行案例:
/**mobile端首页定位选择店铺**//** 一般地图上显示的坐标顺序为:纬度在前(范围-90~90),经度在后(范围-180~180)如:39.929101,116.443938longitude 经度latitude 纬度以下计算公式单位米当前经度:113.26852当前纬度:22.924662*//**mysql根据给定的经纬度与数据库多条经纬度计算距离*/select ts.store_id, ts.customerId, ts.store_name,ts.store_tel,ts.store_status,ts.check_status,ts.billing_cycle, ts.company_contact_name,ts.company_contact_tel, ts.store_province,ts.store_city,ts.store_county,ts.store_village, ts.longitude,ts.latitude,ts.store_address,ts.is_default_store,ts.store_image,ts.is_bind, ts.create_time,ts.mod_time,ts.start_businesshour,ts.end_businesshour, tv.name as "village_name",tv.code as "village_code",ROUND(6378.138*2*ASIN(SQRT(POW(SIN((22.924662*PI()/180-latitude*PI()/180)/2),2)+COS(22.924662*PI()/180)*COS(latitude*PI()/180)*POW(SIN((113.26852*PI()/180-longitude*PI()/180)/2),2)))*1000)AS distancefrom t_supplier_store_info ts,t_village tvwhere ts.store_village=tv.idand (ts.is_bind='0' or ts.is_bind='1')and ts.store_status='1'ORDER BY distance LIMIT 5
mysql执行结果:
CREATE TABLE `t_supplier_store_info` ( `store_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '店铺ID', `customerId` bigint(20) DEFAULT NULL COMMENT '会员编号', `store_name` varchar(75) DEFAULT NULL COMMENT '店铺名称', `store_tel` varchar(255) DEFAULT NULL COMMENT '店铺座机电话', `store_status` enum('1','0') DEFAULT NULL COMMENT '店铺开通状态1:已开通 0:未开通', `company_cre_time` varchar(50) DEFAULT NULL COMMENT '公司创建时间', `company_name` varchar(75) DEFAULT NULL COMMENT '公司名称', `company_addr` varchar(75) DEFAULT NULL COMMENT '公司所在地', `company_addr_id` varchar(50) DEFAULT NULL COMMENT '公司所在地编号', `company_addr_del` varchar(255) DEFAULT NULL COMMENT '公司详细地址', `company_tel` varchar(30) DEFAULT NULL COMMENT '公司电话', `company_emp_num` bigint(20) DEFAULT NULL COMMENT '员工总数', `company_capital` decimal(20,2) DEFAULT NULL COMMENT '注册资金', `company_email` varchar(75) DEFAULT NULL COMMENT '电子邮箱', `company_type` enum('1','2','3','4') DEFAULT NULL COMMENT '企业类型', `company_contact_name` varchar(75) DEFAULT NULL COMMENT '联系人姓名', `card_url` varchar(255) DEFAULT NULL COMMENT '法人身份证URL', `bank_url` varchar(255) DEFAULT NULL COMMENT '银行开户许可证URL', `company_contact_tel` varchar(30) DEFAULT NULL COMMENT '联系人电话', `company_research_url` varchar(255) DEFAULT NULL COMMENT '调研资料表url', `company_sku` decimal(20,2) DEFAULT NULL COMMENT 'SKU数量合计', `company_avg` enum('0','1') DEFAULT NULL COMMENT '平均客单价', `return_addr` varchar(255) DEFAULT NULL COMMENT '退货地址', `return_mail` varchar(30) DEFAULT NULL COMMENT '退货邮编', `return_contact_name` varchar(50) DEFAULT NULL COMMENT '退货联系人', `return_contact_tel` varchar(30) DEFAULT NULL COMMENT '退货联系电话', `buss_id` varchar(50) DEFAULT NULL COMMENT '营业执照号', `buss_addr` varchar(255) DEFAULT NULL COMMENT '营业执照所在地', `buss_addr_id` varchar(50) DEFAULT NULL COMMENT '营业执照所在地省市区街道编号', `BUSS_DATE` varchar(255) DEFAULT NULL COMMENT '营业执照有效期', `buss_dept_no` varchar(30) DEFAULT NULL COMMENT '组织机构代码', `buss_tax_regist_id` varchar(30) DEFAULT NULL COMMENT '税务登记证号', `buss_tax_regist_url` varchar(255) DEFAULT NULL COMMENT '税务登记证Url', `buss_tax_payer_id` varchar(30) DEFAULT NULL COMMENT '纳税人识别号', `buss_tax_cred_url` varchar(255) DEFAULT NULL COMMENT '纳税人资格证URL', `buss_tax_type` varchar(30) DEFAULT NULL COMMENT '税务类型', `buss_tax_type_id` varchar(30) DEFAULT NULL COMMENT '税务类型税码', `buss_legal_name` varchar(75) DEFAULT NULL COMMENT '法人代表', `buss_legal_card_id` varchar(18) DEFAULT NULL COMMENT '法人身份证编号', `buss_url` varchar(255) DEFAULT NULL COMMENT '营业执照电子版url', `buss_range` varchar(255) DEFAULT NULL COMMENT '经营范围', `bank_username` varchar(50) DEFAULT NULL COMMENT '银行开户名', `bank_card_id` varchar(50) DEFAULT NULL COMMENT '公司银行账号', `bank_addr` varchar(255) DEFAULT NULL COMMENT '开户银行所在地', `bank_addr_id` varchar(50) DEFAULT NULL COMMENT '银行所在地编号', `bank_name` varchar(75) DEFAULT NULL COMMENT '开户行支行名称', `back_status` enum('0','1') DEFAULT NULL COMMENT '0 未验证 1已打款 2 验证成功', `bank_id` varchar(75) DEFAULT NULL COMMENT '开户支行联行号', `check_status` enum('1','2','0') DEFAULT NULL COMMENT '审核状态0:审核中 1:已审核 2:未通过', `contract_url` varchar(255) DEFAULT NULL COMMENT '合同url', `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `mod_time` timestamp NULL DEFAULT '0000-00-00 00:00:00' COMMENT '修改时间', `del_flag` enum('1','0') DEFAULT NULL COMMENT '删除标记0否1是', `shop_trans_fee` decimal(20,2) DEFAULT NULL COMMENT '店铺运费', `is_submit` enum('1','0') DEFAULT NULL COMMENT '0未完全提交 1完成提交', `is_store_index` enum('1','0') DEFAULT '0' COMMENT '是否开启商家首页 0否 1是', `refuse_content` varchar(255) DEFAULT NULL COMMENT '打回原因', `billing_cycle` varchar(225) DEFAULT NULL COMMENT '结算周期', `store_promise` varchar(200) DEFAULT NULL COMMENT '店铺承诺', `store_qi` enum('2','1','0') DEFAULT '0' COMMENT ' 0专营店 1旗舰店 2专卖店', `sw_value` bigint(20) DEFAULT '30' COMMENT '货品库存预警值', `store_point` int(8) DEFAULT '100' COMMENT '商家积分', `store_balance` decimal(20,3) DEFAULT '100.000' COMMENT '商家账户余额', `qq_switch` enum('1','0') DEFAULT '0' COMMENT 'qq客服开关0否1是', `service_qq` varchar(100) DEFAULT NULL, `expiry_time` timestamp NULL DEFAULT '0000-00-00 00:00:00' COMMENT '商家店铺到期时间', `is_supplier` enum('1','0') DEFAULT '0' COMMENT '0不是供应商 1是供应商', `store_street_sort` bigint(20) DEFAULT NULL COMMENT '店铺街排序', `store_street_is_show` enum('1','0') DEFAULT '0' COMMENT '是否在店铺街显示 0:显示 1:不显示', `logo_url` varchar(255) DEFAULT NULL COMMENT '店铺logo', `is_choice` enum('1','0') DEFAULT '0' COMMENT ' 是否精选', `store_province` bigint(20) DEFAULT NULL COMMENT '店铺所在省', `store_city` bigint(20) DEFAULT NULL COMMENT '店铺所在市', `store_county` bigint(20) DEFAULT NULL COMMENT '店铺所在区', `store_village` bigint(20) DEFAULT NULL COMMENT '小区id', `longitude` varchar(255) DEFAULT NULL COMMENT '经度', `latitude` varchar(255) DEFAULT NULL COMMENT '纬度', `store_address` varchar(255) DEFAULT NULL COMMENT '店铺详细地址', `is_default_store` enum('0','1') CHARACTER SET utf8mb4 DEFAULT '0' COMMENT '是否默认店铺0否1是,默认0否', `store_image` varchar(255) DEFAULT NULL COMMENT '店铺图片', `is_bind` enum('0','1') DEFAULT NULL COMMENT '第三方是否绑定店铺0否1是', `start_businesshour` varchar(255) DEFAULT NULL COMMENT '店铺营业开始时间', `end_businesshour` varchar(255) DEFAULT NULL COMMENT '店铺营业结束时间', `store_code` varchar(50) DEFAULT NULL COMMENT '门店编码', PRIMARY KEY (`store_id`)) ENGINE=InnoDB AUTO_INCREMENT=1151 DEFAULT CHARSET=utf8 COMMENT='店铺基本信息表';Mysql 拿指定经纬度与数据库多条经纬度进行距离计算,计算公式:
公式如下,单位米:第一点经纬度:lng1 lat1第二点经纬度:lng2 lat2round(6378.138*2*asin(sqrt(pow(sin((lat1*pi()/180-lat2*pi()/180)/2),2)+cos(lat1*pi()/180)*cos(lat2*pi()/180)*pow(sin( (lng1*pi()/180-lng2*pi()/180)/2),2)))*1000)log1是已知经度,lat1是已知纬度,lng2是 数据库定义字段经度, lat2是数据库定义字段纬度
- java定位选择店铺
- 淘宝店铺该如何定位?
- 02.java实现冷饮批发管理系统-页面设计之【选择店铺页面】
- 淘宝新手——店铺定位
- 做淘宝店铺为什么一定要定位?
- 用户定位店铺功能-调用百度API
- 商场中精确定位用户所在店铺
- 店铺
- 制作淘宝搜索框,js选择店铺、宝贝
- 定位option 初始选择
- 网页光标选择定位
- 关键词如何选择定位?
- 阿里天池大赛[商场中精确定位用户所在店铺]赛后总结(后续会更新)
- java多线程(六) 之 店铺买卖多线程练习题
- 城市定位和选择列表
- 定位时,地图的选择
- redis的选择和定位
- Android ListView上下选择,定位
- Cookie Choice II ZOJ
- java子父类继承时方法重写与属性覆盖
- Java/Android 设计模式系列(12)--组合模式
- C#-WinForm班级下拉框数据绑定
- Html(快捷键!+Tab)
- java定位选择店铺
- UVA11082MatrixDecompressing
- 半年总结-择善而从
- form表单提交数据编码方式和tomcat接受数据解码方式的思考
- Spring:源码解读Spring IOC原理
- 10大排序算法大总结--Java实现
- scala的主辅构造器
- 【C#】错误“System.NullReferenceException:未将对象引用设置到对象的实例“解析
- pomelo源码分析(5)--node.js中的this