亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

GMAP.NET源碼解析:C#地圖組件瓦片拼接與離線緩存實(shí)戰(zhàn)

GMAP.NET源碼解析:C#地圖組件瓦片拼接與離線緩存實(shí)戰(zhàn) 簡(jiǎn)介GMAP.net源代碼是一份面向C#開(kāi)發(fā)者的開(kāi)源地圖組件源碼包特別適合需要在Windows Forms、WPF、ASP.NET、Windows Phone或UWP等環(huán)境中集成在線地圖、離線地圖瀏覽、路線規(guī)劃等功能的項(xiàng)目人員參考。該框架的核心是GMapControl控件提供了縮放、平移、旋轉(zhuǎn)、標(biāo)記管理、圖層管理以及事件處理與屬性設(shè)置機(jī)制開(kāi)發(fā)者可以據(jù)此定制地圖行為和外觀。代碼中實(shí)現(xiàn)了Google Maps、Bing Maps、OpenStreetMap、MapQuest、Yandex Maps等多個(gè)地圖服務(wù)商的接入邏輯并對(duì)瓦片管理、緩存存儲(chǔ)與加載策略做了詳細(xì)處理幫助理解離線地圖數(shù)據(jù)的高效組織方式。同時(shí)地理編碼、反向地理編碼和路線計(jì)算等高級(jí)功能的API調(diào)用實(shí)現(xiàn)也在其中展示了與地圖服務(wù)商交互的完整流程。壓縮包為rar格式大小約273.49MB已有419人學(xué)習(xí)下載整體源碼結(jié)構(gòu)完整既適合初學(xué)者解析地圖組件原理也便于有經(jīng)驗(yàn)的開(kāi)發(fā)者按需求修改擴(kuò)展。1. GMAP.net 源代碼先搞清楚這份 C# 開(kāi)源地圖組件到底解決什么做車輛軌跡回放、監(jiān)控大屏和 GIS 工具時(shí)最耗時(shí)的往往不是業(yè)務(wù)邏輯而是地圖這塊“地基”。GMAP.net 源代碼是一套完整的 C# 開(kāi)源地圖組件覆蓋了瓦片請(qǐng)求、拼接、投影換算、兩級(jí)緩存這一整條渲染鏈路。你不需要從零實(shí)現(xiàn)地圖渲染直接引用控件、給經(jīng)緯度、畫(huà)標(biāo)記和路線就能跑。比較反直覺(jué)的是這套源碼最值錢的地方不在在線地圖而在離線能力把瓦片灌進(jìn)本地緩存后斷網(wǎng)環(huán)境下照樣可以縮放、平移、畫(huà)軌跡。它適合正在選型 WinForms 地圖方案的開(kāi)發(fā)者也適合想研究地圖組件內(nèi)部實(shí)現(xiàn)的人。下面按“機(jī)制 → 跑通 → 實(shí)操 → 避坑”往下拆。2. 核心機(jī)制瓦片拼接、投影換算與兩級(jí)緩存2.1 從 URL 到 Bitmap一張地圖是怎么畫(huà)出來(lái)的GMapControl 本質(zhì)上是一個(gè)自繪控件每次重繪時(shí)并不直接 DrawImage 一張完整大圖而是根據(jù)當(dāng)前可視區(qū)域、中心點(diǎn)、縮放級(jí)別算出需要哪些瓦片再把瓦片逐張拼到屏幕上。源碼里最核心的邏輯就在控件的 OnPaint 流程中。我把這段邏輯簡(jiǎn)化了一下方便你理解它內(nèi)部在算什么。public void DrawMap(Graphics g, Rectangle viewport, PointLatLng center, int zoom, FuncGPoint, int, Bitmap loadTile) { GPoint centerTile new GPoint( (long)((center.Lng 180.0) / 360.0 * Math.Pow(2, zoom)), (long)((1 - Math.Log(Math.Tan(center.Lat * Math.PI / 180) 1 / Math.Cos(center.Lat * Math.PI / 180)) / Math.PI) / 2 * Math.Pow(2, zoom))); const int tileSize 256; double offsetX viewport.Width / 2.0 - (centerTile.X * tileSize - 0) % tileSize; double offsetY viewport.Height / 2.0 - (centerTile.Y * tileSize - 0) % tileSize; int xMin (int)Math.Floor(offsetX / tileSize); int yMin (int)Math.Floor(offsetY / tileSize); int xMax (int)Math.Ceiling((viewport.Width - offsetX) / tileSize); int yMax (int)Math.Ceiling((viewport.Height - offsetY) / tileSize); for (int x xMin; x xMax; x) { for (int y yMin; y yMax; y) { GPoint tile new GPoint(centerTile.X x, centerTile.Y y); Bitmap bmp loadTile(tile, zoom); if (bmp null) continue; g.DrawImage(bmp, (float)(offsetX x * tileSize), (float)(offsetY y * tileSize), tileSize, tileSize); } } }這段代碼把“中心點(diǎn) → 瓦片索引 → 屏幕偏移 → 需要加載的瓦片矩陣”這條鏈路壓縮成了幾十行。參數(shù)里 center 是地圖中心經(jīng)緯度zoom 是縮放級(jí)別viewport 是控件可視區(qū)域。tileSize 為 256 是瓦片地圖的通用規(guī)范幾乎所有在線地圖都遵守。loadTile 是一個(gè)回調(diào)內(nèi)部先查內(nèi)存緩存、再查磁盤緩存、最后才發(fā)網(wǎng)絡(luò)請(qǐng)求。實(shí)際源碼里不會(huì)每幀都重新請(qǐng)求瓦片。拖動(dòng)地圖時(shí)控件只調(diào)整屏幕偏移量等松手后再補(bǔ)齊邊緣缺失的瓦片這也是它手感比大多數(shù)自繪地圖流暢的原因。你研究源碼時(shí)重點(diǎn)看控件的 OnMouseMove 和 OnPaint 之間的配合就能理解這套增量繪制策略。2.2 投影換算屏幕坐標(biāo)和經(jīng)緯度之間隔著三道計(jì)算地圖組件繞不開(kāi)投影。GMAP.net 用 PureProjection 抽象類封裝了投影邏輯派生類里有 Web Mercator 和 WGS84 兩種常見(jiàn)實(shí)現(xiàn)。屏幕上每個(gè)像素和經(jīng)緯度之間的換算不是一步到位而是經(jīng)過(guò)“經(jīng)緯度 → 世界平面坐標(biāo) → 瓦片坐標(biāo) → 屏幕坐標(biāo)”三層轉(zhuǎn)換。下面是從源碼里抽取出來(lái)的正向與反向換算核心公式public GPoint FromLatLngToPixel(PointLatLng p, int zoom) { double size MapSize(zoom); double x (p.Lng 180.0) / 360.0 * size; double sinLat Math.Sin(p.Lat * Math.PI / 180.0); double y 0.5 - Math.Log((1 sinLat) / (1 - sinLat)) / (4 * Math.PI); return new GPoint((long)(x * 100000), (long)(y * 100000)); } public PointLatLng FromPixelToLatLng(GPoint p, int zoom) { double size MapSize(zoom); double lng (p.X / 100000.0 / size * 360.0) - 180.0; double n Math.PI - 2.0 * Math.PI * p.Y / 100000.0 / size; double lat 180.0 / Math.PI * Math.Atan(Math.Sinh(n)); return new PointLatLng(lat, lng); }參數(shù)說(shuō)明MapSize(zoom) 返回當(dāng)前縮放級(jí)別下整個(gè)世界地圖的像素邊長(zhǎng)等于 256 * 2^zoom。zoom 每加 1世界像素尺寸翻倍。為什么這里要乘 100000因?yàn)?GPoint 內(nèi)部用整數(shù)保存坐標(biāo)直接存小數(shù)會(huì)丟失精度放大 10 萬(wàn)倍后能保留約 1e-5 度的精度能覆蓋絕大多數(shù) GIS 場(chǎng)景。如果你發(fā)現(xiàn)地圖上的標(biāo)記和道路有偏移優(yōu)先檢查投影是否選錯(cuò)。GMAP.net 里不同 Provider 自帶投影實(shí)現(xiàn)混用會(huì)導(dǎo)致幾百米的漂移。這個(gè)現(xiàn)象在調(diào)第三方 Provider 時(shí)經(jīng)常出現(xiàn)我一般會(huì)先打印 Provider 的 Projection 類型再繼續(xù)排查。2.3 兩級(jí)緩存與并發(fā)請(qǐng)求離線地圖為什么也能流暢GMAP.net 的地圖加載性能靠的是兩級(jí)緩存內(nèi)存緩存和磁盤緩存。內(nèi)存緩存存最近用過(guò)的 Bitmap避免同一張瓦片被重復(fù)解碼磁盤緩存則把瓦片持久化到本地重啟程序后仍然有效。這層設(shè)計(jì)是離線地圖的基礎(chǔ)。緩存層存儲(chǔ)位置典型大小作用內(nèi)存緩存進(jìn)程內(nèi) Dictionary / LRU 隊(duì)列幾十 MB避免重復(fù)解碼提升拖動(dòng)流暢度磁盤緩存本地目錄或 SQLite 文件幾百 MB 到幾十 GB跨會(huì)話復(fù)用離線可用網(wǎng)絡(luò)源遠(yuǎn)程瓦片服務(wù)無(wú)緩存未命中時(shí)的兜底來(lái)源磁盤緩存的寫(xiě)入是異步的控件拿到網(wǎng)絡(luò)瓦片后先顯示再排進(jìn)寫(xiě)盤隊(duì)列。所以你在源碼里能看到獨(dú)立的寫(xiě)盤線程和讀盤線程隊(duì)列用信號(hào)量控制并發(fā)數(shù)避免拖動(dòng)時(shí)瞬間發(fā)起幾十個(gè) HTTP 請(qǐng)求把帶寬打滿。離線包的本質(zhì)就是預(yù)填磁盤緩存。把目標(biāo)區(qū)域常用縮放級(jí)別的瓦片全部請(qǐng)求一遍之后斷網(wǎng)時(shí)命中磁盤緩存表現(xiàn)和在線幾乎一樣。后面第 6 章我會(huì)給一個(gè)預(yù)取腳本模板直接抄就能用。3. 把源碼跑起來(lái)項(xiàng)目結(jié)構(gòu)、初始化與第一個(gè)可交互地圖3.1 解壓后先看這些目錄源碼包解壓后第一眼會(huì)看到多個(gè) Visual Studio 工程。別急著全部編譯先按依賴關(guān)系把項(xiàng)目認(rèn)清楚目錄/工程職責(zé)引用關(guān)系GMap.NET.Core投影、瓦片 Provider 基類、緩存、工具類不依賴 UI是最底層GMap.NET.WindowsFormsWinForms 控件 GMapControl、Overlay、Marker、Route引用 CoreGMap.NET.WindowsPresentationWPF 版本控件引用 Core與 WinForms 版互斥Demo / Sample示例窗體展示基本用法引用上述 UI 工程Plugins擴(kuò)展插件如 GPS 模塊按需引用我一般只保留 Core 和 WindowsForms 兩個(gè)工程把其余工程從解決方案里卸載。原因是老架構(gòu)的源碼包往往同時(shí)包含 WinForms 和 WPF 兩個(gè)版本同時(shí)編譯會(huì)引入不必要的框架版本沖突尤其當(dāng)你本機(jī)只裝了 .NET Framework 4.x 時(shí)WPF 工程經(jīng)常報(bào)目標(biāo)框架不匹配。還有一個(gè)容易忽略的文件是 app.config 或 .manifest 文件里面可能聲明了控件運(yùn)行所需的權(quán)限和依賴。如果編譯后運(yùn)行報(bào)找不到某個(gè) DLL先檢查是不是用了強(qiáng)命名程序集再確認(rèn)引用是否指向正確的輸出路徑。3.2 最小初始化對(duì)照 Demo 配出自己的地圖窗體建議先建一個(gè)空白 WinForms 項(xiàng)目把 GMap.NET.Core 和 GMap.NET.WindowsForms 兩個(gè)工程引用進(jìn)來(lái)然后寫(xiě)最小初始化代碼。這是最快跑通的方式比直接改 Demo 更不容易被無(wú)關(guān)功能干擾。public partial class MainForm : Form { private GMapControl _map; public MainForm() { InitializeComponent(); _map new GMapControl(); _map.Dock DockStyle.Fill; _map.MapProvider GMapProviders.OpenStreetMap; _map.Position new PointLatLng(31.2304, 121.4737); _map.MinZoom 3; _map.MaxZoom 18; _map.Zoom 12; _map.ShowCenter false; Controls.Add(_map); } }這段代碼把地圖控件鋪滿窗體。MapProvider 決定瓦片來(lái)源OpenStreetMap 是免 Key 的公共瓦片服務(wù)適合先驗(yàn)證鏈路。Position 是中心點(diǎn)經(jīng)緯度這里給的是上海人民廣場(chǎng)附近。MinZoom 和 MaxZoom 限制縮放范圍避免用戶滑到空白區(qū)域。ShowCenter 建議設(shè)成 false否則地圖正中心會(huì)有一個(gè)紅色十字截圖交付時(shí)會(huì)顯得不專業(yè)。注意如果你的網(wǎng)絡(luò)環(huán)境訪問(wèn)不了特定瓦片服務(wù)地圖會(huì)顯示空白程序不報(bào)錯(cuò)。這種情況優(yōu)先嘗試更換 Provider或者切到離線模式再驗(yàn)證。3.3 在線與離線兩條路兩個(gè) Provider 的不同換法在線地圖直接換 MapProvider 就行。OpenStreetMap 免 KeyGoogle 系 Provider 需要自己在屬性面板里配 Key否則瓦片請(qǐng)求會(huì)返回 401 或 403。換 Provider 很簡(jiǎn)單但有一個(gè)邊界條件不同 Provider 的縮放級(jí)別范圍不同有的最大到 19有的只到 18切換時(shí)記得同步調(diào)整 MaxZoom。離線地圖則要寫(xiě)自定義 Provider。很多使用 GMAP.net 的人不知道這個(gè)入口以為離線必須依賴別人寫(xiě)好的 Provider。其實(shí) GMapProvider 基類留了一個(gè) GetTileImage 虛方法只要從本地文件讀瓦片并返回即可public class LocalFileProvider : GMapProvider { public static readonly LocalFileProvider Instance new LocalFileProvider(); private readonly string _root; public LocalFileProvider(string root) { _root root; MaxZoom 18; RefererUrl http://localhost/; } public override Guid Id { get; } Guid.NewGuid(); public override string Name { get; } LocalFileProvider; public override PureImage GetTileImage(GPoint pos, int zoom) { string path Path.Combine(_root, zoom.ToString(), pos.X.ToString(), pos.Y .png); if (!File.Exists(path)) return null; using (var fs File.OpenRead(path)) { using (var img Image.FromStream(fs)) { var result new GMapImage(); result.Img (Image)img.Clone(); return result; } } } }這個(gè) Provider 按 zoom/x/y.png 的目錄結(jié)構(gòu)讀取本地瓦片。pos.X 和 pos.Y 分別是瓦片列號(hào)和行號(hào)。文件不存在時(shí)返回 null控件會(huì)繪制透明底色不會(huì)崩。Id 和 Name 是基類要求實(shí)現(xiàn)的屬性Guid 用隨機(jī)值即可。注意靜態(tài)實(shí)例 Instance 的寫(xiě)法Provider 會(huì)被頻繁調(diào)用每次 new 會(huì)產(chǎn)生大量臨時(shí)對(duì)象單例能省掉這部分開(kāi)銷。拿到離線包時(shí)先確認(rèn)瓦片目錄是不是這種標(biāo)準(zhǔn)結(jié)構(gòu)如果不是要么寫(xiě)一個(gè)重命名腳本要么改這個(gè) Provider 的拼接邏輯。我見(jiàn)過(guò)不少自己用爬蟲(chóng)下瓦片的包目錄結(jié)構(gòu)千奇百怪這種情況最好以 Provider 適配目錄而不是反過(guò)來(lái)改數(shù)據(jù)。4. 地圖上畫(huà)東西標(biāo)記、路線、多邊形與軌跡回放4.1 標(biāo)記把坐標(biāo)點(diǎn)變成可點(diǎn)擊的 UIGMAP.net 引入 Overlay 來(lái)管理地圖上的元素。一個(gè) Overlay 是一層透明畫(huà)布控件可以疊加多個(gè) Overlay比如“車輛層”“站點(diǎn)層”“圍欄層”每一層可以單獨(dú)顯示或隱藏。往 Overlay 里加 Markers 就是最基本的打點(diǎn)private GMapOverlay _markerOverlay; void InitMarkers() { _markerOverlay new GMapOverlay(markers); _map.Overlays.Add(_markerOverlay); GMarkerGoogle marker new GMarkerGoogle( new PointLatLng(31.2304, 121.4737), GMarkerGoogleType.red_dot); marker.ToolTipText 站點(diǎn)A; marker.ToolTipMode MarkerTooltipMode.OnMouseOver; _markerOverlay.Markers.Add(marker); }GMarkerGoogle 是內(nèi)置的圖釘類可以直接用預(yù)置圖標(biāo)適合快速驗(yàn)證。ToolTipMode 可以設(shè)成 Always 或 OnMouseOver現(xiàn)場(chǎng)演示時(shí)一般用 Always正式交付時(shí)用 OnMouseOver 避免遮擋地圖。當(dāng)標(biāo)記數(shù)量超過(guò)幾千個(gè)時(shí)直接把全部 Markers 塞進(jìn) Overlay 會(huì)卡頓。常見(jiàn)做法是只加入可視區(qū)域內(nèi)的點(diǎn)縮放或拖動(dòng)時(shí)按當(dāng)前 Bounds 過(guò)濾。GMAP.net 沒(méi)有內(nèi)置可視區(qū)域過(guò)濾需要你在更新 Overlay 前調(diào)用 _map.ViewArea 判斷坐標(biāo)是否落在矩形內(nèi)。這個(gè)坑比較隱蔽用戶說(shuō)“地圖卡死”時(shí)優(yōu)先懷疑它。4.2 折線與多邊形路徑的資源包怎么組織畫(huà)軌跡線和電子圍欄分別用 GMapRoute 和 GMapPolygon。兩者都接收 List 作為核心數(shù)據(jù)區(qū)別是 Route 只畫(huà)線Polygon 加了一個(gè)填充面。代碼結(jié)構(gòu)很接近ListPointLatLng points new ListPointLatLng { new PointLatLng(31.2304, 121.4737), new PointLatLng(31.2350, 121.4700), new PointLatLng(31.2400, 121.4800) }; GMapRoute route new GMapRoute(points, route-001) { Stroke new Pen(Color.Red, 4) }; _overlay.Routes.Add(route); GMapPolygon polygon new GMapPolygon(points, area-001) { Fill new SolidBrush(Color.FromArgb(40, Color.Blue)), Stroke new Pen(Color.Blue, 2) }; _overlay.Polygons.Add(polygon);Stroke 是畫(huà)筆Fill 是填充畫(huà)刷。FromArgb(40, Color.Blue) 里的 40 是透明度值越小越透明適合做電子圍欄的底色。注意 Polygon 的坐標(biāo)點(diǎn)順序必須是順時(shí)針或逆時(shí)針環(huán)繞亂序會(huì)畫(huà)出自相交的怪異多邊形。Route 和 Polygon 在 Overlay 內(nèi)部都是獨(dú)立列表更新其中一個(gè)不需要重建其他元素。但如果外部 points 集合后續(xù)又 Add 了新坐標(biāo)控件內(nèi)部不會(huì)自動(dòng)感知。我一般直接刪除舊 Route、重新 Add 一個(gè)簡(jiǎn)單可靠性能影響可以忽略。4.3 軌跡回放定時(shí)器驅(qū)動(dòng)的 MoveTo 思路軌跡回放是車輛監(jiān)控項(xiàng)目的高頻需求。最簡(jiǎn)單可靠的實(shí)現(xiàn)是 UI 定時(shí)器逐點(diǎn)推進(jìn)每隔固定時(shí)間把 marker 的位置更新到下一個(gè)坐標(biāo)點(diǎn)并讓地圖中心跟隨private System.Windows.Forms.Timer _timer; private ListPointLatLng _trackPoints; private int _index; void StartReplay(ListPointLatLng points) { _trackPoints points; _index 0; _timer new System.Windows.Forms.Timer(); _timer.Interval 500; _timer.Tick OnReplayTick; _timer.Start(); } void OnReplayTick(object sender, EventArgs e) { if (_index _trackPoints.Count) { _timer.Stop(); return; } PointLatLng pos _trackPoints[_index]; _vehicleMarker.Position pos; _map.Position pos; _index; }這里 Timer 的 Tick 事件運(yùn)行在 UI 線程所以直接更新 marker 和 map.Position 是安全的不需要再 Invoke。Interval 設(shè)為 500ms表示每半秒走一個(gè)點(diǎn)。如果原始軌跡的時(shí)間間隔不是固定的 500ms直接按索引播放會(huì)導(dǎo)致車速忽快忽慢正確的做法是用相鄰兩點(diǎn)的時(shí)間差動(dòng)態(tài)調(diào)整 Interval。真正做項(xiàng)目時(shí)軌跡點(diǎn)往往上萬(wàn)條全部放進(jìn) Overlay 會(huì)有兩個(gè)問(wèn)題一是繪制性能二是內(nèi)存占用。常用處理是先抽稀比如每 5 個(gè)點(diǎn)保留 1 個(gè)再分段只把當(dāng)前播放位置前后各 100 個(gè)點(diǎn)加入 Overlay其余點(diǎn)不渲染。這樣回放時(shí)既能看到車頭附近的路徑趨勢(shì)又不會(huì)卡。5. 避坑記錄五個(gè)翻車點(diǎn)與對(duì)應(yīng)修法5.1 UI 線程跨線程畫(huà)標(biāo)記直接白屏現(xiàn)象后臺(tái)線程通過(guò)串口或 TCP 拿到 GPS 數(shù)據(jù)后直接調(diào)用 markerOverlay.Markers.Add界面一陣抖動(dòng)后白屏或者直接拋出“線程間操作無(wú)效”。原因WinForms 控件的內(nèi)部狀態(tài)只能在創(chuàng)建它的線程里修改。地圖控件的 Overlay 集合本質(zhì)是 UI 資源后臺(tái)線程修改會(huì)破壞繪制狀態(tài)導(dǎo)致渲染異常。解決所有對(duì) Overlay 的增刪操作都通過(guò) BeginInvoke 切回 UI 線程或者用生產(chǎn)者消費(fèi)者模式后臺(tái)線程只放數(shù)據(jù)UI 定時(shí)器負(fù)責(zé)消費(fèi)并更新地圖。private void AddMarkerSafe(PointLatLng pos) { if (_map.InvokeRequired) { _map.BeginInvoke(new ActionPointLatLng(AddMarkerSafe), pos); return; } _markerOverlay.Markers.Add(new GMarkerGoogle(pos, GMarkerGoogleType.red_dot)); }BeginInvoke 是異步的不會(huì)阻塞后臺(tái)數(shù)據(jù)接收線程。高頻 GPS 數(shù)據(jù)流比如 10Hz也可以直接這樣丟過(guò)來(lái)UI 線程會(huì)按自己的節(jié)奏處理不會(huì)堆積到界面卡死。5.2 地圖 Key 失效在線瓦片突然一片灰現(xiàn)象昨天還能正常顯示的地圖今天打開(kāi)后所有瓦片加載不出來(lái)重試也沒(méi)用控制臺(tái)或網(wǎng)絡(luò)抓包看到 401、403 狀態(tài)碼。原因部分在線 Provider 的瓦片服務(wù)需要 Key而 Key 有配額限制和有效期還有的 Provider 會(huì)校驗(yàn) Referer 頭程序默認(rèn)的 RefererUrl 不對(duì)也會(huì)被拒絕。這類問(wèn)題看起來(lái)像網(wǎng)絡(luò)故障實(shí)際上是鑒權(quán)失敗。解決先確認(rèn) Provider 的 RefererUrl 設(shè)置再檢查 Key 是否過(guò)期。開(kāi)發(fā)驗(yàn)證階段可以臨時(shí)換用 OpenStreetMap 這種免 Key 服務(wù)兜底。生產(chǎn)環(huán)境不要把在線地圖作為硬依賴把常用區(qū)域提前預(yù)取到離線緩存Key 掛了業(yè)務(wù)也能繼續(xù)跑。5.3 緩存膨脹一個(gè)季度跑出幾十 GB現(xiàn)象長(zhǎng)時(shí)間連續(xù)運(yùn)行的程序磁盤空間越來(lái)越小最后發(fā)現(xiàn)地圖緩存目錄占了二三十 GB。原因GMAP.net 默認(rèn)會(huì)把所有請(qǐng)求過(guò)的瓦片寫(xiě)入磁盤緩存高縮放級(jí)別的瓦片文件數(shù)量巨大而且沒(méi)有自動(dòng)清理機(jī)制。多個(gè) Provider 還會(huì)分別建立子目錄總量疊加后非常可觀。解決初始化時(shí)把緩存目錄指向明確位置并加上定期清理任務(wù)。更激進(jìn)的做法是直接用 SQLite 緩存模式按時(shí)間和縮放級(jí)別刪除過(guò)期數(shù)據(jù)string cachePath Path.Combine(Application.StartupPath, MapCache); Directory.CreateDirectory(cachePath); _map.CacheLocation cachePath;設(shè)置 CacheLocation 要在任何地圖操作之前完成運(yùn)行中修改很可能不生效。長(zhǎng)時(shí)間掛機(jī)的大屏項(xiàng)目建議每周清理一次低縮放級(jí)別的瓦片保留當(dāng)前城市的高縮放級(jí)別即可。5.4 高 DPI 模糊字體銳利但地圖馬賽克現(xiàn)象在 4K 高分屏上運(yùn)行窗體文字和按鈕都清晰唯獨(dú)地圖區(qū)域糊成一片標(biāo)記和折線邊緣有鋸齒。原因WinForms 默認(rèn)不啟用 DPI 感知系統(tǒng)會(huì)把整個(gè)界面按照縮放比例拉伸位圖瓦片被放大后產(chǎn)生明顯馬賽克。解決在 app.manifest 中聲明 PerMonitorV2 DPI 感知讓程序自己處理不同縮放級(jí)別的顯示器而不是交給系統(tǒng)做位圖縮放。application xmlnsurn:schemas-microsoft-com:asm.v3 windowsSettings dpiAwarenessPerMonitorV2/dpiAwareness dpiAwaretrue/dpiAware /windowsSettings /application改完 manifest 后重新編譯即可。如果項(xiàng)目里還有其他自定義控件也要確認(rèn)它們支持 DPI 重新縮放否則會(huì)出現(xiàn)文字清晰、地圖清晰、某個(gè)自定義畫(huà)布錯(cuò)位的詭異組合。5.5 內(nèi)存泄漏反復(fù)開(kāi)關(guān)窗體內(nèi)存只漲不降現(xiàn)象程序里多次打開(kāi)和關(guān)閉地圖窗體任務(wù)管理器顯示內(nèi)存每次都會(huì)漲幾 MB長(zhǎng)時(shí)間運(yùn)行后接近崩潰。原因窗體關(guān)閉時(shí)只觸發(fā)了 Close沒(méi)有調(diào)用地圖控件的 DisposeGMapControl 內(nèi)部的 Bitmap 對(duì)象和 GDI 句柄沒(méi)有被釋放。如果窗體還訂閱了定時(shí)器事件或網(wǎng)絡(luò)回調(diào)那泄漏更嚴(yán)重。解決在 FormClosing 事件里解除事件訂閱并顯式釋放控件資源private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { if (_timer ! null) { _timer.Stop(); _timer.Tick - OnReplayTick; _timer.Dispose(); } _map.Dispose(); }定時(shí)器必須先 Stop 再解除事件否則即使 Dispose 了窗體事件鏈仍然握著引用。這個(gè)坑用常規(guī)內(nèi)存分析工具不太好定位看起來(lái)像黑匣子只有跟蹤 GDI 句柄數(shù)才能確認(rèn)泄漏源。6. 收尾技巧用緩存分目錄做離線驗(yàn)收省下每次聯(lián)調(diào)時(shí)間每次改完地圖相關(guān)功能都要反復(fù)在有網(wǎng)絡(luò)的環(huán)境里打開(kāi)地圖確認(rèn)效果既慢又容易被瓦片服務(wù)波動(dòng)干擾。我的習(xí)慣是先跑一遍預(yù)取腳本把目標(biāo)區(qū)域的高縮放級(jí)別瓦片全部拉進(jìn)本地緩存然后斷網(wǎng)驗(yàn)收全部功能。這樣一來(lái)后續(xù)所有調(diào)試都在穩(wěn)定、可控的本地?cái)?shù)據(jù)上進(jìn)行不再受外部服務(wù)影響。預(yù)取腳本的核心是按當(dāng)前 Provider 的投影算出中心點(diǎn)附近指定范圍內(nèi)的所有瓦片索引再逐個(gè)請(qǐng)求。GMAP.net 的 Provider 自帶 Projection 屬性可以從經(jīng)緯度換算到像素坐標(biāo)private void PrefetchAround(GMapControl map, PointLatLng center, int minZoom, int maxZoom, int radius) { for (int zoom minZoom; zoom maxZoom; zoom) { GPoint centerPixel map.MapProvider.Projection.FromLatLngToPixel(center, zoom); GPoint centerTile new GPoint(centerPixel.X / 256, centerPixel.Y / 256); for (long x centerTile.X - radius; x centerTile.X radius; x) { for (long y centerTile.Y - radius; y centerTile.Y radius; y) { GPoint tilePos new GPoint(x, y); using (PureImage img map.MapProvider.GetTileImage(tilePos, zoom)) { // 請(qǐng)求完成后瓦片會(huì)自動(dòng)寫(xiě)入磁盤緩存 } } } } }radius 是瓦片半徑比如 radius 設(shè)為 10每個(gè)縮放級(jí)別預(yù)取 21*21 個(gè)瓦片。minZoom 到 maxZoom 之間逐級(jí)掃描優(yōu)先選 12 到 16 級(jí)這個(gè)區(qū)間在城市級(jí)項(xiàng)目中視覺(jué)效果和存儲(chǔ)體積比較均衡。如果只驗(yàn)收某個(gè)區(qū)縣的軌跡回放radius 給 5 到 8 就夠了。預(yù)取完成后再把_map.CacheType GMap.NET.CacheType.Disk和_map.CacheLocation指到對(duì)應(yīng)目錄斷網(wǎng)后地圖控件會(huì)直接從磁盤緩存讀取。這個(gè)流程跑通后我再也沒(méi)被“瓦片服務(wù)抽風(fēng)”折騰過(guò)。從那以后我每次拿到 GMAP.net 源代碼包都強(qiáng)制先跑一遍離線驗(yàn)收流程在線預(yù)取目標(biāo)區(qū)域、斷網(wǎng)、再驗(yàn)證標(biāo)記和軌跡鏈路。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
免费人成毛片乱码| 精品国产Av无码久久久伦古装| 亚洲网站一区二区在线| 中文字幕成人| 黄网站黄视频网站进入口| 人妻少妇一区二区| 亚洲人体视频在线观看| 久久久久久少妇| 婷婷丁香成人| 日本布卡一区二三区| 五月婷婷激情综合| 日韩性爱再线视频| 欧美综合另类| 欧美日韩人妻少妇 一区二区三区| 狠狠色噜噜狠狠狠狠狠色综合久久| 四虎精品一区| 欧美综合 站| 99热精品免费| 91干熟女| 1769国内精品视频| 肏逼视频日本| …中文字幕亚洲乱,97人妻无码费视… | 天天干天天舔| 欧美同性恋 的搜索结果 - 91n| 色婷视频| 逼逼逼逼操操操操操操操操操午夜剧场 | 人妻一区二区三区视频 | 人人操人人插人人摸人人干| 丁香九月婷婷| 伊人网在线点播| 久久精品老司| 精品无码久久久| 一区二区三区四区免费视频| 国产一区二区成人av在线播放| 天天搞欧美| 精品国产网站| 97资源欧美| 日韩人妻大香蕉| 人人操人人搞人人草| 欧美人妻制服| 亚洲开心网| 亚洲双插| 亚洲麻豆18发?| 天天操女人| 99久久精品国产高潮| 综合网91| 亚洲男人天堂手机版| 久久久99999久网站| 人妻精品一区二区在线| 亚洲中文字幕熟女| 久久粉色| 精品福利| 1769一区| 欧美激情区| 激情五月天校园春色网| 亚洲91在线播放影院| 亚州乱码中文字幕综合久久久| 深田咏美亚洲精品福利社| 免费人成在线观看网站品爱网| 久久九色| 国产精品麻豆视频网站| 亚洲中文一区二区三区| 亚洲乱伦图片视频| 333kkkk·亚洲com久久| 中文激情网| 色播五月丁香| 日韩婷婷| 啊好爽受不了无码| 日本一天色道久久久精品视频| 欧美日韩国产中文精品字幕自在自线, | 91精品人妻一品二品三品| 日韩成人小视频| 国产91丝袜 在线播放| 尤物视频视频官网| 欧美 日韩 亚洲 春色| 无码 黑人一区二区三区| 国产午夜在线观看| 一起草欧美| 啪啪视频亚洲第一| 国产毛片精品一区二区色欲黄A片| 综合激情婷婷| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 久久精品电影| 欧美黑人与女人91| 最新亚洲黄色免费电影 | 日韩黄片视频试看| 色色五月天婷婷| 99热在线播放| 91色噜噜狠狠| 蜜臀th| 精品国产乱码久久久| 麻豆一区二区三区在线看 | 黑丝制服中文字幕| A 天堂| 亚洲人妻在线一区| 嗯嗯啊啊操死我| 激情人妻另类| 欧洲久久一二线| 国产传媒午夜理伦精品| 欧美视频在线视频免费va| 国产精品亚洲免费| 欧亚久久偷拍视频| 成人线上超碰| 婷婷啪啪| 亚洲性感丝袜诱惑在线观看| 熟妇人妻精品一区二区| 中文字幕一区二区免费在线| 欧美大香蕉卡久久| 91精品91久久久久77777| 精品久久久久久中文字幕视频免费| 亚洲色人| 丁香五月久久| 久操av在线| 7777奇米影视久久| 国产精品经典一卡久久久 | 在线综合色| 91一起操| 日韩AV噜噜噜一区二区三区四区| 亚洲国产高清福利视频| 国产美女91视频| 久久久极品| 国产综合网站在线播放| 伊人精品视频| 亚洲无码偷拍| 91网18| 91观看 国产白丝| 最新中文字幕在线亚洲| 亚熟hd视频在线| 干B| 成人小说视频在线精品欧美| 看看小穴| 永久免费av无码网站国产app| 中文字幕一区二区韩| 丝袜美腿欧美| 成人小说另类在线| 欧天美中出| 亚洲影院365| 无码又爽又硬又激情免费视频| 日韩图区| 91精品大奶人妻| ai欧美亚洲小说| 狠狠色伊人亚洲综合网站色| 亚洲永久永久永久永久一级一级一级精品 | 国产亚洲99久久精品| 亚洲免费97免费| 人人操人人93| 人妻一区久久二区三区色播| 思思热在线视频在线| 亚州操操穴网| 青青操网| 日本精品免费一区二区三区四区| 欧美黄色大片在线观看| 久热99999| 国产毛片久久久久久久| 日本不卡二三区| 女色综合| 人人爽人人精品乱人伦AV| 日本黄大片在线观看视频| 116美女午夜| 亚洲欧美999| 麻豆亚洲Av成人无码一区精品| 天天噜| 国产精品高潮久久久无码| 老司机香蕉| 91欧美经典| 久久性爱城| 久久三区四区| 热天堂一区二区| 欧美色吧综合| 99热99re超碰精品| 久久久无码av精| 91强在线播放| 激情丁香五月婷婷| 国产精品白丝在线播放| 超碰97综合网| 久久久久久久九九九九九九| 亚洲阿v天堂无码z2018| 伊人午夜福利视频| 天天看少妇| 欧洲精品久久| 日韩成人网址| 日本人妻中文字幕精品| 亚洲色阁| 九九亚洲色在线观看| 九九aV| 97色97干| 搡老女人老91二区| 欧美在线视频观看一二三四区高清| 性做久久久久久免费观看软件| 国产精品久久久久久久久久久久久久吹| 日日天天久久啊啊aaa| 天天操天天干一区二区 | 日本一久是| 97av在线视频| 日韩一区二区高清在线观看的| 91丝袜美女视频| 欧美论理片| 日本天天吊| 亚洲欧美日韩精品久| 美女久久久久久久久久久| 丝袜无码a片| 91超级碰| 亚洲操逼视频网站| 国产中文字幕在线点播| 中文字幕第7页| 大香蕉男人的天堂| 这里是精品| 2024人人操人人摸| 人看人人摸人人操| 一类av片在线看| 亚洲色天| 欧美色涩| 亚洲欧美不卡线| 国产9熟妇视频网站| 性性久久| 欲色啪| 中文字幕-区二区三区四区视频中国| 在线人人人人人人精品超 | 色99色| 国产强上视频在线观看| 欧美黑人精品一区二区| 一线黄色免费性爱片| 日本淫乱女一区二区三区视频| 日韩专区久久久| 国产精品密臀网在线观看| 欧美72网页| 亚洲AV资源| 四虎影视在线| 亚洲精品 超碰| 磁力99AV| 欧洲小说色图视频另类| 9长久久精品| 97干综合网| 97干天天| 国产深喉| 100啪啪视频大全| 日韩高清黄片| 国产精品一级特黄aaa大片在线观看| 国产精品麻豆成人av| 免费AV中文网在线观看| 日韩性爱毛片操骚逼| 1级黄色夫妻对换性交免费看| 国产 日韩,欧美 自拍| 久久78| 欧美日韩在线视频网站| 久久香蕉综合一本到3atv| 一线黄色免费性爱片| 亚洲精品亚洲人成在线麻豆| 激情网五月天| 亚洲综合影片| 锕锕好爽 死我在线观看| 97综合久第一页| 日韩人妻无码不卡网站| 中日韩一区二区三区欧美| 最新日本中文字幕| 家庭乱伦性爱av| 天天干人妇| 91大学精品激情戏| 91挑色欧美| 91精品人妻五十路| 五月丁香激情四射| 国产一区二区视频在线播放| 久久啊哟| 久操av在线| 97在线免费观看| 日本三级网页| 在线啊啊啊啊| 精品人妻久久久久一区二区三区| 综合影院永久入口国产| 亚洲综合中文字幕有码| 欧美在线伊人色| 国产乱青青草久久| 9国产超碰| 中日高清无码操逼视频| 亚洲色图加勒比| 亚洲AV永久无码精品成人调教| 亚洲97在线| 日韩欧美aⅴ综合网站发布| 亚洲性综合9| 天天操天天日天天干| 少妇蹲下露出大唇5| 人妻 丝袜美腿 中文字幕| 国产懂色精品国产av| 亚洲AV无码| 人妻人久久精品中文字幕| 九九综合九九综合| 亚洲 日韩 欧美 国产综合体| 做爱福利视频一区二区| 牛牛操视频逼| 欧美大香蕉97| 精品无码久久久久久久杏吧| 久久久9品一区二区三区| 人伦四五区| 可以在线观看的黄色网址| 老熟女熟妇| 91无遮挡| 欧美最婬乱婬爆婬性视频| 91网站18禁| 人人色人人操在线| chaopen97久久| 丰满人妻一区二区三区四区| 日韩午夜国产| www.av在线观看| 国产性感在线观看| 国产极品精品美女视频| 熟女自慰久久久| 男啪女色黄无遮挡免费观看| 综合国产97| 97在线视频观看| 黄页大片在线观看| 国产精品视频内谢女人| 日产国产精品中文久久婷婷| 久久久性| 97超碰超欧美。| 国产精品制服丝袜清纯唯美| 欧美韩日精品99综合| 日本成人电影资源网| 另类av综合久久| 丰满人妻aA一区二区三区| 国产乱码久久| 久久人妻| 久久精品老司| 日va操| 97草草| 久久久久国产一区二| 激情另类激情| 日韩国产品视频中文字| 午夜福利1区2区3区| 日韩99神马视频播放| 可以在线观看的黄色网址| 校园春色中文字幕AV| 在线一道啪| 色777999综合| 97爱爱爱综合| 亚洲AV无码黄色强奸| 亚洲激情欧美色图 | 人妻精品一区二区三区| www.四虎在线| 日本操大逼| 九九这里只有精品| 小草三级久久观看| 亚洲激情综合另类男同| 国产97av| 色婷婷婷五月天激情四射| 郑州宾馆老熟女露脸啪啪| 国产精品一区二区麻豆| 久久久久久久久久久久久久久乱码| 911av网站免费观看| 久久偷偷色综合蜜桃| www.yw尤物| 欧美少妇色图| 亚洲高清男人天堂| 国精品一区二区三| 大伊香蕉在线视频免费| 久久丁香久草综合网| 黑人干亚洲| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 日韩欧美成人综合在线| 新怡红院| 人妻黑丝袜电影| 亚洲色五月| 亚洲精品国产熟女| 熟人人妻少妇精品久久| 欧美72网页| 96免费视频在线| 国产精品宅男免费| 2023天天操夜夜操| 熟女少妇视频| 蜜桃臀AV在线| 亚洲情色图片区| 欧美嫩性色| 麻豆国产96在线| 国产成人 综合亚洲 天堂| 情色大香蕉| 色偷偷色偷偷欧美日韩| 欧美亚洲性爱一区二区| 国产亚洲人妻综合日韩 久久| 蜜乳AV免费观看| 人人摸人人舔一区二区| 99操| 淫淫总合网| 国产在线精品偷| 丰满人妻无码一区二区三区| 91丨九色丨国产丨人妻在线| 免费A片三p视频| 亚州男人天堂| 加勒比综合a∨| 亚洲精品国产精品乱码不卡| 图色综合网| 中文字幕一区二区三区人妻少妇在线| 91大胆欧美| 欧美激情综合| 亚洲丝袜二区| 婷婷久草一区二区三区| 五月丁香成人网| 欧美亚洲中文字幕| 日韩欧美经典在线观看| 激情六月天| 日韩性爱高清免费视频| 国内精品久久久久影院亚洲| 日韩av一级黄片| 亚洲免费成人精品电影| 欧美v亚洲v日韩v最新在线二区| 69少妇一区二区| 极品综合| 全免费a敌肛交毛片免费| 国产精品久久久无码AV网站| 91爆操视频| 色综合网1| www.色婷婷色综合| 婷婷五月天成人网| 日本免费不卡二区| 九九国产| 一本一道久久综合久久| 亚洲在线a| 日本操逼无码| 国产精品麻豆免费视频| 午夜理论片在线观看免费| 久久男女激情视频网站 | 久久av色| 狠操91,com| 加勒比综合a∨| 加勒比综合88| 蜜臀AV秘一区翔田千里| 91精品黄在线观看| 啪啪综合网| 午夜久久一区二区无码中出| 97久久久精品| 国产精品久久久亚洲第一牛牛_在线观看| 久久亚洲一区女同性恋中文字幕| aV中亚| www.99中文字幕| 精品一国2| 足交视频老司机| 欧美色交| 伊人五月天婷婷| 天堂8在线新版官网| 亚码激情| 日日嗷| 操国产逼| 日韩另类色图| 免费成人在线熟妇网| 99视频自拍区| 亚洲AV成人无码一二三久久| 337p大胆噜噜噜噜噜91Av| 九九英色视频| 亚洲欧美91√| a片自拍直播视频| 日韩精品 视频一区二区| www.99在线| 99re95| 91亚洲图片| 2018天天干在线视频| 啊啊啊不要好疼视频| av东京热男人的天堂| 99re在线| 91在线无码精品秘 软件| 偷窥自拍亚洲色图| 色综合大香蕉| 欧美东京热精品A∨| 91扒丝袜综合在线| 天天狂操夜夜狂日| 毛片电影一区二区三区| 一二三四视频在线社区中文字幕| 国产老太乱伦一区| 探花激情视频| 日本黄页视频在线观看| 亚洲人妻中文在线视频| 爱爱动态120秒| 久久久性少妇| 国产aⅴ无码片毛片一级网站| 91亚洲不卡一区| 欧美日韩制服| 婷婷午夜| 怡春院久久| 99热这里只有精品地址| 97超碰热线| 亚洲综合嫩| 久久透逼视频| 亚洲视频,小说| 大二网站亚洲| 麻豆影音天美视频| 97资源视频| 亚洲欧美中日韩| 亚洲国产丝袜熟女av| 资源在线观一 二| 欧美色性情| 大香蕉久操| 99热伊人| 91超碰人人| 日韩亚洲欧美中文字幕| 欧插网站| 天天艹天天日| 97超碰色屌| AV和黑人在线播放| 欧美韩日精品资源| 国产第25页在线观看| 伊人色综合欧美| 精品黑人一区二区| 国产日韩美女小穴视频网站不卡| 婷婷五月天色色| 不卡二三区人妻少妇| 伊人五月天| 91操熟女| 久草男人天堂| 秋霞曰韩R级| 中出20p| 亚洲宅男天堂| 一级婬片120分钟试看| 亚洲男人在线观看天堂| 久久婷婷五月天| 久久专区| 99精品丰满人妻无码| 日韩精品在线观看网站| 97干在线| 熟女网站最新| 性爱久久| 3d成人精品一区二区| 日韩久草| 嗯嗯嗯啊啊啊在线免费观看| 1人人看人人摸人人操| 午夜综合在线| 日韩在线视频1234| 婷婷丁香五月天亚洲天堂网| 超碰97 线线 在现| 久久亚洲天天做| 久久性爱免费送| 亚洲丝袜诱惑| 欧美丝袜美女电影一二三四区| 五月激情综合网| 亚洲天天做日日做天天谢日日| 天天草AV| 久久婷婷在线观看视频| 欧美劲爆视频一区二区| 少妇熟女1区2区3区| 日韩精品资源| 日韩电影天堂视频一区二区| 激情五月婷婷| 亚洲精品日韩国产欧美| 国产欧美日韩一区二区三区| 欧在线一二区| 加勒比久久av| 天天看高清麻豆| 六九九九| 国产高清成人传媒影视| 95自拍视频在线观看| 亚洲图片欧美色| 亚洲区小说| 综合色拍| 麻豆国产第一| 欧色综合| 色av中文字| 91久久婷婷| 国产精品久久aV| 久久蜜桃一区二区| 欧美亚洲清纯| 青青草久久| 中文字幕五区| 伊人AAA| 国产精品视频精品一二| 啪啪资源网| 亚洲欧美综合| 日日超碰亚洲| 91伊人| 91人妻在线视频| 91美女精品| 日本二区不卡| 亚洲图片 欧美电影| WWW美腿丝袜香蕉中文| 秋霞午夜视频一区二区| 久插不卡| 日韩资源网| 欧美亚洲成人在线一区二区三区| 超碰人妻中文在线| 亚洲图片 激情小说| 欧美白嫩在线放| 国产精品suv一区| 亚洲激情色片 | www.高清无码诱惑一区.com | 久久内射| 97se综合网| 搞中出视频在线观看| 97在线资源| 国产精品爱欲| 怡红院成人av| 亚欧无码线免费观看视频| 1024人妻| 九九久久九九久久| 67194无码不卡| 久久久久久亚洲精品中文字幕人妻| 中文字幕五区| 亚洲国产精品久久久久婷婷青年| 亚洲国男人的天堂| 91老熟女逼| 欧美熟妇人体| 少妇熟女视频一区二区三区| 久久高潮妇女视频| 中国AAAAAA黄色片| 伊人久久大香线蕉无码| 久久香蕉网| 99啪| 午夜毛片高清免费不卡| 久久久精| 午夜男女爽爽大片免费观看| xxx0国产在线播放| 综合熟女| 大香蕉99热| 蜜臀久久99精品久久久久电影| 欧美综合91| 亚洲精品一二区| 久久九九网| 国产人伦精品一区二区三区| 丰满人妻一区二区中文| 色综九九九一区| 精品78| 天天综合网日韩7799| 久久香蕉影院| 无码视频一区二区| 91白虎| 亚洲一区二区三区中文字幕| 开心激情站| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 一区二区三区四区色图| 好吊色一区| 超碰超碰超碰超碰的大鸡吧操黑丝袜| 一级黄色性爱裸体视频| 操逼日韩无码| 亚洲在高跟鞋自慰久久在色线| 特污精品女优骚货黄色视频在线免费观看| 夜夜操青青草| 91人妻超碰| 欧美少妇高潮| 97人人夜夜精品视频| 婷婷伊人綜合中文字幕小说| 四虎884a| 精品国产一区探花在线观看| 偷窥自拍亚洲天堂网爆| 少妇被玩视频二三区| 97国产精品在线观看| 永久免费av无码网站国产app| 丁香五月电影| 骚妻少妇精品性色无码四色A V| 午夜福利国产欧美日韩夜夜| 亚洲综合中文字幕有码| 女生自91网站| 欧美激情久操网| 五月花婷婷| #NAME?| 国产小u女在线观看| 91成人在线| 又大又大又大又粗爽高潮观看| 亚洲av乱伦色图网站| 亚洲精品一区二区免费在线观看| 在线无码视频| 亚洲大色堂| 欧州一区二区三区四区| 麻豆天美电影一区二区| 校园春色亚洲色图| 91精品黄在线观看| 久久久无码精品人妻二区| 国产精品宅男免费| 激情四射熟女丝袜| 精品亚洲国产成人精品| 免费成人在线熟妇网| 中文字幕乱在线伦视频中文字幕乱码在线 | 国产一区二区欧美日本| 日韩久草| 国产97色在线| 97碰碰色| 天天看天天综合成人网| 国产精品爆乳懂色蜜乳| 欧洲乱码一区二区| 中文字幕精品一区欧美| 欧美在线色图| 午夜激情成人在线观看| 激情人妻另类| 色爱综合网| 日本女人久久久| 亚洲图片 91| 中文AV制服乱伦| 黄色不卡视频| 十八禁成人网站在线观看| 亚洲图片在线| 9九九九九视频在线观看| 国产精品不卡av免费在线观看| 大香蕉伊人网WWWn0n| 大屁股人妻女教师撅着屁股| 狠狠2050在线观看| 超碰人人干| 国产精品电影大全| 欧美国产一区二区三区麻豆传媒| 亚洲一区二区精品福利| 男人的天堂1024| 亚洲综合113页| 可以免费观看的日韩av毛片| 天天综合色图| 大香蕉综合久久| 91超碰人人操| 欧美日韩大香蕉| 免费亚洲国产精品久久一区| 天天日日夜夜| 欧美激情性爱视频网站| 4tube欧美女厕所| 宗合情欲网| 精品国产肉丝袜在线拍国语| 欧美激情久操网| 久久久一区二区| 欧美日韩91| 国产一区自拍欧美日韩| 中出20p| 日日夜夜骚| 激情综合网五月婷婷| 超碰精品日韩欧美国产| av2014 日韩在线中文字幕| 亚洲免费看片| av天堂精品久久| 亚洲图片欧美| 少妇九九九九| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 免费一级a毛片久久久久久鸭绿欲| 亚州综合AⅤ| 可以免费观看的AV| 国产不卡免费在线视频| 欧美18老人禁| 60秒不遮不挡| 亚洲中文字幕一区| 91成人在线| 麻豆天美久久91| 十八禁视频网站| 亚洲精品国产专区在线观看| 人妻少妇久久中文字幕一区二区 麻豆 | 精品人体无圣光凹凸| 欧美97se| 超碰视97中文| 97操97色| 日产狠狠干| 屁屁影院一区二区三区国产| 中文字幕人妻资源在线| 97在线免费视频| 久久久啊啊啊| 欧美综合中文| 蜜桃AV天堂| 在线播放中文字幕| 大香蕉92| 呻吟 欧美 日本 中出| 偷拍在线观看视频| 久久久久久中文版| 成人A片男人的天堂| 99999精品视频| 97天天爽| 天天干2019| 国产精品情侣啪啪| 91国产丝袜足交精品视频| 国产又粗又又黄又猛| 日韩熟妇二区| 天天色综合图片| 伊人综合色网| 夜夜操av亚洲一区二区| 中文字幕免费观看| 自拍视频大全亚洲专媒视频/一区二区三区 | 户外裸露刺激视频第一区| 欧美一级国产一级| 国产又粗又大硬免费色网视频| 久久久一区二区三区四区五区| 男女啊啊啊啊啊| 夜夜欧美 | 熟女网站最新| 后入福利视频| 久久久精品,3| 欧美综合传媒| 91无码人妻精品一区二区三区蜜桃| AV天黑人| 91天堂网| 日本色色视频网站| 国产v片在线免费观看| A 在线网址| 亚洲精品中文字幕一区在线视频| 久久亚洲婷婷| 18一区二区三区| 传媒免费一区二区三区| 日韩干B| 女人久久久| 黑人美精品 A片| 性爱乱伦网址| 国语人妻精彩刺激| 性爱欧美五月| 欧美 日韩第一性色| 精品传媒在线一区| 国产成人自拍视频视频| 国产精品久久久久久片| 婷婷五月在线视频| 国产肏屁眼视频| 国产精品欧美激在线| 久久一本大香蕉 | 无码精品人妻一区二区三区妖精| 天天操天天舔| 欧美综合区| 欧美另类色| 国产精品久久久999| 丝袜美女诱惑 91 视频| julia国产在线| 亚洲影院365| 欧美婷婷五月天| 啊啊啊啊啊操我视频| 超碰在线1234区| 欧美影院一区二区三区| 中文字幕狠狠玩| 亚洲国产精品乱码在线观看| ...日韩成人一区二区三区字幕| 亚洲男人在线观看天堂| 人妻中文字幕精品无码| 大香蕉亚洲中文| 九九九九一级| 久久久91| 强奸乱伦av电影| 国产有码一区| 啊啊啊啊免费视频| 久久永久无码人妻视频| 爱av免费| 精品一区二区三区蜜桃臀赵总 | 一级毛片电影免费看| 日本人妻A片成人免费看片| 91成人在线| 久草新在线| 91呆哥人妻| 天天日天天屌天天操| 在线a亚洲视频播放在线| 国产热RE99久久6国产精品首 | 肉丝中文无码高清| 国产毛片毛片4p懂色| 九月婷婷| 蜜臀在线网站| 国产亚洲中文不卡二区| 人人妻人人玩人人澡人人爽| 男人兔费天堂| 国产99999久久精品| 亚洲国产精品9999在线观看| 亚洲五区熟女| 欧美人与动性人交a| 男人亚洲91首页在线| 天天亚洲| 99热超碰| 1769一区| 国产精品网站www| 9国产超碰| 中文字幕久久精视频久久大全| 免费人成?大片在线播放| av线电影| 国产成人bd在线观看| 婷婷九月丁香| 91碰碰| 三级色影综合网| 亚洲精品久| 黑人精品XXX一区一二区| 神马久久久久久久久久| 久久久一区二区三区三州| 亚洲大胆人体av| 成人福利视频网| 一本色道熟妇| 美国美女AV在线| 中文字幕日韩精品久久| 午夜精品人妻二区三区| 99九九精品| 亚州综合色| 国产超碰在线一区| 在线观看亚洲专区| 日韩欧视频| 999久久久九| 超碰色男人操熟女| 熟女露脸激情自拍视频| 人妻天堂综合网| 超碰国产精品无码| 超碰碰小说97| 久久侵犯人妻爽爽爽| 超清福利精品视频在线| 成人久久久精品| www.yw尤物| 中字幕人妻一区二区三区| 欧美一品道| 亚洲,欧美,春色,另类| 少妇无码av专区线| 蜜屁av| 中国黑人三级片网站上区| 综合久久欧美| 试看日韩黄片| 日日干夜夜骑| 蜜桃久久久久久久| 激情久久久| 天天干天天操天天操夜夜操天天操| 大肉棒导航| 五月天色综合| 午夜啪啪片| 曰本精品久久久| 麻豆久久一区二区三区| 色蜜AV| 国产地址二三| 日韩精品亚洲专区在线影视| 78综合网| 亚欧韩av| 成全在线观看免费观看| 少妇淫妇久久久久久久| 9久久美女首页| 日本天天吊| a在线观看| 18禁精品网站在线看| 欧美中文字幕精品人妻| 久男人久久| 日韩精品99久久久久久中文字幕 | 超碰97亚洲区| 超碰人人乐97| 3p国产色噜噜一区| 日韩欧美aⅴ综合网站发布| 白丝av| 清纯唯美第一页| AV色五月天| 久久綜合很很很| 欧美中文字幕男人天堂久久精品| 国产一级黄色片在线观看| 日韩欧美午夜一区二区| 91老熟妇| 这里只有精品97| 伊人久日| 日本性一区| 久久人妇| 好舒服视频| 国产美女激情| 欧美性区| 色诱avtt| 丝袜综合| 欧洲与亚洲欧美精品中文字幕| 日日日啊啊啊| 精品久久久中文字幕不| 国产人妻精品久久久一区二区三区 | 激情视屏国产乱伦强奸| 神马精品视频| 在线播放免费av福利片| 国内外激情在线| 麻豆伊人网| 久久婷婷五月天| 大香蕉久| 无码抄逼网| 国产日韩精品suv| 99热这里只有精品9| 日韩一区二区精彩视频| 激情一区二区三区在线观看| 婷婷天堂站| 国产成人无码久久精品| 久久久国产成人一区二区三区在线| 乱伦AVxx| www…国产操逼| 久久久国产三级黄色片| 91啪啪视频| 欧美78| 试看60秒| 97久久国产亚洲精品超碰热| 色婷婷A V一二三四区麻豆综合| 加勒比久久av| 亚洲高潮影院| 国产精品操| 性爱网站一区二区| 日本性爰一道本| 国产亚洲色婷婷久久99精品91葵花宝典| 亚洲AV无码黄色强奸| 国产一级黄色片在线观看| 强奸xx国产| 日韩欧美麻豆大片| 久久国产精品,久久国产| 十八禁黄色成人网站观看| 成人久久久精品| 色亚洲欧美| 丁香色狠狠色综合久久小说| 亚洲图片日本AⅤ欧美在线| 国产色精品午夜大片| 五月婷婷无码| 日少妇亚洲版| 自拍第一页| 蜜臀久久99精品久久久久久无删减| 日韩熟女操逼| 性爱精品一区| 97超碰美国| 久久6热精品99视频| 可乐操在线| 一区不卡在线观看av| 天天色天天干天天射| 国产精品黄色三级av| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 国产日本熟女顶级一区二区三区视频 | 少妇第一页| 天天伊人| 综合久久六月久久婷婷| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | A级片日韩欧美国产欧美视频精选观看| 中文字幕伊人| 一区二区 电影 亚洲| 亚洲精品蜜桃久久久| 日本成人免费一区二区三区| A片 AV一级在线播放观看免费| 综合影院亚洲| 91青青在线视频| 一中国女人毛片水真多| 91超碰人人操| 日韩美女高潮喷水视频| 久久系列| 久久鲁干| 九九自拍伦理| 欧美影院一区二区三区| 六月丁香久久| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 成人线上超碰| 婷婷丁香五月激情啪啪| 欧美亚洲美少妇一区二区| 97干在线| 操91| 五月天AV资源| 亚洲欧美在线观看免费| 91网亚洲| 97在线视频观看| 99碰碰| 久久久性少妇| 日韩久久.一级黄色片| 一区二区首页| 碰碰97| 国产剧情一区在线观看| 精品丰满熟妇人妻一区| 黄片无码在线制服| 九九九九免费高| 国产视频一区二区三区在线免费观看 | 97色97好| 欧亚无码视频| 五月天黄色av| 97亚洲欧美| 夜夜肏2021| 美女诱惑久久| 天天操综合网| 欧美日韩久久精品爱爱| 丁香九月激情啪| 91男女| 91粉嫩萝控精品福利网站_精品影音先锋国 | 狠狠爱综合网| 欧美高清18A片| 欧洲无码一区二区| 亚洲国产一区二区三区在线| 91第一页| 综合影院亚洲| 免费精品无码一级毛片牛牛影视 | 国产传媒日韩| 青青草福利视频| 九九综合色| 久久久精精精| 亚洲高潮少妇| 亚洲日韩美女丝袜美腿人妻视频| 国产激情综合五月久久| 欧中美三级一区二区三区| 中亚黄色三级大片| 亚洲中文一区二区三区| 亚洲资源网| 亚洲一区二区中文字幕| 四季av一区二区凹凸精品小说 | av日韩中文字幕| 97碰在线视频| 白嫩少妇| 99国产精品免费| 男人的天堂一区三区| 精品人妻一区二区三区视频在线| 日本三级黄页| 26UUU欧美日本| 一区二区三区成人| 日本福利二区视频| 亚洲自拍97| 久草精品国产蜜臀| 亚洲国产成人精品无码专区| 亚洲综合嫩| 欧美久久婷| 国产高清在线观看欧美| 九九九九九九精品| 俺去久久| 强奸乱伦AV网站| 凹凸 69堂 在线播放| 99热99re超碰精品| 少妇一线天久久久久久| 欧美1727免费观看视频| 久久久夜夜嗨免费视频| 97超级久久强资源| 亚州中文字幕超碰97| 欧美一区二区三熟女剧情| 人妻天堂三区| 91搞逼视频| 天天综合网~69| 欧亚揄拍偷拍精品视频| 日韩在线观看三级电影| 色五月AV| 中文久久一区| 中文字幕青青草| 久久嫩草国产成人一区| 久久久久久国产无码精品| 欧美姓爱综合网| 亚洲限制级| 国产精品老熟女一区二区| 国产精品一区av在线| 91岛国动作片| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 秋霞一级A片黄色视频| 久久精品人妻一区二区三区| JULIA人妻风俗店中出电影| 亚洲最大网站av| 国产91亚洲精品一区二区三区| 夜夜国自区| 国产av热热色| 欧美日韩第一页| 美熟女逼导航AV操逼| 久一区久久蜜桃| 999岛国大片| 亚欧美综合| 五月丁香六月综合缴清无码| 人妻99p| 日本黄大片在线观看视频| 久久线上视频免费看| 日韩精品电影| 中文字幕免费观看| 欧美亚洲日韩人妻在线观看| 性爱乱伦网址| 天天色黄色影院天天操| 91美女网站| 高颜值美女口爆高潮浪叫| 天天综合网~91综合网| 九九热五区| 久久国产精品91| 婷婷色综合| 这里都是精品在线观看| 久久av成人无码免费| 狼狼色丁香久久婷婷综合五月| 97精品国产| 碰碰97| 淫荡网址| 97免费视频在线| aV中文麻| 亚洲色性| 国产美女91| 欧美九九九| 高颜值美女口爆高潮浪叫| 67914在线兔费成人视频| 精品综合久久久久久97| 精品中文日韩字幕视频| 日韩人妻精品中文字幕| 一区二区三区蜜桃成人撸久久东京热| 大香蕉手机在线视频| 蜜色网色哟哟| 久久精品视频久久久| 人妻在线臀日韩| 啊啊啊啊啊操我视频| 色婷婷综合久久中文字幕雪峰| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 超碰伊人在线| 7777奇米影视久久| 人妻一区二区三区视频 | 日韩内射视频| 亚洲AV资源| 久久一二三四不卡| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 亚洲欧美天堂在线|