• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            socketref,再見!高德

            https://github.com/adoggie

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              246 Posts :: 4 Stories :: 312 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(54)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            #

            一直以來都是用自己編寫的地圖渲染引擎,客戶端使用openscales做應用展示,支持pc,android,iphone
            已經實現了多個版本的地圖數據處理,包括 高德數據、四維數據從shp編譯成物理格式供渲染服務使用,這個過程復雜且費事
            比較了mapabc的地圖,作為成熟的商業公司的產品,當然團隊多年積累的東西定是我一個人做的不能比擬的,渲染方面在大比例顯示處理的比自己好很多,主要自己沒有過多時間投入進去,在做完自己的地圖版本之后(sw2us.com/gps)考慮接入高德web地圖(sw2us.com/newgps)

            以下對mapabc使用的經驗有感
            我的應用采用flex技術,之前自己的地圖加載采用opensacles,到mapabc了便要換成高德的展示客戶端了

            高德發布的最新flex sdk 2.4版本,可以訪問 code.mapabc.com,搞笑的是網站的鏈接缺只能下載2.3.3版本的sdk
            高德官網的很多支持方式比較滑稽,根本不能提供任何幫助,QQ討論區每一個能加入的;bbs論壇根本沒人維護,回答問題沒有解答,這方面做的還是比較差的。
            花了2天便完成了地圖遷移工作,還是主要是我的應用簡單的緣故吧!
            mapabc的api分公眾版本和企業版本,兩個版本差異很大,曾經以客戶名義聯系高德銷售,提供給我的一份sdk文檔與官網的文檔版本和內容差異很大,公眾版本除了能顯示基礎底圖之外,基本不具備其他令我滿意的設施,提供的api也不敬人意。在我遷移openscales代碼為高德sdk時碰到了很多問題。

            --公眾版不具有gps到map坐標的轉換功能
            --不具有地址解析功能(gps到文本地址),不能使用poi檢索功能
            --訪問次數限制
            --顯示層級限制,不能更小的比例尺顯示
            --高德sdk 很多組件采用flash開發的,所以不能通過flex繼承圖來檢索組件的功能和接口,sdk提供的overlay對象居然沒有getBounds()方法,在處理多個overlap時檢測相交不方便
            --沒有layers概念
            openscales更像一個gis專業的客戶地圖展示程序,且隨意修改,支持air,我已經部署到iphone和android環境,而高德flex sdk更像一個玩具,一個非專業者使用的玩意兒,某些接口簡單但不夠靈活,且代碼封閉
            高德現在成為apple在大陸的地圖數據供應商了,google也許會另擇圖商,也許是四維。apple當然會以3d地圖領航者的角色刮起新的地圖應用旋風,大家都跟著學吧
            等我的地圖渲染優化好之后還是會放棄高德的sdk改用自己的地圖技術,當然那些需要付費的功能自己去實現嘍,3d是趨勢,不能讓自己落后了



            posted @ 2012-07-07 00:51 放屁阿狗 閱讀(2065) | 評論 (0)編輯 收藏

            全格Gps2012監控系統
            我們是上海全格信息科技公司,我們的團隊以Gis位置服務系統為方向,多年來積累開發了多套Gps定位系統等核心產品,且擁有所有的技術能力和版權。
            目前我們正在尋找合作伙伴,我們可以提供系統平臺服務且我們的強項也在于此,也可以做gps運維服務。
            如果您用的系統也是同深圳那么多Gps廠家共用的一套系統的話,您可以看看我們的系統,參考一下優缺點。
            >我們是掌握最新Gis應用服務的技術開發團隊
            >我們擁有非常豐富的Gis開發、應用、實施的經驗和專業的精神
            >我們提供.靈活的可配置、擴展的系統平臺,根據客戶需求而定制功能,包括:界面、操作接口、報表或者整合客戶的業務
            >我們擁有自主的地圖平臺,提供B/S模式,不采用google,baidu等互聯網地圖,不采用geoserver等開源的地圖,完全我們自己開發的地圖引擎,速度快,效率高,設備運行要求低、靈活可擴展
            >我們的監控系統采用flex技術,監控位置和報警完全實時,服務器主動推送gps信息到瀏覽器端,這一點是非flex技術絕不能做到的,所以設備運行狀態實現零延時 
            >我們的系統監控終端除了支持pc瀏覽器,還支持 android,iphone等移動終端訪問控制,可進行手機設防、監控軌跡、報警配置等功能,可通過app store和android市場下載安裝
            >我們的有5年的Gps監控運營開發的經驗,系統設計容量達2w臺終端設備,與多個公司合作OEM我們的系統和終端產品
            ~如果您想做Gps監控或者運營,也許您是個人或者是公司老板
            ~如果您需要更靈活、可控、安全、穩定的GPS監控系統
            ~如果您的需求規劃是低成本的
            ~如果您需要部署一整套Gps服務平臺在自己的環境中,而不是又去代理使用他人的Gps運營平臺或者不想花巨資采用 mapabc,mapbar之類的系統
            。。。。。
            您可以考慮我們的技術方案,我們可以以最優質的服務、最先進的技術、最靈活的合作模式與您實現共贏
            請訪問我們的網站: www.sw2us.com      
            Gps系統訪問地址: www.sw2us.com/gps
            ---------------------------------------------------------------------------------------------
            上海全格信息科技有限公司
            Shanghai Triangle Info Tech Co,Ltd. 
            地址: 上海市閔行區立躍路2897號1幢302室  郵編: 201114 
            電話:  86-021-34680553     傳真:  86-021-64296802         郵件: service@sw2us.com
            移動電話:  13661913244     網址:  http://www.sw2us.com    QQ: 2536588583@qq.com
            ---------------------------------------------------------------------------------------------
            posted @ 2012-06-30 01:24 放屁阿狗 閱讀(715) | 評論 (0)編輯 收藏

            一直使用openscales 1.2.1版本開發webapp,在瀏覽器顯示地圖層,沒有問題
            最近想把應用改到air下跑地圖顯示,結果死活地圖無法加載成功,同樣的代碼,
                <Map id="fxMap" width="400" height="300" resolution="0.001911274412400001"
                     center="121.22,31.3" x="51" y="70" >
                    <WMSC name="Nasa"
                          layers="bluemarble" format="image/jpeg"  version="1.1.1"  url="http://sw2us.com:8001/wms"/>
                    <DragHandler/>
                    <WheelHandler/>
                </Map>
            以上代碼webapp方式可以顯示地圖,但改成air方式不行
            以為1.2.1的bug,所以改換openscales的2.0版本,
            惡夢來了,2.0與1.2.1版本api變化非常巨大,基本上以前些的代碼都要作廢掉,坑爹啊
            耐著性子,看了網上的2.0的api,做了test程序,發現wmsc地圖還是只能顯示在webapp模式下,air還是不行,肯定我哪里沒有琢磨清楚了的緣故。
            不過還好,flex builder4.6下開發mobile應用沒有選擇air的提示,直接把wmsc加載成功,phone和android上可以顯示出地圖來,比較暗自高興,
            air的其中緣故還得把openscales的代碼翻出來鞭尸一遍才能曉得緣故
            很想切換到2.0,畢竟看到了很多api的增強,但是應用代碼做遷移不容易啊,郁悶



            posted @ 2012-06-12 23:50 放屁阿狗 閱讀(632) | 評論 (0)編輯 收藏

            用Qjson解析通信消息,一個200k的json包解析居然話了2s時間,比python的json慢了10倍
            可恥啊可恥
            posted @ 2012-05-11 12:30 放屁阿狗 閱讀(677) | 評論 (1)編輯 收藏

            東西都要大家分享 :-)
            posted @ 2012-04-14 17:53 放屁阿狗 閱讀(1725) | 評論 (1)編輯 收藏


            dvr項目中flex駐留在瀏覽器,而影響播放程序是獨立的進程,sandbox的安全問題導致flex的代碼無法直接與播放進程IPC通信,那只有通過公網IP的主機進行橋接。
            很多年以前用過foundstone系列的工具,也有socket轉向的功能,包括在5173時做過lsp的底層轉向軟件(仿sockcap),原理當然是相當簡單,python是首選工具。
            代碼接收兩端建立socket進來,并根據相同的id號來進行socket配對,之后兩個socket之間就實現互相轉發(技術同之前寫的http代理服務器 )

              1 # -- coding:utf-8 --
              2 
              3 import socket,traceback,os,os.path,sys,time,struct,base64,gzip,array,threading
              4 import select,json
              5 
              6 
              7 '''
              8 {'id','type'}
              9 
             10 type - 'mapshow','imageplay'
             11 id - 一次會話的編號
             12 
             13 imageplay 與xbridge建立socket連接,并注冊一個會話編號(隨機產生)
             14 imageplay啟動mapshow,并將會話編號傳遞給mapshow,mapshow建立xbridge的連接,并提交會話編號
             15 xbridge將雙向傳遞相同會話編號的數據到對方
             16 
             17 sock1的客戶必須等sock2連接進入之后發送數據,否則將sock1數據轉發給sock2時將產生異常
             18 '''
             19 
             20 class ConnectionPair:
             21     def __init__(self,app):
             22         self.app = app
             23         self.id = ''
             24         self.sock1=None #imageplay上來的連接
             25         self.sock2=None #第二個連接上來的對象mapdemo
             26         
             27     def start(self):
             28         t = threading.Thread(target=self.threadRecv)
             29         t.start()
             30         
             31     def onLostConnection(self):
             32         try:
             33             print 'connection pair lost..'
             34             self.sock1.close()
             35             self.sock2.close()
             36             self.app.onConnectionPairBroken(self)
             37         except:
             38             traceback.print_exc()
             39         
             40     def threadRecv(self):
             41         print 'service threading entering'
             42         import select
             43         while True:
             44             fds = []
             45             if self.sock1:
             46                 fds.append(self.sock1)
             47             if self.sock2:
             48                 fds.append(self.sock2)
             49             #fds = [self.sock1,self.sock2]
             50             try:
             51                 #sock2未連接進來前,將不接收sock1上產生數據
             52                 #print 'fds:',len(fds),fds
             53                 rds,wds,eds = select.select(fds,[],[],1)
             54                 if not rds:#timeout 
             55                     continue
             56                         
             57                 for s in rds:
             58                     d = s.recv(1024)
             59                     #print d
             60                     if not d:
             61                         raise 'any jump'
             62                     
             63                     to = self.sock2
             64                     if s == self.sock2:
             65                         to = self.sock1
             66                     #print 'redirect data:',d
             67                     to.sendall(d)        
             68             except:
             69                 traceback.print_exc()
             70                 self.onLostConnection()
             71                 break
             72         
             73         print 'ConnThread Exiting'
             74             
             75             
             76     
             77 
             78 class XBridge:
             79     def __init__(self,addr=('',12788)):
             80         self.sock = None
             81         self.addr = addr
             82         self.conns={} #{id}
             83         self.mtxconns = threading.Lock()
             84         
             85     def onConnectionPairBroken(self,cp):
             86         self.mtxconns.acquire()
             87         del self.conns[cp.id]
             88         print 'onConnectionPairBroken(),removed:',cp.id
             89         self.mtxconns.release()
             90         
             91     def start(self):
             92         try:
             93             
             94             self.sock = socket.socket()
             95             #print 'lll',self.addr
             96             self.sock.bind( tuple(self.addr) )
             97             self.sock.listen(5)
             98             
             99             self.thread = threading.Thread(target=self.service_loop)
            100             self.thread.start()
            101             print 'xbridge started!'
            102             self.thread.join()
            103         except:
            104             traceback.print_exc()
            105             return False
            106         
            107     def shutdown(self):
            108         self.sock.close()
            109          
            110     
            111     def service_loop(self):
            112         
            113         while True:
            114             fdr = []
            115             fdr.append(self.sock)
            116             infds,wr,e = select.select(fdr,[],[])
            117             if e:
            118                 print 'service thread exit'
            119                 break
            120             for s in infds:
            121                 if s == self.sock: #新連接到達 
            122                     sock = None
            123                     try:                        
            124                         sock,peer = self.sock.accept()    #異常產生表示self.sock被強行關閉
            125                         print 'new client incoming',peer
            126                     except
            127                         return
            128                     thread = threading.Thread(target=self.threadNewClient,args=(sock,))
            129                     thread.start()
            130     
            131     def threadNewClient(self,sock):
            132         #等待注冊信息進入 ,5 秒超時
            133         try:
            134             fdr = [sock,]
            135             print 'enter select '
            136             infds,wr,e = select.select(fdr,[],[],5)
            137             
            138             if not infds:
            139                 sock.close()
            140                 print 'client register timeout'
            141                 return #接收超時
            142             d = sock.recv(1024)
            143             d = json.loads(d)
            144             id,type = d['id'],d['type']
            145             connpair = None
            146             print id,type
            147             self.mtxconns.acquire()
            148             if type == 'imageplay':
            149             
            150                 cp = ConnectionPair(self)
            151                 cp.id = id
            152                 cp.sock1 = sock
            153                 self.conns[id] = cp
            154                 cp.start()
            155                 
            156             elif type =='mapshow':
            157                 connpair = self.conns.get(id,None)
            158                 if connpair == None: #沒找到imageplay
            159                     sock.close()
            160                     print 'mapshow cannt found imageplay..'
            161                 else:
            162                     print 'mapclient matched!'
            163                     connpair.sock2 = sock                    
            164             else:
            165                 print 'unknown command id:',id,type
            166                 
            167             self.mtxconns.release()    
            168         except:
            169             sock.close()
            170             traceback.print_exc()
            171         
            172 if __name__=='__main__':
            173     XBridge().start() #default '',12788
            174    
            posted @ 2012-04-14 17:42 放屁阿狗 閱讀(1696) | 評論 (0)編輯 收藏


            焦距的計算公式

            視場和焦距的計算
              視場指被攝取物體的大小,視場的大小是以鏡頭至被攝取物體距離,鏡頭焦頭及所要求的成像大小確定的。

            (1) 焦距的計算
              鏡頭的焦距,視場大小及鏡頭到被攝取物體的距離的計算如下:
            f=wL/W
            f=hL/h
            f;鏡頭焦距      w:圖象的寬度(被攝物體在CCD靶面上成象寬度)
            W:被攝物體寬度    L:被攝物體至鏡頭的距離
            h:圖象高度(被攝物體在ccd靶面上成像高度)視場(攝取場景)高度
            H:被攝物體的高度

            CCD靶面規格尺寸:單位mm
            規格 1/3" 1/2" 2/3" 1"
            W 4.8 6.4 8.8 12.7
            H 3.6 4.8 6.6 9.6


              由于攝像頭畫面寬度和高度與電視接收機畫面寬度和高度一樣,其比例均為4:3,當L不變,H或W增大時,f變小,當H或W不變,L增大時,f增大。
              舉例:假設用1/2”CCD攝像頭觀測,被測物體寬440毫米,高330毫米,鏡頭焦點距物體2500毫米。
            由公式可以算出:
            焦距f=6.4 * 2500 / 440≈36毫米或
            焦距f=4.8 * 2500 / 330≈36毫米
              當焦距數值算出后,如果沒有對應焦距的鏡頭是很正常的,這時可以根據產品目錄選擇相近的型號,一般選擇比計算值小的,這樣視角還會大一些。

            (2) 視場角的計算
              如果知道了水平或垂直視場角便可按公式計算出現場寬度和高度。
            W=2LtanQw/2 ( Qw:水平視角)
            H=2LtanQh/2 ( Qh:垂直視角)
            水平視場角Qw(水平觀看的角度)
            Qw =2tg-1(W/2L)
            垂直視場角Qh(垂直觀看的角度)
            Qh =2tg-1(H/2L)

              視場由寬(W)、高(H)和與攝像頭的距離(L)決定,一旦決定了攝像頭要監視的景物,正確地選擇鏡頭的焦距就由來3個因素決定:
            l 欲監視景物的尺寸
            l 攝像頭與景物的距離
            l 攝像頭成像器的尺寸
            8、選配鏡頭的原則
              為了獲得預期的攝像效果,在選配鏡頭時,應著重注意六個基本要素:(1)被攝物體的大小;(2) 被攝物體的細節尺寸;(3) 物距;(4)焦距;(5) CCD攝像機靶面的尺寸;(6) 鏡頭攝像系統的分辯率。

            posted @ 2012-04-02 01:13 放屁阿狗 閱讀(394) | 評論 (0)編輯 收藏

            今天去轉了一圈,坐著一上午,屁股有點累。了解了這是個啥東東了,不是特別有兩點,下午都是廠商吹牛皮,所以吃了頓飯就回公司了
            posted @ 2012-03-30 13:40 放屁阿狗 閱讀(244) | 評論 (0)編輯 收藏

            花了近3周時間去完成DVR項目的視頻影像管理系統。目標容量200T,利用廉價PC實現集群存儲,由于存儲的是單個的視頻段文件且對于文件容災方面沒有特殊的要求,允許單點存儲損壞。
            系統部署一個stoMaster服務器做控制服務,提供影像系統的讀寫調度分配、系統模塊監控管理、系統影像查詢服務;若干個stoNodeServer作為單點存儲服務器,每個節點服務器下掛載10個2T普通硬盤,單節點支持20T容量,由于采用PC架構,大大節省成本且還能保證一定IO并發能力,保證200T容量需要10臺PC做支撐。
            開發涉及技術: python + ffmpeg + flex + openscales + swMapServer + Vs2008 + Qt + postgis + psycopg2 + comtypes
            Links: http://sw2us.com/sites/default/files/dvr.demo.v0.1.0_2012.3.27.zip
            幸好有了python這個好幫手,不然要干死了,python對我來講不是簡單的當膠水輔助了,通信框架、UI、數據庫都采用python,只有那些個點上用了高效點的c++,例如:ffmpeg解碼、文件存儲等等
            演示視頻: 









            系統運行demo:






            posted @ 2012-03-27 19:23 放屁阿狗 閱讀(1896) | 評論 (2)編輯 收藏

                 摘要: 項目需求開發網絡流媒體播放器,整個項目就一人開發,整個系統平臺,包括調度,存儲集群服務,影像同步導入、系統api接口、視頻查詢和播放客戶端,一切有了python就變得簡單。一個人在戰斗,還是蠻有勁道。pyqt開發播放界面,python用于網絡通信和粘合邏輯,ffmpeg用于解碼,google一圈試用了幾個pyffmpeg的庫,非常不理想,干脆自己做:采用ctypes訪問dll,測試解碼并將視頻幀轉...  閱讀全文
            posted @ 2012-03-15 02:01 放屁阿狗 閱讀(1546) | 評論 (0)編輯 收藏

            僅列出標題
            共25頁: 1 2 3 4 5 6 7 8 9 Last 
            久久国产视屏| 精品国产一区二区三区久久| 久久99毛片免费观看不卡 | 欧美日韩精品久久久免费观看| 国内精品久久久久影院一蜜桃| 久久久久波多野结衣高潮| 亚洲色欲久久久久综合网| 色婷婷狠狠久久综合五月| 久久久久国产精品麻豆AR影院| 色综合合久久天天综合绕视看| 久久综合久久综合久久| 亚洲一本综合久久| 精品久久综合1区2区3区激情| 国内精品欧美久久精品| 亚洲人AV永久一区二区三区久久 | 精品久久久久久综合日本| 久久国产精品77777| 国产精品久久99| 久久精品成人一区二区三区| 日本精品久久久久久久久免费| 18禁黄久久久AAA片| 久久婷婷五月综合国产尤物app| 国产亚洲美女精品久久久久狼| 国产精品成人无码久久久久久 | 精品永久久福利一区二区| 精品国产91久久久久久久| 久久精品无码一区二区三区免费| 久久综合伊人77777麻豆| 亚洲欧美伊人久久综合一区二区| 91精品国产高清91久久久久久| 国产成人精品久久一区二区三区av| 亚洲?V乱码久久精品蜜桃| 久久精品亚洲精品国产色婷| 国产69精品久久久久9999| 婷婷国产天堂久久综合五月| 久久久久亚洲AV成人片| 无码任你躁久久久久久老妇| 久久偷看各类wc女厕嘘嘘| 中文字幕无码久久久| 99久久免费国产精品热| 久久精品免费一区二区|