├── HTML └── V0_1.html ├── MVP_V0.1_Get address ├── README.md ├── baidumap.py ├── baidumap.pyc └── test.py ├── MVP_V0.2 └── edge.py ├── MVP_V0.2_contours ├── Contours.txt ├── WXJ_contours.txt ├── contours.py └── contours_list.txt ├── MVP_V0.3_CannyEdge_to_contours ├── COVER.jpg ├── Contours.txt ├── canny_contours.py ├── contours_list.txt ├── fx.jpg ├── fx_canny.jpg └── fx_canny_contours.jpg ├── MVP_V0.4_add url jpg ├── COVER.jpg ├── COVER_canny_img.jpg ├── Contours.log ├── README.md ├── canny_contours.py ├── fx.jpg ├── fx_canny.jpg └── fx_canny_contours.jpg ├── MVP_V0.5_LBS ├── driving_waypoint.html └── walking_route.html ├── MVP_V0.6_qnufop ├── README.MD └── index.html ├── MVP_V0.7_Wechat ├── app.py ├── app │ ├── __init__.py │ ├── logger.py │ ├── main │ │ ├── __init__.py │ │ ├── errors.py │ │ └── views.py │ ├── static │ │ ├── css │ │ │ ├── fontawesome │ │ │ │ ├── css │ │ │ │ │ └── font-awesome.min.css │ │ │ │ └── fonts │ │ │ │ │ ├── FontAwesome.otf │ │ │ │ │ ├── font-awesome.min.css │ │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ │ └── fontawesome-webfont.woff2 │ │ │ ├── jquery.datetimepicker.css │ │ │ ├── pagination.css │ │ │ └── track.css │ │ ├── data │ │ │ ├── 516915570.json │ │ │ ├── 516922851.json │ │ │ ├── 516977414.json │ │ │ ├── 517118819.json │ │ │ ├── list.json │ │ │ └── trace.json │ │ ├── favicon.ico │ │ ├── images │ │ │ ├── 11.png │ │ │ └── loading-1.gif │ │ ├── js │ │ │ ├── baiduTemplate.js │ │ │ ├── demoTrack.js │ │ │ ├── esl │ │ │ │ ├── css.js │ │ │ │ ├── esl.js │ │ │ │ └── js.js │ │ │ ├── jquery.datetimepicker.js │ │ │ ├── jquery.min.js │ │ │ ├── jquery.pagination.js │ │ │ ├── mousewheel.min.js │ │ │ ├── points-sample-data.js │ │ │ └── track │ │ │ │ └── demo.js │ │ └── points-sample-data.js │ └── templates │ │ ├── 404.html │ │ ├── 500.html │ │ ├── backup.html │ │ ├── index.html │ │ ├── index.html.1 │ │ └── yingyan.html ├── config.py ├── favicon.ico └── runapp.py ├── README.md └── doc └── nengji.md /HTML/V0_1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 单个标注点沿直线的轨迹运动 11 | 12 | 13 |
14 | 15 | 16 | 60 | -------------------------------------------------------------------------------- /MVP_V0.1_Get address/README.md: -------------------------------------------------------------------------------- 1 | # V0.1 2 | 3 | CLI实现坐标、地址信息的获取 4 | 5 | 运行:`Python test.py` 6 | 7 | + 坐标转换API: [http://developer.baidu.com/map/geocoding-api.htm](http://developer.baidu.com/map/geocoding-api.htm) 8 | 9 | ![](http://i5.tietuku.com/c489ada1e7dddbd0.jpg) 10 | 11 | 12 | #架构思考 13 | 14 | 整体流程: 15 | 前端请求自己部署的服务端→服务端→百度API 16 | 17 | →API返回数据至前端输出 18 | 19 | -------------------------------------------------------------------------------- /MVP_V0.1_Get address/baidumap.py: -------------------------------------------------------------------------------- 1 | #-*- coding:utf-8 -*- 2 | import urllib2,urllib,httplib 3 | import json 4 | 5 | 6 | class xBaiduMap: 7 | def __init__(self,key='1doDqShwqSeBGklH2y4uGR1A'): #key=ak 8 | self.host='http://api.map.baidu.com' 9 | self.path='/geocoder?' 10 | self.version='/v2' 11 | self.param={'address':None,'output':'json','key':key,'location':None,'city':None} 12 | 13 | def getLocation(self,address,city=None): 14 | rlt=self.geocoding('address',address,city) 15 | if rlt!=None: 16 | l=rlt['result'] 17 | if isinstance(l,list): 18 | return None 19 | return l['location']['lat'],l['location']['lng'] 20 | 21 | def getAddress(self,lat,lng): 22 | rlt=self.geocoding('location',"{0},{1}".format(lat,lng)) 23 | if rlt!=None: 24 | l=rlt['result'] 25 | return l['formatted_address'] 26 | #Here you can get more details about the location with 'addressComponent' key 27 | #ld=rlt['result']['addressComponent'] 28 | #print(ld['city']+';'+ld['street']) 29 | # 30 | def geocoding(self,key,value,city=None): 31 | if key=='location': 32 | if 'city' in self.param: 33 | del self.param['city'] 34 | if 'address' in self.param: 35 | del self.param['address'] 36 | 37 | elif key=='address': 38 | if 'location' in self.param: 39 | del self.param['location'] 40 | if city==None and 'city' in self.param: 41 | del self.param['city'] 42 | else: 43 | self.param['city']=city 44 | self.param[key]=value 45 | r=urllib.urlopen(self.host+self.path+urllib.urlencode(self.param)) 46 | rlt=json.loads(r.read()) 47 | if rlt['status']=='OK': 48 | return rlt 49 | else: 50 | print "Decoding Failed" 51 | return None 52 | -------------------------------------------------------------------------------- /MVP_V0.1_Get address/baidumap.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.1_Get address/baidumap.pyc -------------------------------------------------------------------------------- /MVP_V0.1_Get address/test.py: -------------------------------------------------------------------------------- 1 | #-*- coding:utf-8 -*- 2 | from baidumap import xBaiduMap 3 | bm=xBaiduMap() 4 | print bm.getLocation("天安门",'北京') 5 | print bm.getLocation("浙江大学玉泉校区") 6 | print bm.getLocation("浙江大学玉泉校区",'杭州') 7 | print bm.getAddress(39.912684,116.404049) 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /MVP_V0.2/edge.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python 2 | # coding=utf-8 3 | # author: shawn0lee0 4 | # email: run-map@googlegroups.com 5 | # version: 1.0 6 | 7 | print "OpenCV Python version of edge" 8 | 9 | import sys 10 | import urllib2 11 | import cv2.cv as cv 12 | import cv2 13 | 14 | # some definitions 15 | win_name = "Edge" 16 | trackbar_name = "Threshold" 17 | 18 | # the callback on the trackbar 19 | def on_trackbar(position): 20 | 21 | cv.Smooth(gray, edge, cv.CV_BLUR, 3, 3, 0) 22 | cv.Not(gray, edge) 23 | 24 | # run the edge dector on gray scale 25 | cv.Canny(gray, edge, position, position * 3, 3) 26 | 27 | print "Type_edge:%s"%type(edge) 28 | # reset 29 | cv.SetZero(col_edge) 30 | 31 | # copy edge points 32 | cv.Copy(im, col_edge, edge) 33 | 34 | 35 | 36 | # show the im 37 | cv.ShowImage(win_name, edge) 38 | 39 | if __name__ == '__main__': 40 | if len(sys.argv) > 1: 41 | im = cv.LoadImage( sys.argv[1], cv.CV_LOAD_IMAGE_COLOR) 42 | else: 43 | url = 'http://i12.tietuku.com/05ef0b29030fa46c.jpg' 44 | filedata = urllib2.urlopen(url).read() 45 | imagefiledata = cv.CreateMatHeader(1, len(filedata), cv.CV_8UC1) #创建并初始化矩阵头文件 46 | 47 | print "Type_imagefiledata:%s"%type(imagefiledata) 48 | cv.SetData(imagefiledata, filedata, len(filedata)) #将图片数据加入矩阵头文件中 49 | im = cv.DecodeImage(imagefiledata, cv.CV_LOAD_IMAGE_COLOR) 50 | print "Type_SetData_filedata:%s"%type(filedata) 51 | # create the output im 52 | col_edge = cv.CreateImage((im.width, im.height), 8, 3) 53 | 54 | # convert to grayscale 55 | gray = cv.CreateImage((im.width, im.height), 8, 1) 56 | edge = cv.CreateImage((im.width, im.height), 8, 1) 57 | cv.CvtColor(im, gray, cv.CV_BGR2GRAY) #将im灰度处理并存贮在gray的内存容器中 58 | 59 | # create the window 60 | cv.NamedWindow(win_name, cv.CV_WINDOW_AUTOSIZE) 61 | 62 | # create the trackbar 63 | cv.CreateTrackbar(trackbar_name, win_name, 1, 100, on_trackbar) 64 | 65 | # show the im 66 | on_trackbar(100) 67 | 68 | # wait a key pressed to end 69 | print "filedata:%s"%type(filedata) 70 | print "imagefiledata:%s"%type(imagefiledata) 71 | 72 | print "im_cv.DecodeImage:%s"%type(im) 73 | print "col_edge_cv.CreateImage:%s"%type(col_edge) 74 | print "gray_CreateImage:%s"%type(gray) 75 | print "After canny edge type:%s"%type(edge) 76 | ''' 77 | OpenCV Python version of edge 78 | Type_imagefiledata: 79 | Type_SetData_filedata: 80 | Type_edge: 81 | filedata: 82 | imagefiledata: 83 | im_cv.DecodeImage: 84 | col_edge_cv.CreateImage: 86 | After canny edge type: 87 | ''' 88 | cv.WaitKey(10000) #延迟ms,0表示一直 89 | #cv2.destroyAllWindows() -------------------------------------------------------------------------------- /MVP_V0.2_contours/Contours.txt: -------------------------------------------------------------------------------- 1 | Img GaussianBlur pix nums:217830 2 | contours num:1 3 | contours num:1 4 | [[[ 10 18]] 5 | 6 | [[ 10 249]] 7 | 8 | [[251 249]] 9 | 10 | [[251 18]]] 11 | **************************************************************************************************** 12 | -------------------------------------------------------------------------------- /MVP_V0.2_contours/WXJ_contours.txt: -------------------------------------------------------------------------------- 1 | contours num:1 2 | contours num:1 3 | [[[ 10 18]] 4 | 5 | [[ 10 249]] 6 | 7 | [[251 249]] 8 | 9 | [[251 18]]] 10 | **************************************************************************************************** 11 | -------------------------------------------------------------------------------- /MVP_V0.2_contours/contours.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.2_contours/contours.py -------------------------------------------------------------------------------- /MVP_V0.2_contours/contours_list.txt: -------------------------------------------------------------------------------- 1 | contours_list 2 | [[10, 18]] 3 | [[10, 249]] 4 | [[251, 249]] 5 | [[251, 18]] 6 | **************************************************************************************************** 7 | contours_list 8 | [[10, 18]] 9 | [[10, 249]] 10 | [[251, 249]] 11 | [[251, 18]] 12 | **************************************************************************************************** 13 | -------------------------------------------------------------------------------- /MVP_V0.3_CannyEdge_to_contours/COVER.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.3_CannyEdge_to_contours/COVER.jpg -------------------------------------------------------------------------------- /MVP_V0.3_CannyEdge_to_contours/canny_contours.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 2015年12月15日 OpenCV converting Canny edges to contours 3 | # runmap by shawn0lee0 4 | # Ref:http://stackoverflow.com/questions/18074680/extract-single-line-contours-from-canny-edges 5 | 6 | 7 | import cv2 8 | import sys,codecs 9 | import json #保证与javascript数据格式统一 10 | import cv2.cv as cv 11 | import numpy as np 12 | 13 | position = 25 14 | 15 | #def main(): 16 | img = cv2.imread('D:\\python\\RUNMAP\\MVP_V0.3_CannyEdge_to_contours\\COVER.jpg', 0) 17 | img = cv2.GaussianBlur(img,(3,3),0) 18 | if img is None: 19 | raise Exception("Error while loading the image") 20 | 21 | canny_img = cv2.Canny(img, position, position * 3) 22 | 23 | contours, hierarchy = cv2.findContours(canny_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 24 | contours_img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) 25 | str_len_contours = str(len(contours)) #取轮廊数量 26 | print "contours num:%s" %str_len_contours 27 | contours_list = contours[-1].tolist() 28 | print contours_list 29 | print contours_list[0][0] 30 | 31 | 32 | scale = 1 #不缩放 33 | contours_img = cv2.resize(contours_img, (0, 0), fx=scale, fy=scale) 34 | 35 | for cnt in contours: 36 | color = np.random.randint(0, 255, (3)).tolist() 37 | cv2.drawContours(contours_img,[cnt*scale], 0, color, 1) 38 | 39 | #cv2.imwrite("COVER.jpg", canny_img) 40 | #cv2.imwrite("fx_canny_contours.jpg", contours_img) 41 | cv2.imshow("canny_img", canny_img) 42 | cv2.imshow("contours_img", contours_img) 43 | 44 | img_pix = str(np.size(img)) 45 | gray_pix = str(np.size(contours_img)) 46 | canny_img_pix = str(np.size(canny_img)) 47 | #轮廊清单转文本输出 48 | s = open("Contours.txt",'a') 49 | s.write("Img Gausss pix nums:" +"%s" %img_pix + "\n") 50 | s.write("Gray pix nums:" +"%s" %gray_pix + "\n") 51 | s.write("canny_img_pix nums:" +"%s" %canny_img_pix + "\n") 52 | s.write("contours num:" +"%s" %str_len_contours + "\n") 53 | for ele in contours: 54 | s.write("%s\n" % ele) 55 | s.write("**"*50 + "\n") 56 | s.close() 57 | 58 | l = open("contours_list.txt",'a') 59 | l.write("Img Gausss pix nums:" +"%s" %img_pix + "\n") 60 | l.write("Gray pix nums:" +"%s" %gray_pix + "\n") 61 | l.write("canny_img_pix nums:" +"%s" %canny_img_pix + "\n") 62 | l.write("contours num:" +"%s" %str_len_contours + "\n") 63 | l.write("contours_list" + "\n") 64 | for ele in contours_list: 65 | l.write("%s\n" % ele) 66 | l.write("**"*50 + "\n") 67 | l.close() 68 | 69 | 70 | cv2.waitKey(0) 71 | -------------------------------------------------------------------------------- /MVP_V0.3_CannyEdge_to_contours/contours_list.txt: -------------------------------------------------------------------------------- 1 | Img Gausss pix nums:796800 2 | Gray pix nums:2390400 3 | canny_img_pix nums:796800 4 | contours num:852 5 | contours_list 6 | [[329, 27]] 7 | [[328, 28]] 8 | [[327, 28]] 9 | [[326, 28]] 10 | [[325, 29]] 11 | [[324, 29]] 12 | [[323, 29]] 13 | [[322, 29]] 14 | [[321, 29]] 15 | [[320, 29]] 16 | [[319, 29]] 17 | [[318, 30]] 18 | [[317, 30]] 19 | [[316, 30]] 20 | [[315, 31]] 21 | [[314, 31]] 22 | [[313, 32]] 23 | [[312, 32]] 24 | [[311, 32]] 25 | [[310, 33]] 26 | [[309, 33]] 27 | [[308, 34]] 28 | [[307, 34]] 29 | [[306, 35]] 30 | [[305, 35]] 31 | [[304, 36]] 32 | [[303, 37]] 33 | [[302, 38]] 34 | [[301, 39]] 35 | [[300, 40]] 36 | [[299, 41]] 37 | [[298, 42]] 38 | [[297, 42]] 39 | [[296, 43]] 40 | [[295, 44]] 41 | [[294, 45]] 42 | [[293, 46]] 43 | [[293, 47]] 44 | [[292, 48]] 45 | [[292, 49]] 46 | [[291, 50]] 47 | [[291, 51]] 48 | [[291, 52]] 49 | [[290, 53]] 50 | [[290, 54]] 51 | [[289, 55]] 52 | [[289, 56]] 53 | [[288, 57]] 54 | [[288, 58]] 55 | [[288, 59]] 56 | [[288, 60]] 57 | [[287, 61]] 58 | [[286, 62]] 59 | [[286, 63]] 60 | [[286, 64]] 61 | [[286, 65]] 62 | [[285, 66]] 63 | [[285, 67]] 64 | [[285, 68]] 65 | [[284, 69]] 66 | [[284, 70]] 67 | [[283, 71]] 68 | [[282, 72]] 69 | [[282, 73]] 70 | [[281, 74]] 71 | [[280, 75]] 72 | [[279, 76]] 73 | [[278, 77]] 74 | [[278, 78]] 75 | [[277, 79]] 76 | [[276, 80]] 77 | [[275, 81]] 78 | [[275, 82]] 79 | [[276, 83]] 80 | [[276, 84]] 81 | [[277, 85]] 82 | [[277, 86]] 83 | [[277, 87]] 84 | [[277, 88]] 85 | [[277, 89]] 86 | [[278, 90]] 87 | [[277, 91]] 88 | [[278, 92]] 89 | [[278, 93]] 90 | [[278, 94]] 91 | [[278, 95]] 92 | [[278, 96]] 93 | [[277, 97]] 94 | [[277, 98]] 95 | [[277, 99]] 96 | [[277, 100]] 97 | [[277, 101]] 98 | [[277, 102]] 99 | [[277, 103]] 100 | [[277, 104]] 101 | [[277, 105]] 102 | [[277, 106]] 103 | [[276, 107]] 104 | [[276, 108]] 105 | [[276, 109]] 106 | [[275, 110]] 107 | [[276, 111]] 108 | [[276, 112]] 109 | [[277, 113]] 110 | [[277, 114]] 111 | [[277, 115]] 112 | [[276, 116]] 113 | [[275, 117]] 114 | [[274, 118]] 115 | [[273, 119]] 116 | [[272, 120]] 117 | [[271, 121]] 118 | [[270, 122]] 119 | [[269, 123]] 120 | [[268, 123]] 121 | [[267, 124]] 122 | [[266, 124]] 123 | [[265, 125]] 124 | [[264, 125]] 125 | [[263, 125]] 126 | [[262, 126]] 127 | [[261, 126]] 128 | [[260, 127]] 129 | [[259, 127]] 130 | [[258, 128]] 131 | [[257, 128]] 132 | [[256, 129]] 133 | [[255, 129]] 134 | [[254, 129]] 135 | [[253, 130]] 136 | [[252, 130]] 137 | [[251, 131]] 138 | [[250, 131]] 139 | [[249, 132]] 140 | [[248, 133]] 141 | [[247, 133]] 142 | [[246, 134]] 143 | [[245, 135]] 144 | [[244, 135]] 145 | [[243, 136]] 146 | [[242, 137]] 147 | [[241, 137]] 148 | [[240, 138]] 149 | [[239, 139]] 150 | [[238, 140]] 151 | [[237, 140]] 152 | [[236, 141]] 153 | [[235, 142]] 154 | [[234, 143]] 155 | [[233, 143]] 156 | [[232, 144]] 157 | [[231, 145]] 158 | [[230, 145]] 159 | [[229, 146]] 160 | [[228, 147]] 161 | [[227, 147]] 162 | [[226, 148]] 163 | [[225, 149]] 164 | [[224, 150]] 165 | [[223, 150]] 166 | [[222, 151]] 167 | [[221, 151]] 168 | [[220, 152]] 169 | [[219, 153]] 170 | [[218, 154]] 171 | [[217, 154]] 172 | [[216, 155]] 173 | [[215, 156]] 174 | [[214, 156]] 175 | [[213, 157]] 176 | [[212, 157]] 177 | [[211, 158]] 178 | [[210, 159]] 179 | [[209, 159]] 180 | [[208, 160]] 181 | [[208, 161]] 182 | [[208, 162]] 183 | [[208, 163]] 184 | [[209, 164]] 185 | [[210, 165]] 186 | [[210, 166]] 187 | [[211, 167]] 188 | [[211, 168]] 189 | [[212, 169]] 190 | [[212, 170]] 191 | [[212, 171]] 192 | [[213, 172]] 193 | [[213, 173]] 194 | [[214, 174]] 195 | [[214, 175]] 196 | [[214, 176]] 197 | [[215, 177]] 198 | [[215, 178]] 199 | [[216, 179]] 200 | [[216, 180]] 201 | [[216, 181]] 202 | [[217, 182]] 203 | [[217, 183]] 204 | [[217, 184]] 205 | [[218, 185]] 206 | [[218, 186]] 207 | [[218, 187]] 208 | [[218, 188]] 209 | [[219, 189]] 210 | [[219, 190]] 211 | [[219, 191]] 212 | [[219, 192]] 213 | [[220, 193]] 214 | [[220, 194]] 215 | [[220, 195]] 216 | [[220, 196]] 217 | [[221, 197]] 218 | [[221, 198]] 219 | [[221, 199]] 220 | [[221, 200]] 221 | [[221, 201]] 222 | [[221, 202]] 223 | [[222, 203]] 224 | [[222, 204]] 225 | [[222, 205]] 226 | [[222, 206]] 227 | [[222, 207]] 228 | [[223, 208]] 229 | [[223, 209]] 230 | [[223, 210]] 231 | [[223, 211]] 232 | [[224, 212]] 233 | [[224, 213]] 234 | [[224, 214]] 235 | [[224, 215]] 236 | [[224, 214]] 237 | [[224, 213]] 238 | [[224, 212]] 239 | [[223, 211]] 240 | [[223, 210]] 241 | [[223, 209]] 242 | [[223, 208]] 243 | [[222, 207]] 244 | [[222, 206]] 245 | [[222, 205]] 246 | [[222, 204]] 247 | [[222, 203]] 248 | [[221, 202]] 249 | [[221, 201]] 250 | [[221, 200]] 251 | [[221, 199]] 252 | [[221, 198]] 253 | [[221, 197]] 254 | [[220, 196]] 255 | [[220, 195]] 256 | [[220, 194]] 257 | [[220, 193]] 258 | [[219, 192]] 259 | [[219, 191]] 260 | [[219, 190]] 261 | [[219, 189]] 262 | [[218, 188]] 263 | [[218, 187]] 264 | [[218, 186]] 265 | [[218, 185]] 266 | [[217, 184]] 267 | [[217, 183]] 268 | [[217, 182]] 269 | [[216, 181]] 270 | [[216, 180]] 271 | [[216, 179]] 272 | [[215, 178]] 273 | [[215, 177]] 274 | [[214, 176]] 275 | [[214, 175]] 276 | [[214, 174]] 277 | [[214, 173]] 278 | [[213, 172]] 279 | [[213, 171]] 280 | [[212, 170]] 281 | [[212, 169]] 282 | [[212, 168]] 283 | [[211, 167]] 284 | [[211, 166]] 285 | [[210, 165]] 286 | [[209, 164]] 287 | [[209, 163]] 288 | [[208, 162]] 289 | [[208, 161]] 290 | [[209, 160]] 291 | [[210, 159]] 292 | [[211, 159]] 293 | [[212, 158]] 294 | [[213, 157]] 295 | [[214, 157]] 296 | [[215, 156]] 297 | [[216, 156]] 298 | [[217, 155]] 299 | [[218, 154]] 300 | [[219, 154]] 301 | [[220, 155]] 302 | [[221, 156]] 303 | [[222, 157]] 304 | [[222, 158]] 305 | [[221, 159]] 306 | [[220, 160]] 307 | [[219, 160]] 308 | [[218, 161]] 309 | [[217, 161]] 310 | [[216, 161]] 311 | [[215, 160]] 312 | [[215, 161]] 313 | [[216, 161]] 314 | [[217, 161]] 315 | [[218, 161]] 316 | [[219, 161]] 317 | [[220, 160]] 318 | [[221, 160]] 319 | [[222, 159]] 320 | [[222, 158]] 321 | [[222, 157]] 322 | [[222, 156]] 323 | [[222, 155]] 324 | [[221, 156]] 325 | [[220, 155]] 326 | [[219, 154]] 327 | [[220, 153]] 328 | [[221, 152]] 329 | [[222, 151]] 330 | [[223, 151]] 331 | [[224, 150]] 332 | [[225, 150]] 333 | [[226, 149]] 334 | [[227, 148]] 335 | [[228, 147]] 336 | [[229, 147]] 337 | [[230, 146]] 338 | [[231, 145]] 339 | [[232, 145]] 340 | [[233, 144]] 341 | [[234, 143]] 342 | [[235, 143]] 343 | [[236, 142]] 344 | [[237, 141]] 345 | [[238, 140]] 346 | [[239, 140]] 347 | [[240, 139]] 348 | [[241, 138]] 349 | [[242, 137]] 350 | [[243, 137]] 351 | [[244, 136]] 352 | [[245, 135]] 353 | [[246, 135]] 354 | [[247, 134]] 355 | [[248, 133]] 356 | [[249, 133]] 357 | [[250, 132]] 358 | [[251, 131]] 359 | [[252, 131]] 360 | [[253, 130]] 361 | [[254, 130]] 362 | [[255, 129]] 363 | [[256, 129]] 364 | [[257, 128]] 365 | [[258, 128]] 366 | [[259, 127]] 367 | [[260, 127]] 368 | [[261, 127]] 369 | [[262, 126]] 370 | [[263, 126]] 371 | [[264, 125]] 372 | [[265, 125]] 373 | [[266, 124]] 374 | [[267, 124]] 375 | [[268, 124]] 376 | [[269, 123]] 377 | [[270, 123]] 378 | [[271, 122]] 379 | [[272, 121]] 380 | [[273, 120]] 381 | [[274, 119]] 382 | [[275, 118]] 383 | [[276, 117]] 384 | [[277, 116]] 385 | [[278, 115]] 386 | [[277, 114]] 387 | [[278, 113]] 388 | [[277, 112]] 389 | [[276, 111]] 390 | [[275, 110]] 391 | [[276, 109]] 392 | [[276, 108]] 393 | [[276, 107]] 394 | [[277, 106]] 395 | [[277, 105]] 396 | [[277, 104]] 397 | [[277, 103]] 398 | [[277, 102]] 399 | [[277, 101]] 400 | [[277, 100]] 401 | [[277, 99]] 402 | [[277, 98]] 403 | [[277, 97]] 404 | [[278, 96]] 405 | [[278, 95]] 406 | [[278, 94]] 407 | [[278, 93]] 408 | [[278, 92]] 409 | [[277, 91]] 410 | [[278, 90]] 411 | [[277, 89]] 412 | [[277, 88]] 413 | [[277, 87]] 414 | [[277, 86]] 415 | [[277, 85]] 416 | [[276, 84]] 417 | [[276, 83]] 418 | [[275, 82]] 419 | [[276, 81]] 420 | [[277, 80]] 421 | [[278, 79]] 422 | [[279, 80]] 423 | [[279, 81]] 424 | [[279, 82]] 425 | [[279, 83]] 426 | [[279, 82]] 427 | [[279, 81]] 428 | [[280, 80]] 429 | [[281, 81]] 430 | [[281, 82]] 431 | [[281, 83]] 432 | [[281, 84]] 433 | [[281, 85]] 434 | [[281, 84]] 435 | [[281, 83]] 436 | [[281, 82]] 437 | [[281, 81]] 438 | [[281, 80]] 439 | [[282, 79]] 440 | [[283, 78]] 441 | [[283, 77]] 442 | [[284, 76]] 443 | [[284, 75]] 444 | [[285, 74]] 445 | [[285, 73]] 446 | [[284, 74]] 447 | [[284, 75]] 448 | [[283, 76]] 449 | [[283, 77]] 450 | [[282, 78]] 451 | [[281, 79]] 452 | [[280, 80]] 453 | [[279, 80]] 454 | [[278, 79]] 455 | [[278, 78]] 456 | [[279, 77]] 457 | [[280, 76]] 458 | [[281, 75]] 459 | [[282, 74]] 460 | [[282, 73]] 461 | [[283, 72]] 462 | [[284, 71]] 463 | [[284, 70]] 464 | [[285, 69]] 465 | [[285, 68]] 466 | [[285, 67]] 467 | [[285, 66]] 468 | [[286, 65]] 469 | [[286, 64]] 470 | [[286, 63]] 471 | [[287, 62]] 472 | [[288, 61]] 473 | [[288, 60]] 474 | [[288, 59]] 475 | [[288, 58]] 476 | [[288, 57]] 477 | [[289, 56]] 478 | [[289, 55]] 479 | [[290, 54]] 480 | [[290, 53]] 481 | [[291, 52]] 482 | [[291, 51]] 483 | [[292, 50]] 484 | [[292, 49]] 485 | [[293, 48]] 486 | [[293, 47]] 487 | [[294, 46]] 488 | [[295, 45]] 489 | [[296, 44]] 490 | [[297, 43]] 491 | [[298, 42]] 492 | [[299, 42]] 493 | [[300, 41]] 494 | [[301, 40]] 495 | [[302, 39]] 496 | [[303, 38]] 497 | [[304, 37]] 498 | [[305, 36]] 499 | [[306, 35]] 500 | [[307, 35]] 501 | [[308, 34]] 502 | [[309, 34]] 503 | [[310, 33]] 504 | [[311, 33]] 505 | [[312, 32]] 506 | [[313, 32]] 507 | [[314, 31]] 508 | [[315, 31]] 509 | [[316, 30]] 510 | [[317, 30]] 511 | [[318, 30]] 512 | [[319, 29]] 513 | [[320, 29]] 514 | [[321, 29]] 515 | [[322, 29]] 516 | [[323, 29]] 517 | [[324, 29]] 518 | [[325, 29]] 519 | [[326, 28]] 520 | [[327, 28]] 521 | [[328, 28]] 522 | [[329, 27]] 523 | [[330, 27]] 524 | [[331, 27]] 525 | [[332, 27]] 526 | [[333, 27]] 527 | [[334, 27]] 528 | [[335, 28]] 529 | [[336, 28]] 530 | [[337, 29]] 531 | [[338, 29]] 532 | [[339, 29]] 533 | [[340, 29]] 534 | [[341, 29]] 535 | [[342, 29]] 536 | [[343, 29]] 537 | [[344, 30]] 538 | [[345, 30]] 539 | [[346, 30]] 540 | [[347, 31]] 541 | [[346, 32]] 542 | [[345, 32]] 543 | [[344, 32]] 544 | [[343, 32]] 545 | [[342, 32]] 546 | [[341, 33]] 547 | [[340, 33]] 548 | [[339, 34]] 549 | [[338, 35]] 550 | [[339, 35]] 551 | [[340, 36]] 552 | [[340, 37]] 553 | [[339, 38]] 554 | [[338, 38]] 555 | [[337, 38]] 556 | [[336, 37]] 557 | [[335, 37]] 558 | [[334, 37]] 559 | [[333, 36]] 560 | [[332, 35]] 561 | [[332, 34]] 562 | [[332, 35]] 563 | [[332, 36]] 564 | [[331, 37]] 565 | [[330, 36]] 566 | [[330, 35]] 567 | [[330, 34]] 568 | [[330, 33]] 569 | [[331, 32]] 570 | [[330, 32]] 571 | [[329, 32]] 572 | [[328, 31]] 573 | [[327, 31]] 574 | [[328, 31]] 575 | [[329, 32]] 576 | [[330, 33]] 577 | [[330, 34]] 578 | [[330, 35]] 579 | [[330, 36]] 580 | [[329, 37]] 581 | [[328, 37]] 582 | [[327, 38]] 583 | [[326, 38]] 584 | [[325, 38]] 585 | [[324, 38]] 586 | [[323, 37]] 587 | [[322, 36]] 588 | [[322, 35]] 589 | [[323, 34]] 590 | [[324, 34]] 591 | [[323, 34]] 592 | [[322, 35]] 593 | [[321, 34]] 594 | [[320, 34]] 595 | [[321, 35]] 596 | [[322, 36]] 597 | [[323, 37]] 598 | [[322, 38]] 599 | [[321, 38]] 600 | [[320, 38]] 601 | [[319, 37]] 602 | [[319, 36]] 603 | [[318, 36]] 604 | [[317, 36]] 605 | [[318, 36]] 606 | [[319, 37]] 607 | [[320, 38]] 608 | [[319, 39]] 609 | [[318, 39]] 610 | [[317, 39]] 611 | [[316, 39]] 612 | [[315, 40]] 613 | [[314, 41]] 614 | [[313, 42]] 615 | [[312, 43]] 616 | [[311, 44]] 617 | [[310, 44]] 618 | [[309, 43]] 619 | [[308, 44]] 620 | [[307, 44]] 621 | [[306, 44]] 622 | [[305, 44]] 623 | [[304, 44]] 624 | [[303, 45]] 625 | [[302, 45]] 626 | [[301, 46]] 627 | [[302, 46]] 628 | [[303, 45]] 629 | [[304, 45]] 630 | [[305, 44]] 631 | [[306, 44]] 632 | [[307, 44]] 633 | [[308, 44]] 634 | [[309, 44]] 635 | [[310, 44]] 636 | [[311, 44]] 637 | [[312, 45]] 638 | [[312, 46]] 639 | [[312, 47]] 640 | [[312, 48]] 641 | [[311, 49]] 642 | [[310, 50]] 643 | [[310, 51]] 644 | [[309, 52]] 645 | [[308, 53]] 646 | [[307, 54]] 647 | [[306, 54]] 648 | [[305, 54]] 649 | [[304, 54]] 650 | [[303, 54]] 651 | [[302, 54]] 652 | [[301, 53]] 653 | [[300, 53]] 654 | [[299, 53]] 655 | [[298, 52]] 656 | [[299, 51]] 657 | [[299, 50]] 658 | [[299, 49]] 659 | [[299, 48]] 660 | [[299, 47]] 661 | [[299, 48]] 662 | [[299, 49]] 663 | [[299, 50]] 664 | [[299, 51]] 665 | [[298, 52]] 666 | [[299, 53]] 667 | [[299, 54]] 668 | [[299, 55]] 669 | [[300, 56]] 670 | [[301, 56]] 671 | [[300, 56]] 672 | [[299, 55]] 673 | [[299, 54]] 674 | [[300, 53]] 675 | [[301, 54]] 676 | [[302, 54]] 677 | [[303, 54]] 678 | [[304, 55]] 679 | [[305, 54]] 680 | [[306, 54]] 681 | [[307, 55]] 682 | [[306, 56]] 683 | [[306, 57]] 684 | [[306, 58]] 685 | [[306, 59]] 686 | [[306, 60]] 687 | [[306, 61]] 688 | [[306, 62]] 689 | [[306, 63]] 690 | [[306, 64]] 691 | [[306, 63]] 692 | [[306, 62]] 693 | [[306, 61]] 694 | [[306, 60]] 695 | [[306, 59]] 696 | [[306, 58]] 697 | [[306, 57]] 698 | [[306, 56]] 699 | [[307, 55]] 700 | [[307, 54]] 701 | [[308, 53]] 702 | [[309, 52]] 703 | [[310, 52]] 704 | [[310, 51]] 705 | [[311, 50]] 706 | [[312, 49]] 707 | [[312, 48]] 708 | [[312, 47]] 709 | [[312, 46]] 710 | [[312, 45]] 711 | [[312, 44]] 712 | [[313, 43]] 713 | [[314, 42]] 714 | [[315, 41]] 715 | [[316, 40]] 716 | [[317, 39]] 717 | [[318, 39]] 718 | [[319, 39]] 719 | [[320, 38]] 720 | [[321, 38]] 721 | [[322, 38]] 722 | [[323, 38]] 723 | [[324, 38]] 724 | [[325, 38]] 725 | [[326, 38]] 726 | [[327, 38]] 727 | [[328, 38]] 728 | [[329, 37]] 729 | [[330, 37]] 730 | [[331, 37]] 731 | [[332, 37]] 732 | [[333, 37]] 733 | [[334, 37]] 734 | [[335, 37]] 735 | [[336, 37]] 736 | [[337, 38]] 737 | [[338, 38]] 738 | [[339, 38]] 739 | [[340, 38]] 740 | [[341, 38]] 741 | [[342, 38]] 742 | [[343, 37]] 743 | [[344, 36]] 744 | [[343, 35]] 745 | [[344, 34]] 746 | [[343, 35]] 747 | [[342, 35]] 748 | [[341, 35]] 749 | [[340, 36]] 750 | [[339, 35]] 751 | [[339, 34]] 752 | [[340, 33]] 753 | [[341, 33]] 754 | [[342, 33]] 755 | [[343, 32]] 756 | [[344, 32]] 757 | [[345, 32]] 758 | [[346, 32]] 759 | [[347, 32]] 760 | [[347, 31]] 761 | [[347, 30]] 762 | [[346, 30]] 763 | [[345, 30]] 764 | [[344, 30]] 765 | [[343, 29]] 766 | [[342, 29]] 767 | [[341, 29]] 768 | [[340, 29]] 769 | [[339, 28]] 770 | [[338, 28]] 771 | [[337, 28]] 772 | [[336, 28]] 773 | [[335, 28]] 774 | [[334, 27]] 775 | [[333, 27]] 776 | [[332, 27]] 777 | [[331, 27]] 778 | [[330, 27]] 779 | **************************************************************************************************** 780 | -------------------------------------------------------------------------------- /MVP_V0.3_CannyEdge_to_contours/fx.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.3_CannyEdge_to_contours/fx.jpg -------------------------------------------------------------------------------- /MVP_V0.3_CannyEdge_to_contours/fx_canny.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.3_CannyEdge_to_contours/fx_canny.jpg -------------------------------------------------------------------------------- /MVP_V0.3_CannyEdge_to_contours/fx_canny_contours.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.3_CannyEdge_to_contours/fx_canny_contours.jpg -------------------------------------------------------------------------------- /MVP_V0.4_add url jpg/COVER.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.4_add url jpg/COVER.jpg -------------------------------------------------------------------------------- /MVP_V0.4_add url jpg/COVER_canny_img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.4_add url jpg/COVER_canny_img.jpg -------------------------------------------------------------------------------- /MVP_V0.4_add url jpg/Contours.log: -------------------------------------------------------------------------------- 1 | edge_im_array_pix nums:228484 2 | contours_img_pix nums:685452 3 | _url_contours num:6 4 | [[[375 241]] 5 | 6 | [[374 242]] 7 | 8 | [[370 242]] 9 | 10 | [[369 243]] 11 | 12 | [[367 243]] 13 | 14 | [[366 244]] 15 | 16 | [[364 244]] 17 | 18 | [[363 245]] 19 | 20 | [[361 245]] 21 | 22 | [[360 246]] 23 | 24 | [[359 246]] 25 | 26 | [[358 247]] 27 | 28 | [[357 247]] 29 | 30 | [[355 249]] 31 | 32 | [[354 249]] 33 | 34 | [[350 253]] 35 | 36 | [[349 253]] 37 | 38 | [[345 257]] 39 | 40 | [[345 258]] 41 | 42 | [[342 261]] 43 | 44 | [[342 262]] 45 | 46 | [[340 264]] 47 | 48 | [[340 265]] 49 | 50 | [[339 266]] 51 | 52 | [[339 267]] 53 | 54 | [[338 268]] 55 | 56 | [[338 269]] 57 | 58 | [[337 270]] 59 | 60 | [[337 273]] 61 | 62 | [[336 274]] 63 | 64 | [[336 276]] 65 | 66 | [[335 277]] 67 | 68 | [[335 281]] 69 | 70 | [[334 282]] 71 | 72 | [[334 295]] 73 | 74 | [[335 296]] 75 | 76 | [[335 300]] 77 | 78 | [[336 301]] 79 | 80 | [[336 303]] 81 | 82 | [[337 304]] 83 | 84 | [[337 306]] 85 | 86 | [[338 307]] 87 | 88 | [[338 309]] 89 | 90 | [[339 310]] 91 | 92 | [[339 311]] 93 | 94 | [[341 313]] 95 | 96 | [[341 314]] 97 | 98 | [[343 316]] 99 | 100 | [[343 317]] 101 | 102 | [[353 327]] 103 | 104 | [[354 327]] 105 | 106 | [[356 329]] 107 | 108 | [[357 329]] 109 | 110 | [[358 330]] 111 | 112 | [[359 330]] 113 | 114 | [[360 331]] 115 | 116 | [[361 331]] 117 | 118 | [[362 332]] 119 | 120 | [[364 332]] 121 | 122 | [[365 333]] 123 | 124 | [[366 333]] 125 | 126 | [[367 334]] 127 | 128 | [[370 334]] 129 | 130 | [[371 335]] 131 | 132 | [[376 335]] 133 | 134 | [[377 336]] 135 | 136 | [[386 336]] 137 | 138 | [[387 335]] 139 | 140 | [[392 335]] 141 | 142 | [[393 334]] 143 | 144 | [[395 334]] 145 | 146 | [[396 333]] 147 | 148 | [[398 333]] 149 | 150 | [[399 332]] 151 | 152 | [[400 332]] 153 | 154 | [[401 331]] 155 | 156 | [[403 331]] 157 | 158 | [[404 330]] 159 | 160 | [[405 330]] 161 | 162 | [[407 328]] 163 | 164 | [[408 328]] 165 | 166 | [[410 326]] 167 | 168 | [[411 326]] 169 | 170 | [[418 319]] 171 | 172 | [[418 318]] 173 | 174 | [[421 315]] 175 | 176 | [[421 314]] 177 | 178 | [[422 313]] 179 | 180 | [[422 312]] 181 | 182 | [[423 311]] 183 | 184 | [[423 310]] 185 | 186 | [[424 309]] 187 | 188 | [[424 308]] 189 | 190 | [[425 307]] 191 | 192 | [[425 306]] 193 | 194 | [[426 305]] 195 | 196 | [[426 303]] 197 | 198 | [[427 302]] 199 | 200 | [[427 299]] 201 | 202 | [[428 298]] 203 | 204 | [[428 291]] 205 | 206 | [[429 290]] 207 | 208 | [[427 288]] 209 | 210 | [[416 288]] 211 | 212 | [[415 289]] 213 | 214 | [[415 291]] 215 | 216 | [[414 292]] 217 | 218 | [[414 297]] 219 | 220 | [[413 298]] 221 | 222 | [[413 300]] 223 | 224 | [[412 301]] 225 | 226 | [[412 302]] 227 | 228 | [[411 303]] 229 | 230 | [[411 304]] 231 | 232 | [[409 306]] 233 | 234 | [[409 307]] 235 | 236 | [[400 316]] 237 | 238 | [[399 316]] 239 | 240 | [[397 318]] 241 | 242 | [[396 318]] 243 | 244 | [[395 319]] 245 | 246 | [[394 319]] 247 | 248 | [[393 320]] 249 | 250 | [[391 320]] 251 | 252 | [[390 321]] 253 | 254 | [[386 321]] 255 | 256 | [[385 322]] 257 | 258 | [[377 322]] 259 | 260 | [[376 321]] 261 | 262 | [[372 321]] 263 | 264 | [[371 320]] 265 | 266 | [[369 320]] 267 | 268 | [[367 318]] 269 | 270 | [[366 318]] 271 | 272 | [[365 317]] 273 | 274 | [[364 317]] 275 | 276 | [[362 315]] 277 | 278 | [[361 315]] 279 | 280 | [[354 308]] 281 | 282 | [[354 307]] 283 | 284 | [[352 305]] 285 | 286 | [[352 304]] 287 | 288 | [[351 303]] 289 | 290 | [[351 301]] 291 | 292 | [[349 299]] 293 | 294 | [[349 296]] 295 | 296 | [[348 295]] 297 | 298 | [[348 282]] 299 | 300 | [[349 281]] 301 | 302 | [[349 278]] 303 | 304 | [[350 277]] 305 | 306 | [[350 276]] 307 | 308 | [[351 275]] 309 | 310 | [[351 274]] 311 | 312 | [[352 273]] 313 | 314 | [[352 272]] 315 | 316 | [[354 270]] 317 | 318 | [[354 269]] 319 | 320 | [[362 261]] 321 | 322 | [[363 261]] 323 | 324 | [[365 259]] 325 | 326 | [[366 259]] 327 | 328 | [[367 258]] 329 | 330 | [[368 258]] 331 | 332 | [[369 257]] 333 | 334 | [[371 257]] 335 | 336 | [[372 256]] 337 | 338 | [[375 256]] 339 | 340 | [[376 255]] 341 | 342 | [[475 255]] 343 | 344 | [[476 256]] 345 | 346 | [[476 255]] 347 | 348 | [[376 255]] 349 | 350 | [[375 256]] 351 | 352 | [[372 256]] 353 | 354 | [[371 257]] 355 | 356 | [[369 257]] 357 | 358 | [[368 258]] 359 | 360 | [[366 258]] 361 | 362 | [[365 259]] 363 | 364 | [[364 259]] 365 | 366 | [[362 261]] 367 | 368 | [[361 261]] 369 | 370 | [[354 268]] 371 | 372 | [[354 269]] 373 | 374 | [[352 271]] 375 | 376 | [[352 272]] 377 | 378 | [[351 273]] 379 | 380 | [[351 275]] 381 | 382 | [[350 276]] 383 | 384 | [[350 277]] 385 | 386 | [[349 278]] 387 | 388 | [[349 281]] 389 | 390 | [[348 282]] 391 | 392 | [[348 295]] 393 | 394 | [[349 296]] 395 | 396 | [[349 299]] 397 | 398 | [[350 300]] 399 | 400 | [[350 301]] 401 | 402 | [[351 302]] 403 | 404 | [[351 304]] 405 | 406 | [[352 305]] 407 | 408 | [[352 306]] 409 | 410 | [[354 308]] 411 | 412 | [[354 309]] 413 | 414 | [[360 315]] 415 | 416 | [[361 315]] 417 | 418 | [[363 317]] 419 | 420 | [[364 317]] 421 | 422 | [[365 318]] 423 | 424 | [[366 318]] 425 | 426 | [[367 319]] 427 | 428 | [[368 319]] 429 | 430 | [[369 320]] 431 | 432 | [[371 320]] 433 | 434 | [[372 321]] 435 | 436 | [[376 321]] 437 | 438 | [[377 322]] 439 | 440 | [[385 322]] 441 | 442 | [[386 321]] 443 | 444 | [[390 321]] 445 | 446 | [[391 320]] 447 | 448 | [[394 320]] 449 | 450 | [[395 319]] 451 | 452 | [[396 319]] 453 | 454 | [[397 318]] 455 | 456 | [[398 318]] 457 | 458 | [[400 316]] 459 | 460 | [[401 316]] 461 | 462 | [[409 308]] 463 | 464 | [[409 307]] 465 | 466 | [[411 305]] 467 | 468 | [[411 303]] 469 | 470 | [[412 302]] 471 | 472 | [[412 301]] 473 | 474 | [[413 300]] 475 | 476 | [[413 298]] 477 | 478 | [[414 297]] 479 | 480 | [[414 292]] 481 | 482 | [[415 291]] 483 | 484 | [[415 289]] 485 | 486 | [[416 288]] 487 | 488 | [[427 288]] 489 | 490 | [[429 290]] 491 | 492 | [[428 291]] 493 | 494 | [[428 298]] 495 | 496 | [[427 299]] 497 | 498 | [[427 302]] 499 | 500 | [[426 303]] 501 | 502 | [[426 305]] 503 | 504 | [[425 306]] 505 | 506 | [[425 307]] 507 | 508 | [[423 309]] 509 | 510 | [[423 310]] 511 | 512 | [[422 311]] 513 | 514 | [[422 312]] 515 | 516 | [[421 313]] 517 | 518 | [[421 314]] 519 | 520 | [[418 317]] 521 | 522 | [[418 318]] 523 | 524 | [[410 326]] 525 | 526 | [[409 326]] 527 | 528 | [[407 328]] 529 | 530 | [[406 328]] 531 | 532 | [[404 330]] 533 | 534 | [[403 330]] 535 | 536 | [[402 331]] 537 | 538 | [[401 331]] 539 | 540 | [[400 332]] 541 | 542 | [[399 332]] 543 | 544 | [[398 333]] 545 | 546 | [[396 333]] 547 | 548 | [[395 334]] 549 | 550 | [[393 334]] 551 | 552 | [[392 335]] 553 | 554 | [[387 335]] 555 | 556 | [[386 336]] 557 | 558 | [[377 336]] 559 | 560 | [[376 335]] 561 | 562 | [[371 335]] 563 | 564 | [[370 334]] 565 | 566 | [[367 334]] 567 | 568 | [[366 333]] 569 | 570 | [[365 333]] 571 | 572 | [[364 332]] 573 | 574 | [[362 332]] 575 | 576 | [[360 330]] 577 | 578 | [[359 330]] 579 | 580 | [[358 329]] 581 | 582 | [[357 329]] 583 | 584 | [[355 327]] 585 | 586 | [[354 327]] 587 | 588 | [[343 316]] 589 | 590 | [[343 315]] 591 | 592 | [[341 313]] 593 | 594 | [[341 312]] 595 | 596 | [[339 310]] 597 | 598 | [[339 309]] 599 | 600 | [[338 308]] 601 | 602 | [[338 307]] 603 | 604 | [[337 306]] 605 | 606 | [[337 304]] 607 | 608 | [[336 303]] 609 | 610 | [[336 301]] 611 | 612 | [[335 300]] 613 | 614 | [[335 296]] 615 | 616 | [[334 295]] 617 | 618 | [[334 282]] 619 | 620 | [[335 281]] 621 | 622 | [[335 277]] 623 | 624 | [[336 276]] 625 | 626 | [[336 274]] 627 | 628 | [[337 273]] 629 | 630 | [[337 271]] 631 | 632 | [[338 270]] 633 | 634 | [[338 269]] 635 | 636 | [[339 268]] 637 | 638 | [[339 267]] 639 | 640 | [[340 266]] 641 | 642 | [[340 265]] 643 | 644 | [[342 263]] 645 | 646 | [[342 262]] 647 | 648 | [[345 259]] 649 | 650 | [[345 258]] 651 | 652 | [[350 253]] 653 | 654 | [[351 253]] 655 | 656 | [[355 249]] 657 | 658 | [[356 249]] 659 | 660 | [[358 247]] 661 | 662 | [[359 247]] 663 | 664 | [[360 246]] 665 | 666 | [[361 246]] 667 | 668 | [[362 245]] 669 | 670 | [[363 245]] 671 | 672 | [[364 244]] 673 | 674 | [[366 244]] 675 | 676 | [[367 243]] 677 | 678 | [[369 243]] 679 | 680 | [[370 242]] 681 | 682 | [[374 242]] 683 | 684 | [[375 241]] 685 | 686 | [[476 241]]][[[476 225]]][[[239 152]] 687 | 688 | [[238 153]] 689 | 690 | [[235 153]] 691 | 692 | [[234 154]] 693 | 694 | [[232 154]] 695 | 696 | [[231 155]] 697 | 698 | [[229 155]] 699 | 700 | [[228 156]] 701 | 702 | [[227 156]] 703 | 704 | [[225 158]] 705 | 706 | [[224 158]] 707 | 708 | [[218 164]] 709 | 710 | [[218 165]] 711 | 712 | [[217 166]] 713 | 714 | [[217 167]] 715 | 716 | [[216 168]] 717 | 718 | [[216 169]] 719 | 720 | [[215 170]] 721 | 722 | [[215 171]] 723 | 724 | [[214 172]] 725 | 726 | [[214 175]] 727 | 728 | [[213 176]] 729 | 730 | [[213 188]] 731 | 732 | [[214 189]] 733 | 734 | [[214 191]] 735 | 736 | [[215 192]] 737 | 738 | [[215 194]] 739 | 740 | [[216 195]] 741 | 742 | [[216 196]] 743 | 744 | [[217 197]] 745 | 746 | [[217 198]] 747 | 748 | [[219 200]] 749 | 750 | [[219 201]] 751 | 752 | [[223 205]] 753 | 754 | [[224 205]] 755 | 756 | [[227 208]] 757 | 758 | [[228 208]] 759 | 760 | [[230 210]] 761 | 762 | [[230 211]] 763 | 764 | [[229 212]] 765 | 766 | [[229 223]] 767 | 768 | [[228 224]] 769 | 770 | [[228 236]] 771 | 772 | [[227 237]] 773 | 774 | [[227 250]] 775 | 776 | [[226 251]] 777 | 778 | [[226 262]] 779 | 780 | [[225 263]] 781 | 782 | [[225 275]] 783 | 784 | [[224 276]] 785 | 786 | [[224 288]] 787 | 788 | [[223 289]] 789 | 790 | [[223 300]] 791 | 792 | [[222 301]] 793 | 794 | [[222 313]] 795 | 796 | [[221 314]] 797 | 798 | [[221 326]] 799 | 800 | [[220 327]] 801 | 802 | [[220 339]] 803 | 804 | [[219 340]] 805 | 806 | [[219 352]] 807 | 808 | [[266 352]] 809 | 810 | [[266 345]] 811 | 812 | [[265 344]] 813 | 814 | [[265 334]] 815 | 816 | [[264 333]] 817 | 818 | [[264 323]] 819 | 820 | [[263 322]] 821 | 822 | [[263 311]] 823 | 824 | [[262 310]] 825 | 826 | [[262 301]] 827 | 828 | [[261 300]] 829 | 830 | [[261 289]] 831 | 832 | [[260 288]] 833 | 834 | [[260 278]] 835 | 836 | [[259 277]] 837 | 838 | [[259 267]] 839 | 840 | [[258 266]] 841 | 842 | [[258 256]] 843 | 844 | [[257 255]] 845 | 846 | [[257 245]] 847 | 848 | [[256 244]] 849 | 850 | [[256 234]] 851 | 852 | [[255 233]] 853 | 854 | [[255 222]] 855 | 856 | [[254 221]] 857 | 858 | [[254 210]] 859 | 860 | [[256 208]] 861 | 862 | [[257 208]] 863 | 864 | [[258 207]] 865 | 866 | [[259 207]] 867 | 868 | [[262 204]] 869 | 870 | [[263 204]] 871 | 872 | [[265 202]] 873 | 874 | [[265 201]] 875 | 876 | [[267 199]] 877 | 878 | [[267 198]] 879 | 880 | [[269 196]] 881 | 882 | [[269 194]] 883 | 884 | [[270 193]] 885 | 886 | [[270 192]] 887 | 888 | [[271 191]] 889 | 890 | [[271 188]] 891 | 892 | [[272 187]] 893 | 894 | [[272 177]] 895 | 896 | [[271 176]] 897 | 898 | [[271 173]] 899 | 900 | [[270 172]] 901 | 902 | [[270 171]] 903 | 904 | [[269 170]] 905 | 906 | [[269 168]] 907 | 908 | [[268 167]] 909 | 910 | [[268 166]] 911 | 912 | [[265 163]] 913 | 914 | [[265 162]] 915 | 916 | [[262 159]] 917 | 918 | [[261 159]] 919 | 920 | [[258 156]] 921 | 922 | [[257 156]] 923 | 924 | [[256 155]] 925 | 926 | [[254 155]] 927 | 928 | [[253 154]] 929 | 930 | [[251 154]] 931 | 932 | [[250 153]] 933 | 934 | [[246 153]] 935 | 936 | [[245 152]]][[[372 78]] 937 | 938 | [[371 79]] 939 | 940 | [[366 79]] 941 | 942 | [[365 80]] 943 | 944 | [[363 80]] 945 | 946 | [[362 81]] 947 | 948 | [[360 81]] 949 | 950 | [[359 82]] 951 | 952 | [[357 82]] 953 | 954 | [[356 83]] 955 | 956 | [[354 83]] 957 | 958 | [[353 84]] 959 | 960 | [[352 84]] 961 | 962 | [[351 85]] 963 | 964 | [[350 85]] 965 | 966 | [[349 86]] 967 | 968 | [[348 86]] 969 | 970 | [[346 88]] 971 | 972 | [[345 88]] 973 | 974 | [[343 90]] 975 | 976 | [[342 90]] 977 | 978 | [[330 102]] 979 | 980 | [[330 103]] 981 | 982 | [[328 105]] 983 | 984 | [[328 106]] 985 | 986 | [[326 108]] 987 | 988 | [[326 109]] 989 | 990 | [[325 110]] 991 | 992 | [[325 111]] 993 | 994 | [[324 112]] 995 | 996 | [[324 113]] 997 | 998 | [[323 114]] 999 | 1000 | [[323 115]] 1001 | 1002 | [[322 116]] 1003 | 1004 | [[322 118]] 1005 | 1006 | [[321 119]] 1007 | 1008 | [[321 121]] 1009 | 1010 | [[320 122]] 1011 | 1012 | [[320 124]] 1013 | 1014 | [[319 125]] 1015 | 1016 | [[319 129]] 1017 | 1018 | [[318 130]] 1019 | 1020 | [[318 139]] 1021 | 1022 | [[317 140]] 1023 | 1024 | [[318 141]] 1025 | 1026 | [[318 151]] 1027 | 1028 | [[319 152]] 1029 | 1030 | [[319 155]] 1031 | 1032 | [[320 156]] 1033 | 1034 | [[320 159]] 1035 | 1036 | [[321 160]] 1037 | 1038 | [[321 162]] 1039 | 1040 | [[322 163]] 1041 | 1042 | [[322 164]] 1043 | 1044 | [[323 165]] 1045 | 1046 | [[323 167]] 1047 | 1048 | [[324 168]] 1049 | 1050 | [[324 169]] 1051 | 1052 | [[325 170]] 1053 | 1054 | [[325 171]] 1055 | 1056 | [[326 172]] 1057 | 1058 | [[326 173]] 1059 | 1060 | [[328 175]] 1061 | 1062 | [[328 176]] 1063 | 1064 | [[331 179]] 1065 | 1066 | [[331 180]] 1067 | 1068 | [[341 190]] 1069 | 1070 | [[342 190]] 1071 | 1072 | [[344 192]] 1073 | 1074 | [[345 192]] 1075 | 1076 | [[347 194]] 1077 | 1078 | [[348 194]] 1079 | 1080 | [[349 195]] 1081 | 1082 | [[350 195]] 1083 | 1084 | [[351 196]] 1085 | 1086 | [[352 196]] 1087 | 1088 | [[353 197]] 1089 | 1090 | [[354 197]] 1091 | 1092 | [[355 198]] 1093 | 1094 | [[357 198]] 1095 | 1096 | [[358 199]] 1097 | 1098 | [[359 199]] 1099 | 1100 | [[360 200]] 1101 | 1102 | [[362 200]] 1103 | 1104 | [[363 201]] 1105 | 1106 | [[367 201]] 1107 | 1108 | [[368 202]] 1109 | 1110 | [[373 202]] 1111 | 1112 | [[374 203]] 1113 | 1114 | [[386 203]] 1115 | 1116 | [[387 202]] 1117 | 1118 | [[392 202]] 1119 | 1120 | [[393 201]] 1121 | 1122 | [[396 201]] 1123 | 1124 | [[397 200]] 1125 | 1126 | [[400 200]] 1127 | 1128 | [[401 199]] 1129 | 1130 | [[402 199]] 1131 | 1132 | [[403 198]] 1133 | 1134 | [[405 198]] 1135 | 1136 | [[406 197]] 1137 | 1138 | [[407 197]] 1139 | 1140 | [[408 196]] 1141 | 1142 | [[409 196]] 1143 | 1144 | [[410 195]] 1145 | 1146 | [[411 195]] 1147 | 1148 | [[412 194]] 1149 | 1150 | [[413 194]] 1151 | 1152 | [[415 192]] 1153 | 1154 | [[416 192]] 1155 | 1156 | [[419 189]] 1157 | 1158 | [[420 189]] 1159 | 1160 | [[428 181]] 1161 | 1162 | [[428 180]] 1163 | 1164 | [[429 179]] 1165 | 1166 | [[429 177]] 1167 | 1168 | [[426 174]] 1169 | 1170 | [[425 174]] 1171 | 1172 | [[422 171]] 1173 | 1174 | [[421 171]] 1175 | 1176 | [[420 170]] 1177 | 1178 | [[418 170]] 1179 | 1180 | [[408 180]] 1181 | 1182 | [[407 180]] 1183 | 1184 | [[405 182]] 1185 | 1186 | [[404 182]] 1187 | 1188 | [[403 183]] 1189 | 1190 | [[402 183]] 1191 | 1192 | [[400 185]] 1193 | 1194 | [[398 185]] 1195 | 1196 | [[397 186]] 1197 | 1198 | [[396 186]] 1199 | 1200 | [[395 187]] 1201 | 1202 | [[392 187]] 1203 | 1204 | [[391 188]] 1205 | 1206 | [[387 188]] 1207 | 1208 | [[386 189]] 1209 | 1210 | [[374 189]] 1211 | 1212 | [[373 188]] 1213 | 1214 | [[369 188]] 1215 | 1216 | [[368 187]] 1217 | 1218 | [[365 187]] 1219 | 1220 | [[364 186]] 1221 | 1222 | [[362 186]] 1223 | 1224 | [[360 184]] 1225 | 1226 | [[359 184]] 1227 | 1228 | [[358 183]] 1229 | 1230 | [[357 183]] 1231 | 1232 | [[356 182]] 1233 | 1234 | [[355 182]] 1235 | 1236 | [[353 180]] 1237 | 1238 | [[352 180]] 1239 | 1240 | [[349 177]] 1241 | 1242 | [[348 177]] 1243 | 1244 | [[344 173]] 1245 | 1246 | [[344 172]] 1247 | 1248 | [[340 168]] 1249 | 1250 | [[340 167]] 1251 | 1252 | [[338 165]] 1253 | 1254 | [[338 164]] 1255 | 1256 | [[336 162]] 1257 | 1258 | [[336 160]] 1259 | 1260 | [[335 159]] 1261 | 1262 | [[335 158]] 1263 | 1264 | [[334 157]] 1265 | 1266 | [[334 155]] 1267 | 1268 | [[333 154]] 1269 | 1270 | [[333 151]] 1271 | 1272 | [[332 150]] 1273 | 1274 | [[332 143]] 1275 | 1276 | [[331 142]] 1277 | 1278 | [[332 141]] 1279 | 1280 | [[332 140]] 1281 | 1282 | [[331 139]] 1283 | 1284 | [[332 138]] 1285 | 1286 | [[332 131]] 1287 | 1288 | [[333 130]] 1289 | 1290 | [[333 127]] 1291 | 1292 | [[334 126]] 1293 | 1294 | [[334 124]] 1295 | 1296 | [[335 123]] 1297 | 1298 | [[335 122]] 1299 | 1300 | [[336 121]] 1301 | 1302 | [[336 120]] 1303 | 1304 | [[337 119]] 1305 | 1306 | [[337 118]] 1307 | 1308 | [[338 117]] 1309 | 1310 | [[338 116]] 1311 | 1312 | [[339 115]] 1313 | 1314 | [[339 114]] 1315 | 1316 | [[342 111]] 1317 | 1318 | [[342 110]] 1319 | 1320 | [[349 103]] 1321 | 1322 | [[350 103]] 1323 | 1324 | [[353 100]] 1325 | 1326 | [[354 100]] 1327 | 1328 | [[356 98]] 1329 | 1330 | [[357 98]] 1331 | 1332 | [[358 97]] 1333 | 1334 | [[359 97]] 1335 | 1336 | [[360 96]] 1337 | 1338 | [[361 96]] 1339 | 1340 | [[362 95]] 1341 | 1342 | [[363 95]] 1343 | 1344 | [[364 94]] 1345 | 1346 | [[367 94]] 1347 | 1348 | [[368 93]] 1349 | 1350 | [[371 93]] 1351 | 1352 | [[372 92]] 1353 | 1354 | [[379 92]] 1355 | 1356 | [[380 91]] 1357 | 1358 | [[380 78]]][[[104 78]] 1359 | 1360 | [[104 92]] 1361 | 1362 | [[111 92]] 1363 | 1364 | [[112 93]] 1365 | 1366 | [[116 93]] 1367 | 1368 | [[117 94]] 1369 | 1370 | [[119 94]] 1371 | 1372 | [[120 95]] 1373 | 1374 | [[121 95]] 1375 | 1376 | [[122 96]] 1377 | 1378 | [[123 96]] 1379 | 1380 | [[124 97]] 1381 | 1382 | [[125 97]] 1383 | 1384 | [[126 98]] 1385 | 1386 | [[127 98]] 1387 | 1388 | [[128 99]] 1389 | 1390 | [[129 99]] 1391 | 1392 | [[132 102]] 1393 | 1394 | [[133 102]] 1395 | 1396 | [[142 111]] 1397 | 1398 | [[142 112]] 1399 | 1400 | [[144 114]] 1401 | 1402 | [[144 115]] 1403 | 1404 | [[146 117]] 1405 | 1406 | [[146 118]] 1407 | 1408 | [[147 119]] 1409 | 1410 | [[147 120]] 1411 | 1412 | [[148 121]] 1413 | 1414 | [[148 122]] 1415 | 1416 | [[149 123]] 1417 | 1418 | [[149 125]] 1419 | 1420 | [[150 126]] 1421 | 1422 | [[150 128]] 1423 | 1424 | [[151 129]] 1425 | 1426 | [[151 134]] 1427 | 1428 | [[152 135]] 1429 | 1430 | [[152 146]] 1431 | 1432 | [[151 147]] 1433 | 1434 | [[151 152]] 1435 | 1436 | [[150 153]] 1437 | 1438 | [[150 155]] 1439 | 1440 | [[149 156]] 1441 | 1442 | [[149 158]] 1443 | 1444 | [[148 159]] 1445 | 1446 | [[148 160]] 1447 | 1448 | [[147 161]] 1449 | 1450 | [[147 162]] 1451 | 1452 | [[145 164]] 1453 | 1454 | [[145 165]] 1455 | 1456 | [[144 166]] 1457 | 1458 | [[144 167]] 1459 | 1460 | [[141 170]] 1461 | 1462 | [[141 171]] 1463 | 1464 | [[133 179]] 1465 | 1466 | [[132 179]] 1467 | 1468 | [[130 181]] 1469 | 1470 | [[129 181]] 1471 | 1472 | [[127 183]] 1473 | 1474 | [[126 183]] 1475 | 1476 | [[125 184]] 1477 | 1478 | [[124 184]] 1479 | 1480 | [[123 185]] 1481 | 1482 | [[122 185]] 1483 | 1484 | [[121 186]] 1485 | 1486 | [[119 186]] 1487 | 1488 | [[118 187]] 1489 | 1490 | [[116 187]] 1491 | 1492 | [[115 188]] 1493 | 1494 | [[110 188]] 1495 | 1496 | [[109 189]] 1497 | 1498 | [[ 97 189]] 1499 | 1500 | [[ 96 188]] 1501 | 1502 | [[ 92 188]] 1503 | 1504 | [[ 91 187]] 1505 | 1506 | [[ 89 187]] 1507 | 1508 | [[ 88 186]] 1509 | 1510 | [[ 86 186]] 1511 | 1512 | [[ 85 185]] 1513 | 1514 | [[ 84 185]] 1515 | 1516 | [[ 83 184]] 1517 | 1518 | [[ 82 184]] 1519 | 1520 | [[ 81 183]] 1521 | 1522 | [[ 80 183]] 1523 | 1524 | [[ 78 181]] 1525 | 1526 | [[ 77 181]] 1527 | 1528 | [[ 75 179]] 1529 | 1530 | [[ 74 179]] 1531 | 1532 | [[ 65 170]] 1533 | 1534 | [[ 63 170]] 1535 | 1536 | [[ 61 172]] 1537 | 1538 | [[ 60 172]] 1539 | 1540 | [[ 57 175]] 1541 | 1542 | [[ 56 175]] 1543 | 1544 | [[ 54 177]] 1545 | 1546 | [[ 54 179]] 1547 | 1548 | [[ 58 183]] 1549 | 1550 | [[ 58 184]] 1551 | 1552 | [[ 61 187]] 1553 | 1554 | [[ 62 187]] 1555 | 1556 | [[ 66 191]] 1557 | 1558 | [[ 67 191]] 1559 | 1560 | [[ 69 193]] 1561 | 1562 | [[ 70 193]] 1563 | 1564 | [[ 72 195]] 1565 | 1566 | [[ 73 195]] 1567 | 1568 | [[ 74 196]] 1569 | 1570 | [[ 76 196]] 1571 | 1572 | [[ 78 198]] 1573 | 1574 | [[ 80 198]] 1575 | 1576 | [[ 81 199]] 1577 | 1578 | [[ 83 199]] 1579 | 1580 | [[ 84 200]] 1581 | 1582 | [[ 86 200]] 1583 | 1584 | [[ 87 201]] 1585 | 1586 | [[ 90 201]] 1587 | 1588 | [[ 91 202]] 1589 | 1590 | [[ 96 202]] 1591 | 1592 | [[ 97 203]] 1593 | 1594 | [[109 203]] 1595 | 1596 | [[110 202]] 1597 | 1598 | [[116 202]] 1599 | 1600 | [[117 201]] 1601 | 1602 | [[120 201]] 1603 | 1604 | [[121 200]] 1605 | 1606 | [[123 200]] 1607 | 1608 | [[124 199]] 1609 | 1610 | [[126 199]] 1611 | 1612 | [[127 198]] 1613 | 1614 | [[129 198]] 1615 | 1616 | [[130 197]] 1617 | 1618 | [[131 197]] 1619 | 1620 | [[132 196]] 1621 | 1622 | [[133 196]] 1623 | 1624 | [[134 195]] 1625 | 1626 | [[135 195]] 1627 | 1628 | [[137 193]] 1629 | 1630 | [[138 193]] 1631 | 1632 | [[141 190]] 1633 | 1634 | [[142 190]] 1635 | 1636 | [[153 179]] 1637 | 1638 | [[153 178]] 1639 | 1640 | [[156 175]] 1641 | 1642 | [[156 174]] 1643 | 1644 | [[157 173]] 1645 | 1646 | [[157 172]] 1647 | 1648 | [[159 170]] 1649 | 1650 | [[159 169]] 1651 | 1652 | [[160 168]] 1653 | 1654 | [[160 166]] 1655 | 1656 | [[161 165]] 1657 | 1658 | [[161 164]] 1659 | 1660 | [[162 163]] 1661 | 1662 | [[162 161]] 1663 | 1664 | [[163 160]] 1665 | 1666 | [[163 158]] 1667 | 1668 | [[164 157]] 1669 | 1670 | [[164 153]] 1671 | 1672 | [[165 152]] 1673 | 1674 | [[165 147]] 1675 | 1676 | [[166 146]] 1677 | 1678 | [[166 135]] 1679 | 1680 | [[165 134]] 1681 | 1682 | [[165 128]] 1683 | 1684 | [[164 127]] 1685 | 1686 | [[164 124]] 1687 | 1688 | [[163 123]] 1689 | 1690 | [[163 121]] 1691 | 1692 | [[162 120]] 1693 | 1694 | [[162 118]] 1695 | 1696 | [[161 117]] 1697 | 1698 | [[161 115]] 1699 | 1700 | [[159 113]] 1701 | 1702 | [[159 111]] 1703 | 1704 | [[158 110]] 1705 | 1706 | [[158 109]] 1707 | 1708 | [[156 107]] 1709 | 1710 | [[156 106]] 1711 | 1712 | [[154 104]] 1713 | 1714 | [[154 103]] 1715 | 1716 | [[151 100]] 1717 | 1718 | [[151 99]] 1719 | 1720 | [[145 93]] 1721 | 1722 | [[144 93]] 1723 | 1724 | [[140 89]] 1725 | 1726 | [[139 89]] 1727 | 1728 | [[137 87]] 1729 | 1730 | [[136 87]] 1731 | 1732 | [[135 86]] 1733 | 1734 | [[134 86]] 1735 | 1736 | [[133 85]] 1737 | 1738 | [[132 85]] 1739 | 1740 | [[131 84]] 1741 | 1742 | [[130 84]] 1743 | 1744 | [[129 83]] 1745 | 1746 | [[127 83]] 1747 | 1748 | [[126 82]] 1749 | 1750 | [[125 82]] 1751 | 1752 | [[124 81]] 1753 | 1754 | [[122 81]] 1755 | 1756 | [[121 80]] 1757 | 1758 | [[118 80]] 1759 | 1760 | [[117 79]] 1761 | 1762 | [[112 79]] 1763 | 1764 | [[111 78]]][[[195 8]] 1765 | 1766 | [[194 9]] 1767 | 1768 | [[190 9]] 1769 | 1770 | ..., 1771 | [[204 9]] 1772 | 1773 | [[202 9]] 1774 | 1775 | [[201 8]]]**************************************************************************************************** 1776 | -------------------------------------------------------------------------------- /MVP_V0.4_add url jpg/README.md: -------------------------------------------------------------------------------- 1 | # 图片边框提取 2 | 3 | 效果图链接:[http://i4.tietuku.com/2d5ced664cf008c1.jpg](http://i4.tietuku.com/2d5ced664cf008c1.jpg) 4 | ![](http://i4.tietuku.com/2d5ced664cf008c1.jpg) 5 | 6 | 函数使用简化算法,只提取图形轮廊的终点坐标,节省存储空间 7 | 8 | 9 | print (type(contours)) #查询所有轮廊数据类型 10 | 11 | print (type(contours[0])) #查询图形中第一个轮廊数据类型 12 | 13 | print (len(contours)) #查询图形中所有轮廊的数量 14 | 15 | 16 | 本案例返回值: 17 | 18 | 19 | 20 | 21 | 22 | 1 23 | 24 | 25 | 接下来:将提取到图形轮廊坐标重定义为javascript api 中的location等 26 | 27 | 海盗教练建议:与javascript的数据接口统一使用json格式 28 | 29 | [https://docs.python.org/2/library/json.html](https://docs.python.org/2/library/json.html) 30 | 31 | 因为contours[0]的数据类型为,`` 32 | 33 | 利用ndarray.tolist()可以将numpy的数组转为python的list 34 | 效果如下: 35 | `[[[10, 18]], [[10, 249]], [[251, 249]], [[251, 18]]]` 36 | 37 | 38 | 39 | 40 | ---------- 41 | 2015年12月15日 42 | 43 | 因为直接使用contours方法提取的边框非常粗糙,而且会带来很多噪声。 44 | 因此想到了下述方法: 45 | 46 | 1. 载入图片 47 | 2. 高斯降噪 48 | 3. 二值化 49 | 3. 灰度处理 50 | 4. Canny边缘提取 51 | 5. 将提取的到边缘提取轮廊。 52 | 53 | 注意几点, 54 | 55 | 1. cv2.imread("XXX.jpg") # 56 | 2. cv2.findContours的contours是 57 | 3. `cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])` 58 | 59 | 第一个参数是寻找轮廓的图像; 60 | 61 | 第二个参数表示轮廓的检索模式,有四种(本文介绍的都是新的cv2接口): 62 | cv2.RETR_EXTERNAL表示只检测外轮廓 63 | cv2.RETR_LIST检测的轮廓不建立等级关系 64 | cv2.RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。 65 | cv2.RETR_TREE建立一个等级树结构的轮廓。 66 | 67 | 第三个参数method为轮廓的近似办法 68 | cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1 69 | cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息 70 | cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法 71 | 返回值 72 | cv2.findContours()函数返回两个值,一个是轮廓本身,还有一个是每条轮廓对应的属性。 73 | 74 | 此处选择`cv2.RETR_EXTERNAL`直接从canny边缘线提取,简单粗暴 75 | 76 | 3. cv2.Canny(img, position, position * 3),position用于设置图片边缘阈值,默认值25.后期建议做成调节杆,方便用户前端直接控制效果并输出。 77 | 4. 通过url载入图片文件,`urllib2.urlopen(url).read()`解析后为str类型,需要重建为cv能够识别的矩阵类型。在对重建矩阵解码为图片格式:iplimage。Canny的输出结果也是iplimage格式。但是cvfindcontour载入源图需要类型为numpy.ndarry,因此数据需要转换,方法如下: 78 | 79 | 下表列出了在这三种对象之间转换的方法: 80 | 在数组、iplimage以及cvmat之间转换 81 | 82 | | 类型转换 | 方法 | 83 | |--------|--------| 84 | | array→cvmat | cv.fromarray(array) | 85 | | cvmat→array | np.asarray(cvmat) | 86 | | cvmat→iplimage | cv.GetImage(cvmat) | 87 | | iplimage→cvmat |iplimage[:],或cv.GetMat(iplimage) | 88 | 89 | 如果需要在array和iplimage之间转换,可以通过cvmat作为桥梁,本代码中使用`edge_im_array = np.asarray(edge_im[:])` 90 | 91 | finish 2015年12月16日 92 | 93 | 94 | 95 | 96 | ****** 97 | 98 | 2015年12月17日 99 | 100 | 思考百度api JavaScript语言轨迹生成 101 | 102 | 1. 用户请求上传跑图图片至图片处理服务器, 103 | 2. 客户本地端调用JavaScript“事件”提取本地gps坐标 104 | 105 | var addr = evt.detail.coords; 106 | 107 | var x = addr.lng; 108 | 109 | var y = addr.lat; 110 | 2. 根据本地(x,y)坐标为第一条轮廊的轨迹list起点。 111 | 3. 将图片处理服务器返回的结果list轮廊数据contours(轮廊矩阵),输出给主程序,并写入主服务器数据库; 112 | 4. 主服务器根据图片服务器返回值, 113 | 1. contours[0]表示第一条轨迹坐标集合,--》contours[n=len(contours)]表示最后一条轨迹曲线矩阵,contours[0][0]表示第一个轨迹的第一个坐标例如[[192,8]] 114 | 2. 先执行第i条轨迹,完成后,再执行第i+1条轮廊起点与第1条轮廊起点的差值,生成第二条轨迹起点绝对地理坐标。以此类推。 115 | 116 | 117 | list index的遍历: 118 | > 例如: 119 | 120 | m = [[[12,22]],[[13,23]],[[14,24]]],[[[14,25]],[[55,56]],[[99,98]]] 121 | 122 | for i in range(len(m)): 123 | for j in range(len(m[i])): 124 | for k in range(len(m[i][j])): 125 | for l in range(len(m[i][j][k])): 126 | print m[i][j][k][l] 127 | 128 | > 12 129 | > 22 130 | > 13 131 | > 23 132 | > 14 133 | > 24 134 | > 14 135 | > 25 136 | > 55 137 | > 56 138 | > 99 139 | > 98 140 | 141 | 142 | 方法2: 143 | 用reshape函数 144 | 145 | import numpy 146 | m = np.array([[[[12,22]],[[13,23]],[[14,24]]],[[[14,25]],[[55,56]],[[99,98]]]]) 147 | 148 | m.reshape(12) 149 | array([12, 22, 13, 23, 14, 24, 14, 25, 55, 56, 99, 98]) 150 | 151 | 152 | [JSON](http://json.org/) 153 | 154 | 1. 并列的数据之间用逗号(",")分隔。 155 | 2. 映射用冒号(":")表示。 156 | 3. 并列数据的集合(数组)用方括号("[]")表示。 157 | 4. 映射的集合(对象)用大括号("{}")表示。 158 | 159 | 160 | 161 | 参考: 162 | 163 | [http://stackoverflow.com/questions/18074680/extract-single-line-contours-from-canny-edges](http://stackoverflow.com/questions/18074680/extract-single-line-contours-from-canny-edges) 164 | 165 | [OpenCV converting Canny edges to contours](http://www.helpsforcoder.com/code/15751940-opencv-converting-canny-edges-to-contours.html) 166 | 167 | [Reading and Writing Images and Video](http://i12.tietuku.com/3eccda985794c42b.jpg) 168 | 169 | [python图片数组格式转化](http://blog.csdn.net/xueweuchen/article/details/38756075 "python图片数组格式转化") 170 | 171 | 效果图链接: 172 | 173 | [http://i4.tietuku.com/6c2f77ca748e17f1.jpg](http://i4.tietuku.com/6c2f77ca748e17f1.jpg) 174 | ![](http://i12.tietuku.com/9d6280b185ba688b.jpg) 175 | 176 | -------------------------------------------------------------------------------- /MVP_V0.4_add url jpg/canny_contours.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 2015年12月15日 OpenCV converting Canny edges to contours 3 | # runmap by shawn0lee0 4 | # Ref:http://stackoverflow.com/questions/18074680/extract-single-line-contours-from-canny-edges 5 | 6 | 7 | import cv2 8 | import sys,codecs 9 | import json #保证与javascript数据格式统一 10 | import cv2.cv as cv 11 | import numpy as np 12 | import urllib2 13 | 14 | position = 100 15 | 16 | def local_jpg_caany_contours(): 17 | img = cv2.imread('D:\\python\\RUNMAP\\MVP_V0.4_add url jpg\\COVER.jpg', 0) 18 | img = cv2.GaussianBlur(img,(3,3),0) 19 | if img is None: 20 | raise Exception("Error while loading the image") 21 | 22 | canny_img = cv2.Canny(img, position, position * 3) 23 | 24 | contours, hierarchy = cv2.findContours(canny_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 25 | print type(contours) 26 | contours_img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) 27 | 28 | str_len_contours = str(len(contours)) #取轮廊数量 29 | print "contours num:%s" %str_len_contours 30 | contours_list = contours[-1].tolist() 31 | #contours_location=np.array(contours_list).reshape(-1,).tolist() 32 | #contours_location=np.array(contours_list).tolist() 33 | #print contours_list 34 | print contours_list 35 | 36 | 37 | scale = 1 #不缩放 38 | contours_img = cv2.resize(contours_img, (0, 0), fx=scale, fy=scale) 39 | 40 | for cnt in contours: 41 | color = np.random.randint(0, 255, (3)).tolist() 42 | cv2.drawContours(contours_img,[cnt*scale], 0, color, 1) 43 | 44 | cv2.imwrite('C:\\Users\\Administrator\\Desktop\\cany_contours\\COVER_canny_img.jpg', canny_img) 45 | #cv2.imwrite("fx_canny_contours.jpg", contours_img) 46 | cv2.imshow("canny_img", canny_img) 47 | cv2.imshow("contours_img", contours_img) 48 | 49 | img_pix = str(np.size(img)) 50 | gray_pix = str(np.size(contours_img)) 51 | canny_img_pix = str(np.size(canny_img)) 52 | #轮廊清单转文本输出 53 | s = open("Contours.txt",'a') 54 | s.write("Img Gausss pix nums:" +"%s" %img_pix + "\n") 55 | s.write("Gray pix nums:" +"%s" %gray_pix + "\n") 56 | s.write("canny_img_pix nums:" +"%s" %canny_img_pix + "\n") 57 | s.write("contours num:" +"%s" %str_len_contours + "\n") 58 | for ele in contours_list: 59 | s.write("%s\n" % ele) 60 | s.write("**"*50 + "\n") 61 | s.close() 62 | 63 | l = open("contours_list.txt",'a') 64 | l.write("Img Gausss pix nums:" +"%s" %img_pix + "\n") 65 | l.write("Gray pix nums:" +"%s" %gray_pix + "\n") 66 | l.write("canny_img_pix nums:" +"%s" %canny_img_pix + "\n") 67 | l.write("contours num:" +"%s" %str_len_contours + "\n") 68 | l.write("contours_list" + "\n") 69 | for ele in contours_location: 70 | l.write("%s\n" % ele) 71 | l.write("**"*50 + "\n") 72 | l.close() 73 | 74 | print type(canny_img) 75 | cv2.waitKey(100) 76 | 77 | def url_jpg_contours(): 78 | url = 'http://i12.tietuku.com/05ef0b29030fa46c.jpg' 79 | filedata = urllib2.urlopen(url).read() 80 | imagefiledata = cv.CreateMatHeader(1, len(filedata), cv.CV_8UC1) 81 | print imagefiledata # 82 | cv.SetData(imagefiledata, filedata, len(filedata)) 83 | im = cv.DecodeImage(imagefiledata, cv.CV_LOAD_IMAGE_COLOR) 84 | col_edge = cv.CreateImage((im.width, im.height), 8, 3) 85 | 86 | # convert to grayscale 87 | gray_im = cv.CreateImage((im.width, im.height), 8, 1) 88 | edge_im = cv.CreateImage((im.width, im.height), 8, 1) 89 | cv.CvtColor(im, gray_im, cv.CV_BGR2GRAY) 90 | cv.Canny(gray_im, edge_im, position, position * 3, 3) 91 | cv.SetZero(col_edge) 92 | # copy edge points 93 | cv.Copy(im, col_edge, edge_im) 94 | #ret, edge_jpg = cv2.imencode('.jpg', edge_im, [int(cv.CV_IMWRITE_JPEG_QUALITY), 80]) 95 | edge_im_array = np.asarray(edge_im[:]) 96 | 97 | print type(edge_im_array) 98 | #edge_jpg_gray = cv2.cvtColor(edge_im_array,cv2.COLOR_BGR2GRAY) 99 | ret, edge_im_array = cv2.threshold(edge_im_array,127,255,cv2.THRESH_BINARY) 100 | print type(edge_im_array) 101 | contours, hierarchy = cv2.findContours(edge_im_array, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) #压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息 102 | contours_img = cv2.cvtColor(edge_im_array, cv2.COLOR_GRAY2BGR) 103 | url_str_len_contours = str(len(contours)) #取轮廊数量 104 | str_len_contours = str(len(contours)) #取轮廊数量 105 | 106 | #数据处理 107 | 108 | first_contours = contours[0] #第一条轨迹坐标集合,数据格式为numpy.ndarry 109 | 110 | first_contours_list = first_contours.tolist() 111 | #print contours #输出所有轨迹坐标集合 112 | #print contours[-1] #输出最后一条轨迹坐标,数据格式为numpy.ndarry 113 | #print contours[0][0].tolist()[0] #输出第一条轨迹起始点坐标[[375 241]]并转化成list格式[[375,241]] |**.tolist()[0] 可以省掉一个中括号输出[375,241] 114 | #print contours[0][0].tolist()[0][0] #输出第一条轨迹起始点坐标的X坐标值。 115 | #print contours[0][0].tolist()[0][1] #输出第一条轨迹起始点坐标的Y坐标值。 116 | 117 | #print [i[0][0] for i in contours] 118 | #print [i[0][0] for i in contours[0]] 119 | 120 | 121 | 122 | scale = 1 #不缩放 123 | contours_img = cv2.resize(contours_img, (0, 0), fx=scale, fy=scale) 124 | print "Url_jpg_contours_num:%s" %url_str_len_contours 125 | for cnt in contours: 126 | color = np.random.randint(0, 255, (3)).tolist() 127 | cv2.drawContours(contours_img,[cnt*scale], 0, color, 1) 128 | cv2.imshow("URL_canny_img", edge_im_array) 129 | cv2.imshow("URL_contours_img", contours_img) 130 | 131 | 132 | #轮廊清单转文本输出 133 | edge_im_array_pix = str(np.size(edge_im_array)) 134 | contours_img_pix = str(np.size(contours_img)) 135 | 136 | ss = open("Contours" + ".log",'w') 137 | ss.write("edge_im_array_pix nums:" +"%s" %edge_im_array_pix + "\n") 138 | ss.write("contours_img_pix nums:" +"%s" %contours_img_pix + "\n") 139 | ss.write("_url_contours num:" +"%s" %str_len_contours + "\n") 140 | for ele in contours: 141 | ss.write("%s" % ele) 142 | ss.write("**"*50 + "\n") 143 | ss.close() 144 | #return contours 145 | cv2.waitKey(0) 146 | 147 | #return contours_list 148 | 149 | def main(): 150 | #local_jpg_caany_contours() 151 | url_jpg_contours() 152 | 153 | 154 | 155 | if __name__ == "__main__": 156 | main() 157 | -------------------------------------------------------------------------------- /MVP_V0.4_add url jpg/fx.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.4_add url jpg/fx.jpg -------------------------------------------------------------------------------- /MVP_V0.4_add url jpg/fx_canny.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.4_add url jpg/fx_canny.jpg -------------------------------------------------------------------------------- /MVP_V0.4_add url jpg/fx_canny_contours.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.4_add url jpg/fx_canny_contours.jpg -------------------------------------------------------------------------------- /MVP_V0.5_LBS/driving_waypoint.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 8 | 9 | 设置驾车路线途经点 10 | 11 | 12 |
13 | 14 | 15 | 31 | -------------------------------------------------------------------------------- /MVP_V0.5_LBS/walking_route.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.5_LBS/walking_route.html -------------------------------------------------------------------------------- /MVP_V0.6_qnufop/README.MD: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.6_qnufop/README.MD -------------------------------------------------------------------------------- /MVP_V0.6_qnufop/index.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | RUNMAP 5 | 6 | 7 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |
55 | 147 |
148 | 149 |
150 | 151 |

选择您想跑的轨迹图片,支持照片格式: png, jpg

152 |
153 |
154 | 155 | 156 | 157 | 158 | 159 | 160 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import os 4 | from app import create_app 5 | from flask.ext.script import Manager, Shell 6 | 7 | app = create_app(os.getenv('FLASK_CONFIG') or 'default') 8 | manager = Manager(app) 9 | 10 | 11 | def make_shell_context(): 12 | return dict(app=app) 13 | manager.add_command("shell", Shell(make_context=make_shell_context)) 14 | 15 | if __name__ == '__main__': 16 | manager.run() 17 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/__init__.py: -------------------------------------------------------------------------------- 1 | from flask import Flask 2 | from config import Config 3 | import logging 4 | from .logger import handler 5 | from .main import main as main_blueprint 6 | 7 | logger = logging.getLogger(__file__) 8 | logger.addHandler(handler) 9 | logger.setLevel(logging.DEBUG) 10 | 11 | def create_app(config_name): 12 | app = Flask(__name__) 13 | app.config.from_object(Config) 14 | Config.init_app(app) 15 | 16 | app.register_blueprint(main_blueprint) 17 | 18 | return app 19 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/logger.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import logging.handlers 3 | 4 | LOG_FILE = 'runmap.log' 5 | handler = logging.handlers.RotatingFileHandler(LOG_FILE, maxBytes = 1024*1024, backupCount = 5) 6 | fmt = '%(asctime)s - %(filename)s:%(lineno)s - %(name)s - %(message)s' 7 | formatter = logging.Formatter(fmt) 8 | handler.setFormatter(formatter) 9 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/main/__init__.py: -------------------------------------------------------------------------------- 1 | from flask import Blueprint 2 | 3 | main = Blueprint('main', __name__) 4 | 5 | from . import views, errors 6 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/main/errors.py: -------------------------------------------------------------------------------- 1 | from flask import render_template 2 | from . import main 3 | 4 | 5 | @main.app_errorhandler(404) 6 | def page_not_found(e): 7 | return render_template('404.html'), 404 8 | 9 | 10 | @main.app_errorhandler(500) 11 | def internal_server_error(e): 12 | return render_template('500.html'), 500 13 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/main/views.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | #!/usr/bin/env python 3 | 4 | from flask import request, render_template, session, redirect, url_for, current_app, make_response 5 | import json 6 | import logging 7 | from ..logger import handler 8 | from . import main 9 | import hashlib 10 | import xml.etree.ElementTree as ET 11 | import cv2 12 | import sys,codecs 13 | import json 14 | import cv2.cv as cv 15 | import numpy as np 16 | import urllib2 17 | import time 18 | import os 19 | 20 | 21 | logger = logging.getLogger(__file__) 22 | logger.addHandler(handler) 23 | logger.setLevel(logging.DEBUG) 24 | 25 | 26 | @main.route('/runmap/', methods=['GET', 'POST']) 27 | def index(user): 28 | #return render_template('index.html', api_key=current_app.config['API_KEY']) 29 | return render_template('index.html', points_js=url_for('static', filename='js/{0}.js'.format(user))) 30 | 31 | @main.route('/', methods = ['GET', 'POST'] ) 32 | def wechat(): 33 | if request.method == 'GET': 34 | token = 'runmap' 35 | query = request.args 36 | signature = query.get('signature', '') 37 | timestamp = query.get('timestamp', '') 38 | nonce = query.get('nonce', '') 39 | echostr = query.get('echostr', '') 40 | s = [timestamp, nonce, token] 41 | s.sort() 42 | s = ''.join(s) 43 | if ( hashlib.sha1(s).hexdigest() == signature ): 44 | return make_response(echostr) 45 | else: 46 | rec = request.stream.read() 47 | xml_rec = ET.fromstring(rec) 48 | msgtype = xml_rec.find('MsgType').text 49 | fromu = xml_rec.find('FromUserName').text 50 | tou = xml_rec.find('ToUserName').text 51 | if msgtype == 'image': 52 | picurl = xml_rec.find('PicUrl').text 53 | points_js = "app/static/js/{0}.js".format(fromu) 54 | os.remove(points_js) 55 | with open(points_js, "w") as f: 56 | prefix = 'var data = {"data":[' 57 | data_points = "" 58 | points = url_jpg_contours(picurl) 59 | data_points = ",".join(["[{0},{1},1]".format(point[0], point[1]) for point in points]) 60 | suffix = '],"total":{0},"rt_loc_cnt":47764510,"errorno":0,"NearestTime":"{1}","userTime":"{1}"}}'.format(len(points), time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))) 61 | f.write(prefix+data_points+suffix) 62 | xml_rep_text = "%s" 63 | response = make_response(xml_rep_text % (fromu,tou,str(int(time.time())),"http://13.75.40.237/runmap/{0}".format(fromu))) 64 | response.content_type='application/xml' 65 | return response 66 | return make_response('') 67 | 68 | #@main.route('/yingyan', methods=['GET', 'POST']) 69 | #def yingyan(): 70 | # return render_template('yingyan.html') 71 | 72 | def url_jpg_contours(url): 73 | position = 100 74 | filedata = urllib2.urlopen(url).read() 75 | imagefiledata = cv.CreateMatHeader(1, len(filedata), cv.CV_8UC1) 76 | cv.SetData(imagefiledata, filedata, len(filedata)) 77 | im = cv.DecodeImage(imagefiledata, cv.CV_LOAD_IMAGE_COLOR) 78 | col_edge = cv.CreateImage((im.width, im.height), 8, 3) 79 | 80 | # convert to grayscale 81 | gray_im = cv.CreateImage((im.width, im.height), 8, 1) 82 | edge_im = cv.CreateImage((im.width, im.height), 8, 1) 83 | cv.CvtColor(im, gray_im, cv.CV_BGR2GRAY) 84 | cv.Canny(gray_im, edge_im, position, position * 3, 3) 85 | cv.SetZero(col_edge) 86 | # copy edge points 87 | cv.Copy(im, col_edge, edge_im) 88 | edge_im_array = np.asarray(edge_im[:]) 89 | 90 | ret, edge_im_array = cv2.threshold(edge_im_array,127,255,cv2.THRESH_BINARY) 91 | contours, hierarchy = cv2.findContours(edge_im_array, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 92 | scale = 10000.0 93 | points = [] 94 | for contour in contours: 95 | for i in contour: 96 | for j in i: 97 | lng_offset = j[0] / scale 98 | lat_offset = j[1] / scale 99 | points.append([lng_offset, lat_offset]) 100 | return points 101 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/css/fontawesome/css/font-awesome.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.4.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"} 5 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/font-awesome.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.4.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"} 5 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.7_Wechat/app/static/css/fontawesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/css/jquery.datetimepicker.css: -------------------------------------------------------------------------------- 1 | .xdsoft_datetimepicker{ 2 | box-shadow: 0px 5px 15px -5px rgba(0, 0, 0, 0.506); 3 | background: #FFFFFF; 4 | border-bottom: 1px solid #BBBBBB; 5 | border-left: 1px solid #CCCCCC; 6 | border-right: 1px solid #CCCCCC; 7 | border-top: 1px solid #CCCCCC; 8 | color: #333333; 9 | display: block; 10 | /*font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif;*/ 11 | padding: 8px; 12 | padding-left: 0px; 13 | padding-top: 2px; 14 | position: absolute; 15 | z-index: 10000; 16 | -moz-box-sizing: border-box; 17 | box-sizing: border-box; 18 | display:none; 19 | } 20 | 21 | .xdsoft_datetimepicker iframe { 22 | position: absolute; 23 | left: 0; 24 | top: 0; 25 | width: 75px; 26 | height: 210px; 27 | background: transparent; 28 | border:none; 29 | } 30 | /*For IE8 or lower*/ 31 | .xdsoft_datetimepicker button { 32 | border:none !important; 33 | } 34 | 35 | .xdsoft_noselect{ 36 | -webkit-touch-callout: none; 37 | -webkit-user-select: none; 38 | -khtml-user-select: none; 39 | -moz-user-select: none; 40 | -ms-user-select: none; 41 | -o-user-select: none; 42 | user-select: none; 43 | } 44 | .xdsoft_noselect::selection { background: transparent; } 45 | .xdsoft_noselect::-moz-selection { background: transparent; } 46 | .xdsoft_datetimepicker.xdsoft_inline{ 47 | display: inline-block; 48 | position: static; 49 | box-shadow: none; 50 | } 51 | .xdsoft_datetimepicker *{ 52 | -moz-box-sizing: border-box; 53 | box-sizing: border-box; 54 | padding:0px; 55 | margin:0px; 56 | } 57 | .xdsoft_datetimepicker .xdsoft_datepicker, .xdsoft_datetimepicker .xdsoft_timepicker{ 58 | display:none; 59 | } 60 | .xdsoft_datetimepicker .xdsoft_datepicker.active, .xdsoft_datetimepicker .xdsoft_timepicker.active{ 61 | display:block; 62 | } 63 | .xdsoft_datetimepicker .xdsoft_datepicker{ 64 | width: 224px; 65 | float:left; 66 | margin-left:8px; 67 | } 68 | .xdsoft_datetimepicker .xdsoft_timepicker{ 69 | width: 58px; 70 | float:left; 71 | text-align:center; 72 | margin-left:8px; 73 | margin-top:0px; 74 | } 75 | .xdsoft_datetimepicker .xdsoft_datepicker.active+.xdsoft_timepicker{ 76 | margin-top:8px; 77 | margin-bottom:3px; 78 | } 79 | .xdsoft_datetimepicker .xdsoft_mounthpicker{ 80 | position: relative; 81 | text-align: center; 82 | } 83 | 84 | .xdsoft_datetimepicker .xdsoft_prev, .xdsoft_datetimepicker .xdsoft_next,.xdsoft_datetimepicker .xdsoft_today_button{ 85 | background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAeCAYAAACsYQl4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozQjRCQjRGREU4MkNFMzExQjRDQkIyRDJDOTdBRUI1MCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCQjg0OUYyNTZDODAxMUUzQjMwM0IwMERBNUU0ODQ5NSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCQjg0OUYyNDZDODAxMUUzQjMwM0IwMERBNUU0ODQ5NSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkI5NzE3MjFBN0E2Q0UzMTFBQjJEQjgzMDk5RTNBNTdBIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjNCNEJCNEZERTgyQ0UzMTFCNENCQjJEMkM5N0FFQjUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+aQvATgAAAfVJREFUeNrsmr1OwzAQxzGtkPjYEAuvVGAvfQIGRKADE49gdLwDDwBiZ2RhQUKwICQkWLsgFiRQuIBTucFJ/XFp4+hO+quqnZ4uvzj2nV2RpukCW/22yAgYNINmc7du7DcghCjrkqgOKjF1znpt6rZ0AGWQj7TvCU8d9UM+QAGDrhdyc2Bnc1WVVPBev9V8lBnY+rDwncWZThG4xk4lmxtJy2AHgoY/FySgbSBPwPZ8mEXbQx3aDERb0EbYAYFC7pcAtAvkMWwC0D3NX58S9D/YnoGC7nPWr3Dg9JTbtuHhDShBT8D2CBSK/iIEvVXxpuxSgh7DdgwUTL4iA92zmJb6lKB/YTsECmV+IgK947AGDIqgQ/LojsO135Hn51l2cWlov0JdGNrPUceueXRwilSVgkUyom9Rd6gbLfYTDeO+1v6orn0InTogYDGUkYLO3/wc9BdqqTCKP1Tfi+oTIaCBIL2TES+GTyruT9S61p6BHam+99DFEAgLFklYsIBHwSI9QY80H5ta+1rB/6ovaKihBJeEJbgLbBlQgl+j3lDPqA2tfQV1j3pVn8s+oKHGTSVJ+FqDLeR5bCqJ2E/BCycsoLZETXaKGs7rhKVt+9HZScrZNMi88V8P7LlDbvOZYaJVpMMmBCT4n0o8dTBoNgbdWPsRYACs3r7XyNfbnAAAAABJRU5ErkJggg=='); 86 | } 87 | .xdsoft_datetimepicker .xdsoft_prev{ 88 | float: left; 89 | background-position:-20px 0px; 90 | } 91 | .xdsoft_datetimepicker .xdsoft_today_button{ 92 | float: left; 93 | background-position:-70px 0px; 94 | margin-left:5px; 95 | } 96 | 97 | .xdsoft_datetimepicker .xdsoft_next{ 98 | float: right; 99 | background-position:0px 0px; 100 | } 101 | .xdsoft_datetimepicker .xdsoft_next:active,.xdsoft_datetimepicker .xdsoft_prev:active{ 102 | } 103 | .xdsoft_datetimepicker .xdsoft_next,.xdsoft_datetimepicker .xdsoft_prev ,.xdsoft_datetimepicker .xdsoft_today_button{ 104 | background-color: transparent; 105 | background-repeat: no-repeat; 106 | border: 0px none currentColor; 107 | cursor: pointer; 108 | display: block; 109 | height: 30px; 110 | opacity: 0.5; 111 | outline: medium none currentColor; 112 | overflow: hidden; 113 | padding: 0px; 114 | position: relative; 115 | text-indent: 100%; 116 | white-space: nowrap; 117 | width: 20px; 118 | } 119 | .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev, 120 | .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_next{ 121 | float:none; 122 | background-position:-40px -15px; 123 | height: 15px; 124 | width: 30px; 125 | display: block; 126 | margin-left:14px; 127 | margin-top:7px; 128 | } 129 | .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev{ 130 | background-position:-40px 0px; 131 | margin-bottom:7px; 132 | margin-top:0px; 133 | } 134 | .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box{ 135 | height:151px; 136 | overflow:hidden; 137 | border-bottom:1px solid #DDDDDD; 138 | } 139 | .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div{ 140 | background: #F5F5F5; 141 | border-top:1px solid #DDDDDD; 142 | color: #666666; 143 | font-size: 12px; 144 | text-align: center; 145 | border-collapse:collapse; 146 | cursor:pointer; 147 | border-bottom-width:0px; 148 | height:25px; 149 | line-height:25px; 150 | } 151 | 152 | .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div > div:first-child{ 153 | border-top-width:0px; 154 | } 155 | .xdsoft_datetimepicker .xdsoft_today_button:hover, 156 | .xdsoft_datetimepicker .xdsoft_next:hover, 157 | .xdsoft_datetimepicker .xdsoft_prev:hover { 158 | opacity: 1; 159 | } 160 | .xdsoft_datetimepicker .xdsoft_label{ 161 | display: inline; 162 | position: relative; 163 | z-index: 9999; 164 | margin: 0; 165 | padding: 5px 3px; 166 | font-size: 13px; 167 | line-height: 20px; 168 | font-weight: normal; 169 | background-color: #fff; 170 | float:left; 171 | width:182px; 172 | text-align:center; 173 | cursor:pointer; 174 | } 175 | .xdsoft_datetimepicker .xdsoft_label:hover{ 176 | text-decoration:underline; 177 | } 178 | .xdsoft_datetimepicker .xdsoft_label > .xdsoft_select{ 179 | border:1px solid #ccc; 180 | position:absolute; 181 | display:block; 182 | right:0px; 183 | top:30px; 184 | z-index:101; 185 | display:none; 186 | background:#fff; 187 | max-height:160px; 188 | overflow-y:hidden; 189 | } 190 | .xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_monthselect{right:-7px;} 191 | .xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_yearselect{right:2px;} 192 | .xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover{ 193 | color: #fff; 194 | background: #ff8000; 195 | } 196 | .xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option{ 197 | padding:2px 10px 2px 5px; 198 | } 199 | .xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current{ 200 | background: #33AAFF; 201 | box-shadow: #178FE5 0px 1px 3px 0px inset; 202 | color:#fff; 203 | font-weight: 700; 204 | } 205 | .xdsoft_datetimepicker .xdsoft_month{ 206 | width:90px; 207 | text-align:right; 208 | left:35px; 209 | } 210 | .xdsoft_datetimepicker .xdsoft_calendar{ 211 | clear:both; 212 | } 213 | .xdsoft_datetimepicker .xdsoft_year{ 214 | width:60px; 215 | left:-65px; 216 | } 217 | .xdsoft_datetimepicker .xdsoft_calendar table{ 218 | border-collapse:collapse; 219 | width:100%; 220 | 221 | } 222 | .xdsoft_datetimepicker .xdsoft_calendar td > div{ 223 | padding-right:5px; 224 | } 225 | .xdsoft_datetimepicker .xdsoft_calendar th{ 226 | height: 25px; 227 | } 228 | .xdsoft_datetimepicker .xdsoft_calendar td,.xdsoft_datetimepicker .xdsoft_calendar th{ 229 | width:14.2857142%; 230 | text-align:center; 231 | background: #F5F5F5; 232 | border:1px solid #DDDDDD; 233 | color: #666666; 234 | font-size: 12px; 235 | text-align: right; 236 | padding:0px; 237 | border-collapse:collapse; 238 | cursor:pointer; 239 | height: 25px; 240 | } 241 | .xdsoft_datetimepicker .xdsoft_calendar th{ 242 | background: #F1F1F1; 243 | } 244 | .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_today{ 245 | color:#33AAFF; 246 | } 247 | .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_default, 248 | .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current, 249 | .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current{ 250 | background: #33AAFF; 251 | box-shadow: #178FE5 0px 1px 3px 0px inset; 252 | color:#fff; 253 | font-weight: 700; 254 | } 255 | .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month, 256 | .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled, 257 | .xdsoft_datetimepicker .xdsoft_time_box >div >div.xdsoft_disabled{ 258 | opacity:0.5; 259 | } 260 | .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month.xdsoft_disabled{ 261 | opacity:0.2; 262 | } 263 | .xdsoft_datetimepicker .xdsoft_calendar td:hover, 264 | .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div:hover{ 265 | color: #fff !important; 266 | background: #ff8000 !important; 267 | box-shadow: none !important; 268 | } 269 | .xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled:hover, 270 | .xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_disabled:hover{ 271 | color: inherit !important; 272 | background: inherit !important; 273 | box-shadow: inherit !important; 274 | } 275 | .xdsoft_datetimepicker .xdsoft_calendar th{ 276 | font-weight: 700; 277 | text-align: center; 278 | color: #999; 279 | cursor:default; 280 | } 281 | .xdsoft_datetimepicker .xdsoft_copyright{ color:#ccc !important; font-size:10px;clear:both;float:none;margin-left:8px;} 282 | .xdsoft_datetimepicker .xdsoft_copyright a{ color:#eee !important;} 283 | .xdsoft_datetimepicker .xdsoft_copyright a:hover{ color:#aaa !important;} 284 | 285 | 286 | .xdsoft_time_box{ 287 | position:relative; 288 | border:1px solid #ccc; 289 | } 290 | .xdsoft_scrollbar >.xdsoft_scroller{ 291 | background:#ccc !important; 292 | height:20px; 293 | border-radius:3px; 294 | } 295 | .xdsoft_scrollbar{ 296 | position:absolute; 297 | width:7px; 298 | width:7px; 299 | right:0px; 300 | top:0px; 301 | bottom:0px; 302 | cursor:pointer; 303 | } 304 | .xdsoft_scroller_box{ 305 | position:relative; 306 | } -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/css/pagination.css: -------------------------------------------------------------------------------- 1 | .pagination { 2 | font-size: 16px; 3 | } 4 | .pagination a { 5 | text-decoration: none; 6 | color: #52A3F5; 7 | } 8 | .pagination a, 9 | .pagination span { 10 | display: block; 11 | float: left; 12 | text-align: center; 13 | line-height: 24px; 14 | margin-right: 5px; 15 | margin-bottom: 5px; 16 | width: 24px; 17 | height: 24px; 18 | border-radius: 12px; 19 | } 20 | .pagination span { 21 | margin-right: 3px; 22 | } 23 | .pagination .current { 24 | color: #fff; 25 | } 26 | .pagination .prev, 27 | .pagination .next { 28 | color: #52A3F5 !important; 29 | } 30 | .pagination .current.prev, 31 | .pagination .current.next { 32 | color: #666666 !important; 33 | } -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/css/track.css: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author:xuguanlong 3 | * @Date:2015-09-08 14:27:02 4 | * @Last Modified by: xuguanlong 5 | * @Last Modified time: 2015-11-09 14:47:40 6 | */ 7 | html, 8 | body { 9 | font: 14px/1.5 "Microsoft Yahei", arial, "Hiragino Sans GB", sans-serif; 10 | background: #08304A; 11 | height: 100%; 12 | overflow: hidden; 13 | margin: 0; 14 | padding: 0; 15 | } 16 | ul, 17 | li, 18 | p { 19 | list-style: none; 20 | margin: 0; 21 | padding: 0; 22 | } 23 | a { 24 | text-decoration: none; 25 | } 26 | a:focus { 27 | outline: none !important; 28 | } 29 | .left { 30 | left: 0px; 31 | } 32 | .right { 33 | right: 0px; 34 | } 35 | .type-ctr { 36 | position: absolute; 37 | top: 15px; 38 | z-index: 9999; 39 | width: 150px; 40 | margin: 0px; 41 | height: 33px; 42 | background: rgba(8, 47, 76, 0.8); 43 | box-sizing: content-box; 44 | margin-bottom: 2px; 45 | box-shadow: 0 0 10px rgba(0, 0, 0, .3); 46 | top: 48px; 47 | cursor: pointer; 48 | } 49 | .type-ctr.active { 50 | background: rgba(9, 34, 53, 0.8); 51 | } 52 | #track-btn { 53 | left: 15px; 54 | } 55 | #track-btn-2 { 56 | left: 165px; 57 | } 58 | .type-ctr a { 59 | font-size: 14px; 60 | text-decoration: none; 61 | display: inline-block; 62 | width: 100%; 63 | height: 32px; 64 | line-height: 32px; 65 | text-align: center; 66 | color: #eeeeee; 67 | } 68 | 69 | #mapContainer { 70 | height: 100%; 71 | /* 根据个性化地图设置地图容器的背景色 */ 72 | background-color: #212121 !important; 73 | } 74 | #data-box { 75 | position: absolute; 76 | width: 300px; 77 | top: 81px; 78 | left: 15px; 79 | z-index: 9999; 80 | } 81 | .title { 82 | position: absolute; 83 | top: 15px; 84 | left: 15px; 85 | width: 300px; 86 | margin: 0px; 87 | height: 32px; 88 | background: rgba(11, 103, 170, 0.5); 89 | box-sizing: content-box; 90 | margin-bottom: 2px; 91 | box-shadow: 0 0 10px rgba(0, 0, 0, .3); 92 | } 93 | .title .circle { 94 | background-color: rgb(98, 181, 0); 95 | display: inline-block; 96 | margin: 0px 3px; 97 | height: 10px; 98 | width: 10px; 99 | border-radius: 5px; 100 | } 101 | .title p { 102 | text-align: center; 103 | line-height: 32px; 104 | color: #ededed; 105 | height: 32px; 106 | } 107 | .title .name { 108 | max-width: 260px; 109 | } 110 | .title .ctrl { 111 | float: right; 112 | padding-right: 10px; 113 | padding-left: 10px; 114 | cursor: pointer; 115 | } 116 | #data-box .panel { 117 | background-color: rgba(0, 0, 0, 0.7); 118 | height: 490px; 119 | box-shadow: 0 0 10px rgba(0, 0, 0, .3); 120 | color: rgb(86, 86, 86); 121 | margin-bottom: 2px; 122 | position: relative; 123 | display: none; 124 | } 125 | #data-box .panel a { 126 | color: #666666; 127 | text-decoration: none; 128 | } 129 | #searchKey, 130 | #searchKey_2 { 131 | outline: none; 132 | width: 156px; 133 | height: 22px; 134 | line-height: 22px; 135 | margin: 15px 0px 10px 16px; 136 | border: solid 1px #343434; 137 | padding-left: 5px; 138 | background: transparent; 139 | color: #787878; 140 | } 141 | .search-i { 142 | cursor: pointer; 143 | position: relative; 144 | left: -25px; 145 | } 146 | #data-box .panel .btn, 147 | #track-box .btn { 148 | display: inline-block; 149 | height: 22px; 150 | font-size: 12px; 151 | line-height: 22px; 152 | padding: 1px 3px; 153 | color: #787878; 154 | margin-right: 3px; 155 | position: relative; 156 | left: -10px; 157 | border: solid 1px #343434; 158 | } 159 | #data-box .panel .btn:hover, 160 | #track-box .btn:hover { 161 | color: #ededed; 162 | } 163 | #data-box .panel .page-btn { 164 | text-align: center; 165 | display: inline-block; 166 | position: absolute; 167 | height: 24px; 168 | line-height: 24px; 169 | width: 150px; 170 | bottom: 0px; 171 | border: 1px solid rgba(0, 0, 0, 0.1); 172 | border-left: none; 173 | border-right: none; 174 | color: #666666; 175 | } 176 | #data-box .panel .page-btn:hover { 177 | background-color: #50667F; 178 | color: #ffffff; 179 | } 180 | #data-box .panel .page-btn.disabled { 181 | color: #9A9797; 182 | cursor: default; 183 | } 184 | #data-box .panel .page-btn.disabled:hover { 185 | color: #9A9797; 186 | background-color: #ffffff; 187 | } 188 | #data-box .panel .page-btn.left { 189 | border-right: 1px solid rgba(0, 0, 0, 0.1); 190 | } 191 | #data-box .tip { 192 | height: 40px; 193 | position: relative; 194 | z-index: 0; 195 | line-height: 40px; 196 | text-align: center; 197 | overflow: hidden; 198 | text-align: center; 199 | display: none; 200 | color: #F54336; 201 | background: rgba(0, 0, 0, 0.7); 202 | } 203 | #data-box .tip a { 204 | text-decoration: none; 205 | margin: 0px 3px; 206 | } 207 | #tracklist-panel { 208 | border-top: 1px solid rgba(86, 86, 86, 0.5); 209 | } 210 | #tracks-pager-ul, 211 | #tracks-pager-ul-2 { 212 | margin-top: 5px; 213 | padding: 6px 15px 0px 25px; 214 | border-top: 1px solid rgba(86, 86, 86, 0.5); 215 | position: absolute; 216 | bottom: 2px; 217 | width: 260px; 218 | overflow: hidden; 219 | } 220 | .tracks-ul { 221 | margin-top: 9px; 222 | } 223 | #tracklist-panel ul li { 224 | height: 27px; 225 | line-height: 27px; 226 | padding: 0px 7px 0px 16px; 227 | color: #cccccc; 228 | } 229 | #tracklist-panel ul li:hover { 230 | cursor: pointer; 231 | background-color: rgba(11, 103, 170, 0.5); 232 | } 233 | #tracklist-panel ul li span { 234 | width: 220px; 235 | white-space: nowrap; 236 | overflow: hidden; 237 | display: inline-block; 238 | float: left; 239 | position: relative; 240 | top: -2px; 241 | -o-text-overflow: ellipsis; 242 | text-overflow: ellipsis; 243 | 244 | } 245 | #tracklist-panel .state { 246 | display: inline-block; 247 | margin: 0px 15px; 248 | height: 10px; 249 | width: 10px; 250 | border-radius: 5px; 251 | background-color: rgb(232, 232, 232); 252 | position: relative; 253 | top: 8px; 254 | } 255 | #tracklist-panel .state.on { 256 | background-color: rgb(98, 181, 0); 257 | } 258 | #tracklist-panel .state.leave { 259 | background-color: rgb(98, 181, 0); 260 | } 261 | #tracklist-panel .state.off { 262 | background-color: rgb(232, 232, 232); 263 | } 264 | 265 | /* Checkmark style starts */ 266 | @-moz-keyframes dothabottomcheck { 267 | 0% { 268 | height: 0; 269 | } 270 | 100% { 271 | height: 2px; 272 | } 273 | } 274 | @-webkit-keyframes dothabottomcheck { 275 | 0% { 276 | height: 0; 277 | } 278 | 100% { 279 | height: 2px; 280 | } 281 | } 282 | @keyframes dothabottomcheck { 283 | 0% { 284 | height: 0; 285 | } 286 | 100% { 287 | height: 2px; 288 | } 289 | } 290 | @keyframes dothatopcheck { 291 | 0% { 292 | height: 0; 293 | } 294 | 50% { 295 | height: 0; 296 | } 297 | 100% { 298 | height: 2px; 299 | } 300 | } 301 | @-webkit-keyframes dothatopcheck { 302 | 0% { 303 | height: 0; 304 | } 305 | 50% { 306 | height: 0; 307 | } 308 | 100% { 309 | height: 2px; 310 | } 311 | } 312 | @-moz-keyframes dothatopcheck { 313 | 0% { 314 | height: 0; 315 | } 316 | 50% { 317 | height: 0; 318 | } 319 | 100% { 320 | height: 2px; 321 | } 322 | } 323 | input[type=checkbox] { 324 | display: none; 325 | } 326 | .check-box { 327 | height: 15px; 328 | width: 15px; 329 | background-color: transparent; 330 | border: 1px solid rgba(86, 86, 86, 1); 331 | position: relative; 332 | display: inline-block; 333 | cursor: pointer; 334 | margin-top: 5px; 335 | float: left; 336 | -webkit-box-sizing: border-box; 337 | -moz-box-sizing: border-box; 338 | box-sizing: border-box; 339 | -webkit-transition: border-color ease 0.1s; 340 | -moz-transition: border-color ease 0.1s; 341 | -o-transition: border-color ease 0.1s; 342 | transition: border-color ease 0.1s; 343 | } 344 | .seled-track .check-box { 345 | margin-top: 9px; 346 | margin-right: 10px; 347 | } 348 | .check-box::before, 349 | .check-box::after { 350 | position: absolute; 351 | height: 0; 352 | width: 6px; 353 | background-color: #40AB54; 354 | display: inline-block; 355 | border-radius: 0px; 356 | content: ' '; 357 | -webkit-transform-origin: left top; 358 | -moz-transform-origin: left top; 359 | -ms-transform-origin: left top; 360 | -o-transform-origin: left top; 361 | transform-origin: left top; 362 | -webkit-transition: opacity ease .1; 363 | -moz-transition: opacity ease .1; 364 | transition: opacity ease .1; 365 | -webkit-box-sizing: border-box; 366 | -moz-box-sizing: border-box; 367 | box-sizing: border-box; 368 | } 369 | .check-box::before { 370 | top: 10px; 371 | left: 5px; 372 | width: 6px; 373 | -webkit-transform: rotate(-135deg); 374 | -moz-transform: rotate(-135deg); 375 | -ms-transform: rotate(-135deg); 376 | -o-transform: rotate(-135deg); 377 | transform: rotate(-135deg); 378 | 379 | } 380 | .check-box::after { 381 | top: 10px; 382 | left: 5px; 383 | width: 16px; 384 | -webkit-transform: rotate(-56deg); 385 | -moz-transform: rotate(-56deg); 386 | -ms-transform: rotate(-56deg); 387 | -o-transform: rotate(-56deg); 388 | transform: rotate(-56deg); 389 | } 390 | input[type=checkbox]:checked + .check-box, 391 | .check-box.checked { 392 | border-color: #40AB54; 393 | } 394 | input[type=checkbox]:checked + .check-box::after, 395 | .check-box.checked::after { 396 | height: 2px; 397 | -webkit-animation: dothabottomcheck 0.2s ease 0s forwards; 398 | -moz-animation: dothabottomcheck 0.2s ease 0s forwards; 399 | -o-animation: dothabottomcheck 0.2s ease 0s forwards; 400 | animation: dothabottomcheck 0.2s ease 0s forwards; 401 | } 402 | input[type=checkbox]:checked + .check-box::before, 403 | .check-box.checked::before { 404 | height: 2px; 405 | -webkit-animation: dothatopcheck 0.2s ease 0s forwards; 406 | -moz-animation: dothatopcheck 0.2s ease 0s forwards; 407 | -o-animation: dothatopcheck 0.2s ease 0s forwards; 408 | animation: dothatopcheck 0.2s ease 0s forwards; 409 | } 410 | #track-box { 411 | z-index: 10000; 412 | background-color: rgba(0, 0, 0, 0.7); 413 | box-shadow: 0 0 10px rgba(0, 0, 0, .3); 414 | color: rgb(86, 86, 86); 415 | position: relative; 416 | height: 490px; 417 | width: 300px; 418 | display: none; 419 | } 420 | #track-box p { 421 | margin-top: 12px; 422 | font-size: 18px; 423 | position: relative; 424 | padding: 0px 10px 10px 14px; 425 | border-bottom: solid 1px #e5e5e5; 426 | } 427 | #track-box .close { 428 | padding-left: 5px; 429 | float: right; 430 | margin-right: 5px; 431 | cursor: pointer; 432 | } 433 | .date_btn { 434 | font-size: 12px; 435 | position: relative; 436 | left: -10px; 437 | margin: 0px 5px; 438 | cursor: pointer; 439 | color: #428bca; 440 | } 441 | #track-box .date-panel { 442 | line-height: 40px; 443 | font-size: 14px; 444 | position: relative; 445 | padding-top: 10px; 446 | padding-left: 15px; 447 | padding-bottom: 10px; 448 | color: #cccccc; 449 | background-color: rgba(9, 34, 53, 0.8); 450 | } 451 | #track-box div { 452 | position: relative; 453 | } 454 | #track-box .date { 455 | border: 1px solid rgba(86, 86, 86, 0.6); 456 | padding: 2px 8px; 457 | margin: 6px 10px; 458 | margin-left: 20px; 459 | cursor: pointer; 460 | width: 150px; 461 | display: inline-block; 462 | height: 24px; 463 | position: absolute; 464 | } 465 | .date .date-title { 466 | padding: 0px 10px; 467 | float: left; 468 | width: 95px; 469 | height: 24px; 470 | line-height: 24px; 471 | text-align: center; 472 | } 473 | .date .sele { 474 | width: 24px; 475 | border-left: 1px solid rgba(86, 86, 86, 0.6); 476 | float: right; 477 | margin-left: 8px; 478 | height: 24px; 479 | position: relative; 480 | } 481 | .date-chose { 482 | text-align: center; 483 | } 484 | .sele i { 485 | position: absolute; 486 | left: 48%; 487 | top: 10%; 488 | } 489 | #track-box .tracks-panel { 490 | padding: 5px 5px 15px 5px; 491 | height: 340px; 492 | overflow-y: auto; 493 | } 494 | .seled-track { 495 | padding-left: 10px; 496 | height: 32px; 497 | line-height: 32px; 498 | position: relative; 499 | color: #cccccc; 500 | } 501 | .sel-track-name { 502 | display: inline-block; 503 | width: 90px; 504 | white-space: nowrap; 505 | text-overflow: ellipsis; 506 | -o-text-overflow: ellipsis; 507 | overflow: hidden; 508 | } 509 | .seled-track:hover { 510 | cursor: pointer; 511 | background-color: rgba(11, 103, 170, 0.5); 512 | } 513 | .seled-track.selected { 514 | background-color: rgba(11, 103, 170, 0.5); 515 | } 516 | .pro-bar { 517 | position: relative; 518 | display: inline-block; 519 | position: relative; 520 | margin-left: 5px; 521 | width: 110px; 522 | height: 6px; 523 | top: -13px; 524 | background-color: rgba(110, 106, 95, 1); 525 | border-radius: 10px; 526 | } 527 | .pro-bar.progressing { 528 | background-color: rgba(110, 106, 95, 0.8); 529 | } 530 | .pro-bar .bar { 531 | position: absolute; 532 | left: 0px; 533 | top: 0px; 534 | content: ' '; 535 | height: 100%; 536 | width: 100%; 537 | background-repeat: repeat-x; 538 | border-radius: 10px; 539 | background-size: 30px 30px; 540 | } 541 | .pro-bar.progressing .bar { 542 | background-image: linear-gradient(-45deg, rgba(255, 255, 255, .25) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .25) 50%, rgba(255, 255, 255, .25) 75%, transparent 75%, transparent); 543 | -webkit-animation: progressLTR 0.6s linear infinite; 544 | -o-animation: progressLTR 0.6s linear infinite; 545 | animation: progressLTR 0.6s linear infinite; 546 | } 547 | .process { 548 | font-size: 12px; 549 | color: #bbbbbb; 550 | padding: 3px 5px; 551 | height: 16px; 552 | line-height: 16px; 553 | margin-left: 15px; 554 | border-radius: 4px; 555 | position: absolute; 556 | top: 5px; 557 | right: 10px; 558 | } 559 | 560 | @keyframes progressLTR { 561 | to { 562 | background-position: 30px 0; 563 | } 564 | } 565 | .track-bottom { 566 | padding: 11px 15px 10px 35px; 567 | border-top: solid 1px rgba(86, 86, 86, 0.6); 568 | } 569 | .track-bottom a { 570 | display: inline-block; 571 | height: 30px; 572 | line-height: 30px; 573 | width: 80px; 574 | background-color: #52A3F5; 575 | border-radius: 5px; 576 | color: #ffffff; 577 | text-align: center; 578 | font-size: 14px; 579 | margin: 0px 16px; 580 | } 581 | .track-bottom a:hover { 582 | background-color: #0E7CEC; 583 | } 584 | .mask, 585 | .panel-mask { 586 | position: absolute; 587 | left: 0px; 588 | top: 0px; 589 | width: 100%; 590 | height: 490px; 591 | z-index: 10001; 592 | display: none; 593 | } 594 | .mask img, 595 | .panel-mask img { 596 | position: absolute; 597 | margin-left: -41px; 598 | margin-top: -41px; 599 | top: 50%; 600 | left: 50%; 601 | } 602 | .timeline-ctrl { 603 | position: absolute; 604 | z-index: 10002; 605 | width: 780px; 606 | height: 60px; 607 | right: 5px; 608 | bottom: -65px; 609 | transition: bottom 0.5s; 610 | } 611 | .timeline-ctrl.show { 612 | bottom: 1px; 613 | } 614 | #timeline, 615 | #cursor { 616 | position: absolute; 617 | width: 780px; 618 | height: 60px; 619 | left: 0px; 620 | top: 0px; 621 | cursor: pointer; 622 | } 623 | #timeCtr { 624 | width: 16px; 625 | height: 60px; 626 | position: absolute; 627 | left: 0px; 628 | top: 0px; 629 | cursor: pointer; 630 | } 631 | #time_span { 632 | width: 200px; 633 | height: 60px; 634 | font-size: 19px; 635 | font-weight: 400; 636 | line-height: 60px; 637 | color: #ffffff; 638 | background-color: rgba(0, 0, 0, .5); 639 | text-align: center; 640 | position: absolute; 641 | right: 785px; 642 | bottom: -70px; 643 | transition: bottom 0.5s; 644 | } 645 | #time_span.show { 646 | bottom: 1px; 647 | } 648 | .anchorBL { 649 | display: none !important; 650 | } 651 | .chart-ctrl { 652 | position: absolute; 653 | width: 52px; 654 | height: 52px; 655 | top: 20px; 656 | right: 15px; 657 | background: rgba(66, 66, 66, 0.7); 658 | border: 1px solid rgba(66, 66, 66, 1); 659 | cursor: pointer; 660 | z-index: 200; 661 | display: none; 662 | } 663 | .chart-ctrl:hover { 664 | border: 1px solid rgba(22, 68, 102, 1); 665 | } 666 | .jiupian .title, 667 | .chart-ctrl .title { 668 | position: absolute; 669 | text-align: center; 670 | width: 54px; 671 | height: 18px; 672 | line-height: 18px; 673 | display: inline-block; 674 | top: 35px; 675 | left: -1px; 676 | font-size: 12px; 677 | color: #cccccc; 678 | background-color: rgba(99, 99, 99, 1); 679 | transition: background-color 0.2s; 680 | } 681 | .no-track-tip { 682 | position: absolute; 683 | text-align: center; 684 | top: 10px; 685 | display: inline-block; 686 | height: 28px; 687 | line-height: 28px; 688 | color: #F54336; 689 | right: 60px; 690 | overflow: hidden; 691 | width: 200px; 692 | background-color: rgba(66, 66, 66, 1); 693 | display: none; 694 | } 695 | 696 | .chart-ctrl:hover .title{ 697 | background-color: rgba(22, 68, 102, 1); 698 | } 699 | .chart-wrap { 700 | position: absolute; 701 | width: 650px; 702 | height: 340px; 703 | top: 20px; 704 | right: 18px; 705 | display: none; 706 | transition: transform 0.6s; 707 | transform: scale(0.08, 0.1); 708 | transform-origin: 100% 0%; 709 | z-index: 199; 710 | } 711 | .chart-wrap.max { 712 | transform: scale(1, 1); 713 | z-index: 201; 714 | right: 0px; 715 | } 716 | #chart { 717 | position: absolute; 718 | width: 640px; 719 | height: 340px; 720 | left: 0px; 721 | right: 0px; 722 | } 723 | #chart.max { 724 | display: block; 725 | transform: scale(1, 1); 726 | } 727 | .map-ctrl { 728 | position: absolute; 729 | right: 20px; 730 | z-index: 999; 731 | cursor: pointer; 732 | color: rgba(211, 211, 211, 0.8); 733 | font-size: 30px; 734 | } 735 | .map-ctrl:hover { 736 | color: rgba(233, 233, 233, 1); 737 | } 738 | .zoom-out { 739 | bottom: 110px; 740 | } 741 | .zoom-in { 742 | bottom: 70px; 743 | } 744 | .my-alert { 745 | position: absolute; 746 | height: 100%; 747 | width: 100%; 748 | left: 0px; 749 | top: 0px; 750 | background-color: rgba(0,0,0,.5); 751 | text-align:center; 752 | z-index: 100001; 753 | display: none; 754 | } 755 | .my-alert p { 756 | position: absolute; 757 | top: 200px; 758 | text-align: center; 759 | height: 50px; 760 | width: 860px; 761 | font-size: 18px; 762 | color: #F54336; 763 | left: 50%; 764 | margin-left: -430px; 765 | } 766 | .my-alert .close { 767 | position: absolute; 768 | height: 30px; 769 | width: 30px; 770 | right: 0; 771 | top: -50px; 772 | font-size: 24px; 773 | cursor: pointer; 774 | color: rgba(211, 211, 211, 0.8); 775 | } 776 | .my-alert .close:hover { 777 | color: rgba(233, 233, 233, 1); 778 | } 779 | #old-link { 780 | color: #ccc; 781 | } 782 | ::-webkit-scrollbar { 783 | width: 14px; 784 | height: 14px; 785 | } 786 | ::-webkit-scrollbar-track, 787 | ::-webkit-scrollbar-thumb { 788 | border-radius: 999px; 789 | border: 5px solid transparent; 790 | } 791 | ::-webkit-scrollbar-track { 792 | box-shadow: 1px 1px 5px rgba(0, 0, 0, .2) inset; 793 | } 794 | ::-webkit-scrollbar-thumb { 795 | min-height: 20px; 796 | background-clip: content-box; 797 | box-shadow: 0 0 0 5px rgba(0, 0, 0, .2) inset; 798 | background-color: rgba(80, 102, 127, 0.7); 799 | } 800 | ::-webkit-scrollbar-corner { 801 | background: transparent; 802 | } -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/data/list.json: -------------------------------------------------------------------------------- 1 | { 2 | "status": 0, 3 | "size": 4, 4 | "total": 4, 5 | "pois": [{ 6 | "city": "来宾市", 7 | "create_time": "2014-10-17 10:46:11", 8 | "district": "兴宾区", 9 | "loc_time": 1413526633, 10 | "location": [ 11 | 109.23276173322, 12 | 23.751021734754 13 | ], 14 | "modify_time": "2014-10-17 14:17:01", 15 | "province": "广西壮族自治区", 16 | "title": null, 17 | "track_name": "唐G12001", 18 | "city_id": 202, 19 | "track_id": 517118819 20 | }, { 21 | "city": "常州市", 22 | "create_time": "2014-10-17 09:28:03", 23 | "district": "武进区", 24 | "loc_time": 1413526632, 25 | "location": [ 26 | 119.83801525967, 27 | 31.81347898519 28 | ], 29 | "modify_time": "2014-10-17 14:16:59", 30 | "province": "江苏省", 31 | "title": null, 32 | "track_name": "宋D66754", 33 | "city_id": 348, 34 | "track_id": 516977414 35 | }, { 36 | "city": "常州市", 37 | "create_time": "2014-10-17 08:04:05", 38 | "district": "金坛市", 39 | "loc_time": 1413525940, 40 | "location": [ 41 | 119.60296060637, 42 | 31.744964416469 43 | ], 44 | "modify_time": "2014-10-17 14:05:33", 45 | "province": "江苏省", 46 | "title": null, 47 | "track_name": "元D33567", 48 | "city_id": 348, 49 | "track_id": 516915570 50 | }, { 51 | "city": "金华市", 52 | "create_time": "2014-10-17 08:59:12", 53 | "district": "义乌市", 54 | "loc_time": 1413526668, 55 | "location": [ 56 | 120.14057421723, 57 | 29.320655146984 58 | ], 59 | "modify_time": "2014-10-17 14:16:59", 60 | "province": "浙江省", 61 | "title": null, 62 | "track_name": "明GC9D99", 63 | "city_id": 333, 64 | "track_id": 516922851 65 | }], 66 | "message": "成功" 67 | } 68 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/data/trace.json: -------------------------------------------------------------------------------- 1 | { 2 | "status": 0, 3 | "actives": 0, 4 | "service": { 5 | "name": "车辆示例平台", 6 | "create_time": "2014-10-13 17:39:35", 7 | "modify_time": "2014-10-13 17:39:35", 8 | "service_id": 81142, 9 | "columns": [ 10 | { 11 | "key": "loc_time", 12 | "type": 1, 13 | "name": "loc_time", 14 | "is_sortfilter_field": 1, 15 | "sortfilter_id": 1, 16 | "is_search_field": 0, 17 | "is_index_field": 1, 18 | "is_unique_field": 0, 19 | "create_time": "2014-10-13 17:39:34", 20 | "modify_time": "2014-10-13 17:39:34", 21 | "column_id": 80797, 22 | "service_id": 81142 23 | }, 24 | { 25 | "key": "track_name", 26 | "type": 3, 27 | "name": "车牌号", 28 | "max_length": 512, 29 | "is_sortfilter_field": 0, 30 | "is_search_field": 1, 31 | "is_index_field": 1, 32 | "is_unique_field": 1, 33 | "create_time": "2014-10-13 17:39:34", 34 | "modify_time": "2014-10-13 17:39:34", 35 | "column_id": 80796, 36 | "service_id": 81142 37 | } 38 | ] 39 | }, 40 | "message": "成功" 41 | } -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.7_Wechat/app/static/favicon.ico -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/images/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.7_Wechat/app/static/images/11.png -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/images/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Run-map/RUNMAP/6f0703d93a70ecc3248290f67c8fb12eadd182f3/MVP_V0.7_Wechat/app/static/images/loading-1.gif -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/js/baiduTemplate.js: -------------------------------------------------------------------------------- 1 | /** 2 | * baiduTemplate简单好用的Javascript模板引擎 1.0.6 版本 3 | * http://baidufe.github.com/BaiduTemplate 4 | * 开源协议:BSD License 5 | * 浏览器环境占用命名空间 baidu.template ,nodejs环境直接安装 npm install baidutemplate 6 | * @param str{String} dom结点ID,或者模板string 7 | * @param data{Object} 需要渲染的json对象,可以为空。当data为{}时,仍然返回html。 8 | * @return 如果无data,直接返回编译后的函数;如果有data,返回html。 9 | * @author wangxiao 10 | * @email 1988wangxiao@gmail.com 11 | */ 12 | 13 | ; 14 | (function(window) { 15 | 16 | //取得浏览器环境的baidu命名空间,非浏览器环境符合commonjs规范exports出去 17 | //修正在nodejs环境下,采用baidu.template变量名 18 | var baidu = typeof module === 'undefined' ? (window.baidu = window.baidu || {}) : module.exports; 19 | 20 | //模板函数(放置于baidu.template命名空间下) 21 | baidu.template = function(str, data) { 22 | 23 | //检查是否有该id的元素存在,如果有元素则获取元素的innerHTML/value,否则认为字符串为模板 24 | var fn = (function() { 25 | 26 | //判断如果没有document,则为非浏览器环境 27 | if(!window.document) { 28 | return bt._compile(str); 29 | }; 30 | 31 | //HTML5规定ID可以由任何不包含空格字符的字符串组成 32 | var element = document.getElementById(str); 33 | if(element) { 34 | 35 | //取到对应id的dom,缓存其编译后的HTML模板函数 36 | if(bt.cache[str]) { 37 | return bt.cache[str]; 38 | }; 39 | 40 | //textarea或input则取value,其它情况取innerHTML 41 | var html = /^(textarea|input)$/i.test(element.nodeName) ? element.value : element.innerHTML; 42 | return bt._compile(html); 43 | 44 | } else { 45 | 46 | //是模板字符串,则生成一个函数 47 | //如果直接传入字符串作为模板,则可能变化过多,因此不考虑缓存 48 | return bt._compile(str); 49 | }; 50 | 51 | })(); 52 | 53 | //有数据则返回HTML字符串,没有数据则返回函数 支持data={}的情况 54 | var result = bt._isObject(data) ? fn(data) : fn; 55 | fn = null; 56 | 57 | return result; 58 | }; 59 | 60 | //取得命名空间 baidu.template 61 | var bt = baidu.template; 62 | 63 | //标记当前版本 64 | bt.versions = bt.versions || []; 65 | bt.versions.push('1.0.6'); 66 | 67 | //缓存 将对应id模板生成的函数缓存下来。 68 | bt.cache = {}; 69 | 70 | //自定义分隔符,可以含有正则中的字符,可以是HTML注释开头 71 | bt.LEFT_DELIMITER = bt.LEFT_DELIMITER || '<%'; 72 | bt.RIGHT_DELIMITER = bt.RIGHT_DELIMITER || '%>'; 73 | 74 | //自定义默认是否转义,默认为默认自动转义 75 | bt.ESCAPE = true; 76 | 77 | //HTML转义 78 | bt._encodeHTML = function(source) { 79 | return String(source) 80 | .replace(/&/g, '&') 81 | .replace(//g, '>') 83 | .replace(/\\/g, '\') 84 | .replace(/"/g, '"') 85 | .replace(/'/g, '''); 86 | }; 87 | 88 | //转义影响正则的字符 89 | bt._encodeReg = function(source) { 90 | return String(source).replace(/([.*+?^=!:${}()|[\]/\\])/g, '\\$1'); 91 | }; 92 | 93 | //转义UI UI变量使用在HTML页面标签onclick等事件函数参数中 94 | bt._encodeEventHTML = function(source) { 95 | return String(source) 96 | .replace(/&/g, '&') 97 | .replace(//g, '>') 99 | .replace(/"/g, '"') 100 | .replace(/'/g, ''') 101 | .replace(/\\\\/g, '\\') 102 | .replace(/\\\//g, '\/') 103 | .replace(/\\n/g, '\n') 104 | .replace(/\\r/g, '\r'); 105 | }; 106 | 107 | //将字符串拼接生成函数,即编译过程(compile) 108 | bt._compile = function(str) { 109 | var funBody = "var _template_fun_array=[];\nvar fn=(function(__data__){\nvar _template_varName='';\nfor(name in __data__){\n_template_varName+=('var '+name+'=__data__[\"'+name+'\"];');\n};\neval(_template_varName);\n_template_fun_array.push('" + bt._analysisStr(str) + "');\n_template_varName=null;\n})(_template_object);\nfn = null;\nreturn _template_fun_array.join('');\n"; 110 | return new Function("_template_object", funBody); 111 | }; 112 | 113 | //判断是否是Object类型 114 | bt._isObject = function(source) { 115 | return 'function' === typeof source || !!(source && 'object' === typeof source); 116 | }; 117 | 118 | //解析模板字符串 119 | bt._analysisStr = function(str) { 120 | 121 | //取得分隔符 122 | var _left_ = bt.LEFT_DELIMITER; 123 | var _right_ = bt.RIGHT_DELIMITER; 124 | 125 | //对分隔符进行转义,支持正则中的元字符,可以是HTML注释 126 | var _left = bt._encodeReg(_left_); 127 | var _right = bt._encodeReg(_right_); 128 | 129 | str = String(str) 130 | 131 | //去掉分隔符中js注释 132 | .replace(new RegExp("(" + _left + "[^" + _right + "]*)//.*\n", "g"), "$1") 133 | 134 | //去掉注释内容 <%* 这里可以任意的注释 *%> 135 | //默认支持HTML注释,将HTML注释匹配掉的原因是用户有可能用 来做分割符 136 | .replace(new RegExp("", "g"), "") 137 | .replace(new RegExp(_left + "\\*.*?\\*" + _right, "g"), "") 138 | 139 | //把所有换行去掉 \r回车符 \t制表符 \n换行符 140 | .replace(new RegExp("[\\r\\t\\n]", "g"), "") 141 | 142 | //用来处理非分隔符内部的内容中含有 斜杠 \ 单引号 ‘ ,处理办法为HTML转义 143 | .replace(new RegExp(_left + "(?:(?!" + _right + ")[\\s\\S])*" + _right + "|((?:(?!" + _left + ")[\\s\\S])+)", "g"), function(item, $1) { 144 | var str = ''; 145 | if($1) { 146 | 147 | //将 斜杠 单引 HTML转义 148 | str = $1.replace(/\\/g, "\").replace(/'/g, '''); 149 | while(/<[^<]*?'[^<]*?>/g.test(str)) { 150 | 151 | //将标签内的单引号转义为\r 结合最后一步,替换为\' 152 | str = str.replace(/(<[^<]*?)'([^<]*?>)/g, '$1\r$2') 153 | }; 154 | } else { 155 | str = item; 156 | } 157 | return str; 158 | }); 159 | 160 | 161 | str = str 162 | //定义变量,如果没有分号,需要容错 <%var val='test'%> 163 | .replace(new RegExp("(" + _left + "[\\s]*?var[\\s]*?.*?[\\s]*?[^;])[\\s]*?" + _right, "g"), "$1;" + _right_) 164 | 165 | //对变量后面的分号做容错(包括转义模式 如<%:h=value%>) <%=value;%> 排除掉函数的情况 <%fun1();%> 排除定义变量情况 <%var val='test';%> 166 | .replace(new RegExp("(" + _left + ":?[hvu]?[\\s]*?=[\\s]*?[^;|" + _right + "]*?);[\\s]*?" + _right, "g"), "$1" + _right_) 167 | 168 | //按照 <% 分割为一个个数组,再用 \t 和在一起,相当于将 <% 替换为 \t 169 | //将模板按照<%分为一段一段的,再在每段的结尾加入 \t,即用 \t 将每个模板片段前面分隔开 170 | .split(_left_).join("\t"); 171 | 172 | //支持用户配置默认是否自动转义 173 | if(bt.ESCAPE) { 174 | str = str 175 | 176 | //找到 \t=任意一个字符%> 替换为 ‘,任意字符,' 177 | //即替换简单变量 \t=data%> 替换为 ',data,' 178 | //默认HTML转义 也支持HTML转义写法<%:h=value%> 179 | .replace(new RegExp("\\t=(.*?)" + _right, "g"), "',typeof($1) === 'undefined'?'':baidu.template._encodeHTML($1),'"); 180 | } else { 181 | str = str 182 | 183 | //默认不转义HTML转义 184 | .replace(new RegExp("\\t=(.*?)" + _right, "g"), "',typeof($1) === 'undefined'?'':$1,'"); 185 | }; 186 | 187 | str = str 188 | 189 | //支持HTML转义写法<%:h=value%> 190 | .replace(new RegExp("\\t:h=(.*?)" + _right, "g"), "',typeof($1) === 'undefined'?'':baidu.template._encodeHTML($1),'") 191 | 192 | //支持不转义写法 <%:=value%>和<%-value%> 193 | .replace(new RegExp("\\t(?::=|-)(.*?)" + _right, "g"), "',typeof($1)==='undefined'?'':$1,'") 194 | 195 | //支持url转义 <%:u=value%> 196 | .replace(new RegExp("\\t:u=(.*?)" + _right, "g"), "',typeof($1)==='undefined'?'':encodeURIComponent($1),'") 197 | 198 | //支持UI 变量使用在HTML页面标签onclick等事件函数参数中 <%:v=value%> 199 | .replace(new RegExp("\\t:v=(.*?)" + _right, "g"), "',typeof($1)==='undefined'?'':baidu.template._encodeEventHTML($1),'") 200 | 201 | //将字符串按照 \t 分成为数组,在用'); 将其合并,即替换掉结尾的 \t 为 '); 202 | //在if,for等语句前面加上 '); ,形成 ');if ');for 的形式 203 | .split("\t").join("');") 204 | 205 | //将 %> 替换为_template_fun_array.push(' 206 | //即去掉结尾符,生成函数中的push方法 207 | //如:if(list.length=5){%>

',list[4],'

');} 208 | //会被替换为 if(list.length=5){_template_fun_array.push('

',list[4],'

');} 209 | .split(_right_).join("_template_fun_array.push('") 210 | 211 | //将 \r 替换为 \ 212 | .split("\r").join("\\'"); 213 | 214 | return str; 215 | }; 216 | 217 | })(window); 218 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/js/demoTrack.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @file overview demoTrack.js 3 | * @Author: xuguanlong 4 | * @Date: 2015-11-03 16:10:57 5 | * @Last Modified by: xuguanlong 6 | * @Last Modified time: 2015-11-03 19:38:23 7 | */ 8 | 9 | $(document).ready(function () { 10 | function init() { 11 | var dataBox = require('track/demo'); 12 | dataBox.initEvents(); 13 | dataBox.getTraceDetail(); 14 | } 15 | try { 16 | init(); 17 | } catch (e) { 18 | setTimeout(function () { 19 | init(); 20 | }, 1000); 21 | } 22 | 23 | }); -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/js/esl/css.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ESL (Enterprise Standard Loader) 3 | * Copyright 2013 Baidu Inc. All rights reserved. 4 | * 5 | * @file CSS Loader-Plugin 6 | * @author errorrik(errorrik@gmail.com) 7 | */ 8 | 9 | // 构建环境暂不支持分析,为了能合并该plugin到loader里, 10 | // 只能暂时使用具名id 11 | define( 'css', { 12 | load: function ( resourceId, req, load, config ) { 13 | var link = document.createElement( 'link' ); 14 | link.setAttribute( 'rel', 'stylesheet' ); 15 | link.setAttribute( 'type', 'text/css' ); 16 | link.setAttribute( 'href', req.toUrl( resourceId ) ); 17 | 18 | var parent = document.getElementsByTagName( 'head' )[ 0 ] || document.body; 19 | parent.appendChild( link ); 20 | 21 | parent = null; 22 | link = null; 23 | 24 | load( true ); 25 | } 26 | } ); 27 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/js/esl/js.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ESL (Enterprise Standard Loader) 3 | * Copyright 2013 Baidu Inc. All rights reserved. 4 | * 5 | * @file JS Loader-Plugin 6 | * @author errorrik(errorrik@gmail.com) 7 | */ 8 | 9 | // 构建环境暂不支持分析,为了能合并该plugin到loader里, 10 | // 只能暂时使用具名id 11 | define( 'js', { 12 | load: function ( resourceId, req, load, config ) { 13 | var script = document.createElement( 'script' ); 14 | script.src = req.toUrl( resourceId ); 15 | script.async = true; 16 | if ( script.readyState ) { 17 | script.onreadystatechange = onload; 18 | } 19 | else { 20 | script.onload = onload; 21 | } 22 | 23 | var parent = document.getElementsByTagName( 'head' )[ 0 ] || document.body; 24 | parent.appendChild( script ) && ( parent = null ); 25 | 26 | function onload() { 27 | var readyState = script.readyState; 28 | if ( 29 | typeof readyState == 'undefined' 30 | || /^(loaded|complete)$/.test( readyState ) 31 | ) { 32 | script.onload = script.onreadystatechange = null; 33 | script = null; 34 | load( true ); 35 | } 36 | } 37 | } 38 | } ); 39 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/js/jquery.pagination.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This jQuery plugin displays pagination links inside the selected elements. 3 | * 4 | * @author Gabriel Birke (birke *at* d-scribe *dot* de) 5 | * @version 1.2 6 | * @param {int} maxentries Number of entries to paginate 7 | * @param {Object} opts Several options (see README for documentation) 8 | * @return {Object} jQuery Object 9 | */ 10 | jQuery.fn.pagination = function(maxentries, opts){ 11 | opts = jQuery.extend({ 12 | items_per_page:10, 13 | num_display_entries:10, 14 | current_page:0, 15 | num_edge_entries:0, 16 | link_to:"javascript:void(0)", 17 | prev_text:"Prev", 18 | next_text:"Next", 19 | ellipse_text:"...", 20 | prev_show_always:true, 21 | next_show_always:true, 22 | callback:function(){return false;} 23 | },opts||{}); 24 | 25 | return this.each(function() { 26 | /** 27 | * Calculate the maximum number of pages 28 | */ 29 | function numPages() { 30 | return Math.ceil(maxentries/opts.items_per_page); 31 | } 32 | 33 | /** 34 | * Calculate start and end point of pagination links depending on 35 | * current_page and num_display_entries. 36 | * @return {Array} 37 | */ 38 | function getInterval() { 39 | var ne_half = Math.ceil(opts.num_display_entries/2); 40 | var np = numPages(); 41 | var upper_limit = np-opts.num_display_entries; 42 | var start = current_page>ne_half?Math.max(Math.min(current_page-ne_half, upper_limit), 0):0; 43 | var end = current_page>ne_half?Math.min(current_page+ne_half, np):Math.min(opts.num_display_entries, np); 44 | return [start,end]; 45 | } 46 | 47 | /** 48 | * This is the event handling function for the pagination links. 49 | * @param {int} page_id The new page number 50 | */ 51 | function pageSelected(page_id, evt){ 52 | current_page = page_id; 53 | drawLinks(); 54 | var continuePropagation = opts.callback(page_id, panel); 55 | if (!continuePropagation) { 56 | if (evt.stopPropagation) { 57 | evt.stopPropagation(); 58 | } 59 | else { 60 | evt.cancelBubble = true; 61 | } 62 | } 63 | return continuePropagation; 64 | } 65 | 66 | /** 67 | * This function inserts the pagination links into the container element 68 | */ 69 | function drawLinks() { 70 | panel.empty(); 71 | var interval = getInterval(); 72 | var np = numPages(); 73 | // This helper function returns a handler function that calls pageSelected with the right page_id 74 | var getClickHandler = function(page_id) { 75 | return function(evt){ return pageSelected(page_id,evt); } 76 | } 77 | // Helper function for generating a single link (or a span tag if it's the current page) 78 | var appendItem = function(page_id, appendopts){ 79 | page_id = page_id<0?0:(page_id"+(appendopts.text)+""); 83 | } 84 | else 85 | { 86 | var lnk = jQuery(""+(appendopts.text)+"") 87 | .bind("click", getClickHandler(page_id)) 88 | .attr('href', opts.link_to.replace(/__id__/,page_id)); 89 | 90 | 91 | } 92 | if(appendopts.classes){lnk.addClass(appendopts.classes);} 93 | panel.append(lnk); 94 | } 95 | // Generate "Previous"-Link 96 | if(opts.prev_text && (current_page > 0 || opts.prev_show_always)){ 97 | appendItem(current_page-1,{text:opts.prev_text, classes:"prev"}); 98 | } 99 | // Generate starting points 100 | if (interval[0] > 0 && opts.num_edge_entries > 0) 101 | { 102 | var end = Math.min(opts.num_edge_entries, interval[0]); 103 | for(var i=0; i"+opts.ellipse_text+"").appendTo(panel); 109 | } 110 | } 111 | // Generate interval links 112 | for(var i=interval[0]; i 0) 117 | { 118 | if(np-opts.num_edge_entries > interval[1]&& opts.ellipse_text) 119 | { 120 | jQuery(""+opts.ellipse_text+"").appendTo(panel); 121 | } 122 | var begin = Math.max(np-opts.num_edge_entries, interval[1]); 123 | for(var i=begin; i 0) { 145 | pageSelected(current_page - 1); 146 | return true; 147 | } 148 | else { 149 | return false; 150 | } 151 | } 152 | this.nextPage = function(){ 153 | if(current_page < numPages()-1) { 154 | pageSelected(current_page+1); 155 | return true; 156 | } 157 | else { 158 | return false; 159 | } 160 | } 161 | // When all initialisation is done, draw the links 162 | drawLinks(); 163 | // call callback function 164 | //opts.callback(current_page, this); 165 | }); 166 | } 167 | 168 | 169 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/static/js/mousewheel.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery Mousewheel 3.1.13 3 | * 4 | * Copyright 2015 jQuery Foundation and other contributors 5 | * Released under the MIT license. 6 | * http://jquery.org/license 7 | */ 8 | !function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a:a(jQuery)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type="mousewheel","detail"in g&&(m=-1*g.detail),"wheelDelta"in g&&(m=g.wheelDelta),"wheelDeltaY"in g&&(m=g.wheelDeltaY),"wheelDeltaX"in g&&(l=-1*g.wheelDeltaX),"axis"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,"deltaY"in g&&(m=-1*g.deltaY,j=m),"deltaX"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,"mousewheel-line-height");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,"mousewheel-page-height");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120===0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b),d=c["offsetParent"in a.fn?"offsetParent":"parent"]();return d.length||(d=a("body")),parseInt(d.css("fontSize"),10)||parseInt(c.css("fontSize"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})}); -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/templates/404.html: -------------------------------------------------------------------------------- 1 | {% block title %}Runmap - Page Not Found{% endblock %} 2 | 3 | {% block page_content %} 4 | 7 | {% endblock %} 8 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/templates/500.html: -------------------------------------------------------------------------------- 1 | {% block title %}Runmap - Internal Server Error{% endblock %} 2 | 3 | {% block page_content %} 4 | 7 | {% endblock %} 8 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/templates/backup.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | {% block page_content %} 10 | 11 | {% endblock %} 12 | 单个标注点沿直线的轨迹运动 13 | 14 | 15 |
16 | 17 | 18 | 80 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | RUNMAP 5 | 6 | 7 | 47 | 48 | 49 | 50 | 51 |
52 | 144 | 145 | 146 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/templates/index.html.1: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | RUNMAP 11 | 12 | 13 |
14 | 54 | 55 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/app/templates/yingyan.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 百度鹰眼 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 |
27 |
28 |

29 | 30 | 31 | 32 | 33 |

34 |
35 |
36 | 实时监控 37 |
38 |
39 | 历史轨迹 40 |
41 |
42 |
43 | 44 |
45 |
46 | 47 | 48 | 49 | 50 | 已选 51 | 清除已选 52 |
53 | 54 |
    55 |
    56 |
    57 |
    58 | 查询日期 59 |
    60 | 61 | 62 |
    63 |
    64 | 65 | 66 | 67 | 68 | 已选 69 | 清除已选 70 |
    71 |
    72 |
      73 |
      74 |
      75 |
      76 |
      77 |
      78 | 79 |
      80 |
      81 | 82 | 83 | 84 |
      85 |
      86 |
      87 |
      请先勾选需要统计的轨迹!
      88 | 统计图 89 | 统计 90 | 91 |
      92 |
      93 |
      94 | 95 |
      96 |
      97 | 98 |
      99 |
      100 | 101 |
      102 | 118 | 135 | 136 | 137 | 266 | 267 | 268 | 269 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import os 4 | basedir = os.path.abspath(os.path.dirname(__file__)) 5 | 6 | 7 | class Config: 8 | API_KEY = os.environ.get('API_KEY') 9 | 10 | @staticmethod 11 | def init_app(app): 12 | pass 13 | -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/favicon.ico: -------------------------------------------------------------------------------- 1 | app/static/favicon.ico -------------------------------------------------------------------------------- /MVP_V0.7_Wechat/runapp.py: -------------------------------------------------------------------------------- 1 | python app.py runserver --host 0.0.0.0 --port 80 -d 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | ## 开发 3 | + Fork: [Github](https://github.com/shawn0lee0/RUNMAP) 4 | + 发起人所在城市:浙江杭州 5 | + 发起人的优势:七年电子产品开发经验,十年体育竞技类游戏骨灰玩家 6 | + 已知的技术难点: 7 | + LBS技术 8 | + 前端 9 | + [WebApp](https://developers.google.com/web/updates/2014/11/Support-for-installable-web-apps-with-webapp-manifest-in-chrome-38-for-Android) 10 | + 服务器架构 11 | + 图形生成 12 | + web前端浏览器内嵌js脚本生成,可调用api接口 13 | + 后台管理数据可用py实现数据可视化管理; 14 | + 用户认证 15 | + 利用现成模块 16 | + 积分反馈(MVP先不做) 17 | + 现有的代码基础:入门 18 | + 问题场景,以及解决思路:见上述分析。 19 | + 未来发展策划 20 | + 市场:开源软件+智能硬件接入 21 | + 潜在用户画像: 22 | + 小明码了一整天的电脑,想参加运动,但是迟迟迈不开第一步; 23 | + 小强每天在小区跑步,跑来跑去都是同样的路线; 24 | + Nike团队在西湖边画上一个10KM的√ , 三叶草团队暗自忧伤。。。 25 | + Github成员通过运动轨迹联线。。 26 | + 小明因经常在小区跑步,系统自动将他周边2km地盘设定为他所有,任意闯入报警提示,并发出战书是否PK?胜利者获得对方地盘10%领地。。。来吧。。攻城掠地 27 | + 系统压力预测: 28 | + 开智群内测吧~ 29 | + 30 | + 如何加入: 31 | + [fork](https://github.com/shawn0lee0/RUNMAP) 32 | + [Gmail](mailto:run-map@googlegroups.com?subject=反馈) 33 | + [开发群通讯录](http://qun.hk/b/6427c35cd44c) 34 | 35 | + [目前成员:](https://github.com/shawn0lee0/RUNMAP/issues/3) 36 | + WEB架构+优化:[@Lcking](https://github.com/Lcking) 37 | + 服务器后台:[@bingosummer](https://github.com/bingosummer),[@shawn0lee0](https://github.com/shawn0lee0/RUNMAP),[@Lcking](https://github.com/Lcking) 38 | + 观察、测试: 39 | + 原型设计分析:[@Acural](https://github.com/Acural),[@Lcking](https://github.com/Lcking) 40 | + 用户行为分析:[@wwshen](https://github.com/wwshen),[植入观察@aJiea](https://github.com/aJiea) 41 | + 观察员:开发过程中所有相关工作文档整理、api接口梳理、测试笔记,知识管理(能够相关联起来) 42 | + 测试:全员参与|友情测试@qingquan0083 43 | + 程序猿鼓励师:[@wwshen](https://github.com/wwshen),@aJiea,@shawn0lee0 44 | + 有余力:思考web与ios/android GPS模块调用 45 | 46 | + 欢迎其他团队一起Fork 47 | 48 | 49 | 50 | ## 版本规划: 51 | + 第1周:MVP 52 | + DAY1:功能精简、搭平台、熟悉API 53 | + [交互效果V1.0](https://modao.cc/app/wZtUeShfg7Q8DGUeembZ) 54 | + ![](http://i5.tietuku.com/2de2658477fdfc2bs.png)![](http://i5.tietuku.com/cf4ddc327dab57cds.png) 55 | + DAY2:[√]MVP_0.1 实现CLI地址、坐标解析,该结构可适用于后期api调用 56 | + DAY3:--2015年12月9日 57 | + [ ]交互页面V1.1初稿、说明文档(墨刀、layoutit.com) 58 | + [ ]web架构MVP 59 | + []本地运行版本实现:框架:flask 60 | + []云平台选择:云os/sinasae/七牛 原则:优先考虑国内服务器。 61 | + []公网版本MVP 62 | + []通过域名访问 63 | + []获取ip.gps 通过webapi解析 64 | + [ ]服务端后台MVP 65 | + [][数据表属性字段定义完善](http://developer.baidu.com/map/index.php?title=yingyan/api/entity) 66 | + []上传本地gps信息并解析 67 | + []可查询历史轨迹 68 | + DAY4: 69 | + []页面定稿&文档 70 | + []Web + html +(js)接口融合 71 | + []优化、测试 72 | + DAY5/6:核心功能模块开发、优化 73 | + []后台轨迹实时监控存储 74 | + []后台历史轨迹查询 75 | + []时间戳 76 | + []多轨迹统计分析(轨迹活跃度|时间) 77 | 78 | + DAY7:独立模块内测、迭代 79 | + 第2周:优化迭代 80 | + DAY1: 81 | + 增加覆盖物[(制定跑图图案)](http://developer.baidu.com/map/jsdemo.htm#a1_2) 82 | + 轨迹完成度匹配分析--进度条 83 | + DAY2: 84 | + 优化覆盖物[(制定跑图图案)](http://developer.baidu.com/map/jsdemo.htm#a1_2) 85 | + [加载pm2.5天气信息](http://developer.baidu.com/map/index.php?title=car/api/weather) 86 | + [结合历史轨迹数据进度完成情况,酌情生成地理围栏](http://developer.baidu.com/map/index.php?title=yingyan/api/fence) 87 | + DAY3:优化、测试、迭代 88 | + DAY4: 89 | + []用户认证 90 | + DAY5: 91 | + []用户认证 92 | + []自定义图形导航 93 | + DAY6:预发布 94 | + DAY7:迭代 95 | + 第3周:测试、输出 96 | + DAY1:单元测试(相关函数穷举测试) 97 | + DAY2:单元测试(相关函数穷举测试) 98 | + DAY3:整体测试→更新→分支版本输出|操作文档编辑整理|演示素材收集整理 99 | + DAY4:分支版本小范围群测|操作文档编辑整理|演示素材收集整理 100 | + DAY5:群测反馈,修改,更新|操作文档定稿|路演视频初版 101 | + DAY6:预发布||路演视频定稿 102 | + DAY7:检查,总结 103 | 104 | + 代码交流: 105 | + [有道协作群 群号:15172380](http://163.fm/bCEj1yB) 106 | + Wechat群组:个人号:robo_one申请验证后拉群。 107 | + [Google run-map Group](mailto:run-map@googlegroups.com?subject=反馈) 108 | + 代码合并 109 | + 运行 110 | + 测试 111 | + 任务: 112 | + 认领 113 | + 分配 114 | + 指派 115 | + 追踪 116 | + 交付 117 | + 关闭 118 | 119 | 120 | 121 | 技术 122 | 123 | + [百度鹰眼](http://yingyan.baidu.com/) 124 | + [高德LBS开放平台](http://lbs.amap.com/api/javascript-api/reference/plugin/#m_AMap.Geolocation) 125 | + [腾讯LBS开放平台](http://lbs.qq.com/) 126 | + [看板管理](http://www.infoq.com/cn/articles/agile-kanban-boards) 127 | + [《看板方法》](http://book.douban.com/subject/25788807/) 128 | + 版本控制: 129 | + [Git分支管理策略](http://www.ruanyifeng.com/blog/2012/07/git.html) 130 | + [Gitflow](https://github.com/nvie/gitflow/) 131 | + [Managing branches in your repository](https://help.github.com/articles/managing-branches-in-your-repository/) 132 | 133 | ## 意见反馈 134 | 135 | [调查问卷](https://jinshuju.net/f/T85Nps) 136 | 137 | ## 版权 138 | 139 | [本作品采用知识共享许可协议](http://creativecommons.org/licenses/by-nc-sa/3.0) 140 | 141 | ![](https://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png) 142 | 143 | 知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议 144 | 145 | 146 | 进行许可。 -------------------------------------------------------------------------------- /doc/nengji.md: -------------------------------------------------------------------------------- 1 | # 能技 2 | 3 | 简单整理下,课程开展以来,get的能技,以及你仍然可以jump到的能技 4 | 5 | ## 思维模式 6 | 7 | + 发散思维(导图) 8 | + 平行思维 9 | + 金字塔思维 10 | 11 | 发散思维我在每周课程笔记,C2T2纪要中都有分享, 12 | 优势:快,人脑对图像比文字更直观 13 | 劣势:知识不去细化巩固,容易遗忘 14 | 15 | 16 | >真正导致人与人之间知识水平差异的,往往并不是知识数量,而是知识之间的联系。而且随着知识的增多,建立联系的收获也会越来越大。 17 | 18 | ## 如何破: 19 | + 抓住思维中的核心观点,找出它的知识联系 20 | + 自己思考,哪些问题可以用这个观点解释?有1.2.3.……种解释(大妈式逻辑) 21 | + 用自己的例子“解释”而不是官方就是这样做的… 22 | + 我的能技、知识哪些可以利用这些观点改善? 23 | + 挖梗--寻找事物背后的原因,时间允许大量快速浏览,说不定你哪个项目正好用到这个梗 24 | 25 | 平行思维,在做产品需求评审时候非常适合,它决定了你的项目不要做什么功能…… 26 | 27 | 金字塔思维,如同大妈课程介绍的电梯30秒原则,结论先行,以上统下,归纳分类,逻辑递进。 28 | 这也相当于给提问者提出一个要求: 29 | 30 | > 一个问题30秒都解释不清楚,基本上很难说清了。。。 31 | 32 | 33 | 34 | * * * 35 | 36 | ## 技能 37 | 38 | 下面是产品开发深入阶段,一些需要的技能汇总: 39 | 40 | ### 思维方式 41 | + 换位思考 42 | + 从使用者角度考虑问题 43 | + 对人性的理解 44 | + 不要去改变用户的习惯 45 | + 不要给用户太多选择 46 | + 不要轻易的降低积分,除非你想失去Ta 47 | + 人是群居,喜欢社交,喜欢分享 48 | + 互联网思维 49 | + 免费 50 | + 快 51 | + 链接 52 | + 匠人精神 53 | + 简单的工作做到极致 54 | + 逻辑思维 55 | + 沟通 56 | + 文档条理 57 | + 商业嗅觉 58 | 59 | ### 能力 60 | + 学习能力 61 | + 主动查阅英文原版文档 62 | + 关键词提炼 63 | + 读书方法 64 | + 创新 65 | + 脑暴 66 | + 脑洞 67 | + 沟通 68 | + 最重要的:执行力 69 | + 有待提高(;′⌒`) 70 | 71 | ###工具 72 | + Python 73 | + ipython 74 | + notebook 75 | + Git 76 | + markdown 77 | + mindjet 78 | + 原型设计 79 | + 墨刀 80 | + Mockplus 81 | + Chinco 82 | + 协作 83 | + 有道云 84 | + 虚拟机 85 | + vitrulBox 86 | + 安卓模拟器:Genymotion 87 | + H5(展示、发布) 88 | + [Maka](http://www.maka.im/) 89 | + 图床 90 | + [七牛云存储](https://portal.qiniu.com/tutorial/index) 91 | 92 | ###管理 93 | + 个人管理 94 | + 团队管理 95 | + 时间 96 | + [《把时间当做朋友》-李笑来](http://book.douban.com/subject/25749845/) 97 | + 进度 98 | + 知识 99 | + 情绪 100 | 101 | ###专业: 102 | + 同行分析 103 | + 调研 104 | + 需求提取、评估、筛选 105 | + 规划 106 | + 策划 107 | + 文档撰写、管理 108 | + 测试、监控 109 | + 数据分析 110 | 111 | 如果还要说什么,应该是审美的眼力,发现美好! 112 | Enjoy 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | ![](https://pic4.zhimg.com/d93cd16d043043b2589ade0390c9067f_r.jpg) 127 | 128 | 129 | ## 广告时间 130 | 131 | 132 | 团队成员: 133 | @bingosummer --微软开发 134 | @Vivienwwshen --认知心理 135 | @ Lcking -- SEO(搜索引擎优化) 136 | @ Chen_shen_yu 金融 137 | @ Myself --智慧工业 138 | 139 | 友情测试:@qingquan0083 140 | 141 | 142 | 项目链接:https://github.com/shawn0lee0/RUNMAP 143 | 期待您的加入∩_∩ 144 | --------------------------------------------------------------------------------