亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bufferbase.cs

?? supermap objects 5.2空間分析緩沖技術的實現
?? CS
字號:
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Runtime.InteropServices;
using SuperMapLib;
using AxSuperMapLib;


/******************************************************************
 * Copyright(c)  : 江蘇神彩科技
 * Description   : 幾何緩沖、空間查詢等
 * CreateDate    : 2007-11-4
 * Creater       : 姜素芳
 * LastChangeDate: 姜素芳
 * LastChanger   : 2007-11-12
 * Version Info  : 1.0
 * ******************************************************************/

namespace SOBufferQuery
{
    [Guid("d939f3d1-36ef-4fe3-8291-6607c53fdb69")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("SOTest.BufferBase")]    

    public class BufferBase
    {
        #region 幾何緩沖
        /// <summary>
        /// 
        /// </summary>
        /// <param name="geometry">待緩沖的幾何</param>
        /// <param name="distance">緩沖度(半徑)</param>
        /// <returns>緩沖后的幾何</returns>
        soGeometry Buffer(soGeometry geometry, double distance)
        {
            soGeoRegion objGeoRegion = null;

            //點、線、面緩沖處理
            if (geometry.Type == seGeometryType.scgPoint)
            {
                soGeoPoint tmpPoint = (soGeoPoint)geometry;
                objGeoRegion = tmpPoint.Buffer(distance, 60);

                Marshal.ReleaseComObject(tmpPoint);
                tmpPoint = null;
            }
            else if (geometry.Type == seGeometryType.scgRegion)
            {
                soGeoRegion tmpGeoRegion = (soGeoRegion)geometry;
                objGeoRegion = tmpGeoRegion.Buffer(distance, 60);

                Marshal.ReleaseComObject(tmpGeoRegion);
                tmpGeoRegion = null;
            }
            else if (geometry.Type == seGeometryType.scgLine)
            {
                soGeoLine tmpGeoLine = (soGeoLine)geometry;
                objGeoRegion = tmpGeoLine.Buffer(distance, 60);

                Marshal.ReleaseComObject(tmpGeoLine);
                tmpGeoLine = null;
            }

            return (soGeometry)objGeoRegion;
        }
        #endregion

        #region 記錄對應幾何緩沖
        /// <summary>
        /// 將指定記錄對應幾何進行緩沖
        /// </summary>
        /// <param name="recordset"></param>
        /// <param name="distance"></param>
        /// <returns>緩沖后的幾何</returns>static
        public soGeometry CreatBuffer(soRecordset recordset, double distance)
        {
            soGeometry objGeometry = recordset.GetGeometry();

            return Buffer(objGeometry, distance);
        }
        #endregion

        #region 空間包含查詢
        /// <summary>
        /// 將給定的幾何進行緩沖,然后查詢指定圖層里包含在該緩沖區內的要素,并高亮顯示
        /// </summary>
        /// <param name="superMap">地圖</param>
        /// <param name="layer">待查詢的圖層</param>
        /// <param name="geometry">緩沖后作為空間查詢區域的幾何</param>static
        public void SpatialQuery(AxSuperMap superMap, soLayer layer, soGeometry geometry)
        {
            //風格變量
            soStyle objStyle = new soStyleClass();

            #region 設置緩沖區風格
            objStyle.BrushStyle = 2;
            objStyle.BrushBackTransparent = true;
            objStyle.PenColor = (uint)ColorTranslator.ToOle(Color.Purple);
            objStyle.PenWidth = 1;
            #endregion

            //得到緩沖后的幾何
            soGeometry objGeometry = Buffer(geometry, 50);
            //轉為緩沖區域作為空間查詢區域
            soGeoRegion objGeoRegion = (soGeoRegion)objGeometry;
            //地圖跟蹤層并清除原有跟蹤
            soTrackingLayer objTrackLayer = superMap.TrackingLayer;
            objTrackLayer.ClearEvents();

            //在跟蹤層上繪出緩沖區域
            if (objGeoRegion != null)
            {
                objTrackLayer.AddEvent((soGeometry)objGeoRegion, objStyle, "");
                objTrackLayer.Refresh();
            }

            //圖層數據集
            soDataset objDataset = layer.Dataset;
            //將圖層數據集轉為矢量
            soDatasetVector objDatasetVector = (soDatasetVector)objDataset;
            //查詢指定圖層包含在緩沖區域內的要素集
            soRecordset objRsQuery = objDatasetVector.QueryEx(objGeometry, seSpatialQueryMode.scsContaining, "");

            //定義選中幾何
            soGeometry objSldGeometry = null;
            #region 設置選中幾何風格
            objStyle.BrushBackTransparent = true;
            objStyle.PenColor = (uint)ColorTranslator.ToOle(Color.Blue);
            objStyle.PenWidth = 5;
            objStyle.BrushColor = (uint)ColorTranslator.ToOle(Color.DarkRed);
            objStyle.BrushStyle = 2;
            objStyle.SymbolSize = 40;
            #endregion

            #region 高亮顯示查詢得到的要素集
            if (objRsQuery != null)
            {
                objRsQuery.MoveFirst();

                for (int i = 1; i <= objRsQuery.RecordCount; i++)
                {
                    objSldGeometry = objRsQuery.GetGeometry();
                    objRsQuery.MoveNext();
                    objTrackLayer.AddEvent(objSldGeometry, objStyle, "");
                }
            }
            #endregion

            //地圖刷新
            superMap.Refresh();

            #region 釋放COM對象
            Marshal.ReleaseComObject(objGeometry);
            objGeometry = null;
            Marshal.ReleaseComObject(objGeoRegion);
            objGeoRegion = null;
            Marshal.ReleaseComObject(objDatasetVector);
            objDatasetVector = null;
            Marshal.ReleaseComObject(objDataset);
            objDataset = null;
            Marshal.ReleaseComObject(objRsQuery);
            objRsQuery = null;
            Marshal.ReleaseComObject(objStyle);
            objStyle = null;
            Marshal.ReleaseComObject(objTrackLayer);
            objTrackLayer = null;
            #endregion
        }
        #endregion

        #region 繪制通過給定兩點的圓區域(采用了中間點緩沖的方法)
        soGeometry GetCenterPointBuffer(double x0, double y0, double x1, double y1)
        {
            double x, y, tmpx, tmpy, width, height;

            #region 確定給定兩點間的水平距離及垂直距離
            width = Math.Abs(x0 - x1);
            height = Math.Abs(y0 - y1);
            #endregion

            #region 根據x值交換兩點
            if (x0 > x1)
            {
                tmpx = x0;
                x0 = x1;
                x1 = tmpx;

                tmpy = y0;
                y0 = y1;
                y1 = tmpy;
            }
            #endregion

            #region 確定給定兩點連線的中心點坐標并轉為幾何點
            //中心點x值
            x = x0 + width / 2;
            //中心點y值
            if (y0 > y1)
                y = y0 - height / 2;
            else
                y = y0 + height / 2;

            soGeoPoint geoPoint = new soGeoPoint();
            geoPoint.x = x;
            geoPoint.y = y;
            #endregion

            //確定緩沖半徑
            double radius = Math.Sqrt(width * width + height * height) / 2;

            //返回緩沖幾何
            return Buffer((soGeometry)geoPoint, radius);
        }
        #endregion

        #region 多次空間查詢
        /// <summary>
        /// 根據給定的兩個點生成一個包含它們的圓,然后查詢出第一個圖層中與這個圓相交的記錄集(2次相交),再查詢出第二個圖層中包含在這些記錄的緩沖域內的記錄集,最后地圖上高亮度顯示查詢出來的第一、二圖層中的記錄集
        /// </summary>
        /// <param name="superMap">地圖</param>
        /// <param name="firstLayer">第一個圖層(如河流圖層)</param>
        /// <param name="secondLayer">第二個圖層(如工廠圖層)</param>
        /// <param name="x0">第一個經緯度點的x值</param>
        /// <param name="y0">第一個經緯度點的y值</param>
        /// <param name="x1">第二個經緯度點的x值</param>
        /// <param name="y1">第二個經緯度點的y值</param>
        /// <param name="distance"></param>
        public void BufferSpatialQuery(AxSuperMap superMap, soLayer firstLayer, soLayer secondLayer, double x0, double y0, double x1, double y1, double distance)
        {
            //繪制通過給定兩點的圓區域
            soGeometry objFGeometry = GetCenterPointBuffer(x0, y0, x1, y1);

            //地圖跟蹤層,初始清空
            soTrackingLayer objTrackLayer = superMap.TrackingLayer;
            objTrackLayer.ClearEvents();

            //第一圖層查詢集的顯示風格
            soStyle objFStyle = new soStyleClass();
            objFStyle.BrushStyle = 2;
            objFStyle.BrushBackTransparent = true;
            objFStyle.PenColor = (uint)ColorTranslator.ToOle(Color.Blue);
            objFStyle.PenWidth = 5;
            objFStyle.BrushColor = (uint)ColorTranslator.ToOle(Color.DeepPink);
            //objTrackLayer.AddEvent(objFGeometry, objFStyle, "");

            //第二圖層查詢集的顯示風格
            soStyle objSStyle = new soStyleClass();
            objSStyle.BrushBackTransparent = true;
            objSStyle.PenColor = (uint)ColorTranslator.ToOle(Color.Red);
            objSStyle.PenWidth = 5;
            objSStyle.BrushColor = (uint)ColorTranslator.ToOle(Color.DarkRed);            

            //第一、二圖層的矢量數據集
            soDatasetVector objFDatasetVector = (soDatasetVector)firstLayer.Dataset;
            soDatasetVector objSDatasetVector = (soDatasetVector)secondLayer.Dataset;

            //查詢第一圖層與圓區域相交的記錄集
            soRecordset objFRsQuery = objFDatasetVector.QueryEx(objFGeometry, seSpatialQueryMode.scsAreaIntersect, "");
                        
            objFRsQuery.MoveFirst();
            for (int i = 1; i <= objFRsQuery.RecordCount; i++)
            {
                //二次查詢出第一圖層與圓區域相交的精確幾何
                soGeometry objSGeometry = objFGeometry.SpatialOperator.Intersection(objFRsQuery.GetGeometry());
                //高亮度顯示第一圖層查詢記錄
                objFStyle.PenColor = (uint)ColorTranslator.ToOle(Color.DarkViolet);
                objTrackLayer.AddEvent(objSGeometry, objFStyle, "");

                //緩沖二次相交記錄
                soGeometry objSGeometryBuffer = Buffer(objSGeometry, distance);
                //高亮顯示
                //objFStyle.PenColor = (uint)ColorTranslator.ToOle(Color.YellowGreen);
                //objTrackLayer.AddEvent(objSGeometryBuffer, objFStyle, "");

                //二次查詢記錄緩沖后與圓相交的部分,記為*
                soGeometry objTGeometry = objFGeometry.SpatialOperator.Intersection(objSGeometryBuffer);
                //二次查詢集緩沖區的顯示風格
                soStyle objTStyle = new soStyleClass();
                objTStyle.BrushStyle = 5;
                objTStyle.BrushBackTransparent = true;
                objTStyle.PenColor = (uint)ColorTranslator.ToOle(Color.MediumSpringGreen);
                objTStyle.PenWidth = 5;
                objTStyle.BrushColor = (uint)ColorTranslator.ToOle(Color.DeepSkyBlue);
                //高亮顯示
                //objTrackLayer.AddEvent(objTGeometry, objTStyle, "");

                //查詢第二圖層中包含在*內的記錄集,并高亮顯示
                soRecordset objSRsQuery = objSDatasetVector.QueryEx(objTGeometry, seSpatialQueryMode.scsContaining, "");
                objSRsQuery.MoveFirst();
                for (int j = 1; j <= objSRsQuery.RecordCount; j++)
                {
                    soGeometry objGeometry = objSRsQuery.GetGeometry();
                    objTrackLayer.AddEvent(objGeometry, objSStyle, "");

                    objSRsQuery.MoveNext();
                }

                objFRsQuery.MoveNext();
            }

            //刷新地圖
            superMap.Refresh();
        }
        #endregion
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美va亚洲va国产综合| 国产在线播精品第三| 精品久久久网站| 91精品国产色综合久久ai换脸 | 日韩精品一区第一页| 樱桃国产成人精品视频| 日韩一二三区不卡| 欧美日韩国产电影| 欧美日韩精品久久久| 在线观看国产一区二区| 色综合久久中文综合久久97 | 国产精品久久久久一区| 国产欧美中文在线| 国产精品看片你懂得| 亚洲色图.com| 亚洲欧洲性图库| 综合电影一区二区三区| 欧美激情在线看| 5566中文字幕一区二区电影| 欧美精品v日韩精品v韩国精品v| 88在线观看91蜜桃国自产| 91精品国产福利在线观看| 欧美福利一区二区| 日韩欧美123| 久久男人中文字幕资源站| 亚洲国产精品激情在线观看| 成人免费小视频| 亚洲bt欧美bt精品777| 久久99国产乱子伦精品免费| 国产99一区视频免费| 成人深夜视频在线观看| 日本高清无吗v一区| 欧美一级欧美三级在线观看| 国产欧美中文在线| 亚洲观看高清完整版在线观看| 麻豆一区二区三| 91亚洲男人天堂| 日韩亚洲欧美在线| 中文字幕在线一区免费| 亚洲va国产天堂va久久en| 国产一区二区三区在线观看精品| 国产69精品久久777的优势| 欧美性大战xxxxx久久久| 精品国产乱码久久久久久久| 亚洲色欲色欲www| 国产一区日韩二区欧美三区| 91麻豆精品一区二区三区| 精品国产伦一区二区三区观看体验 | 国产suv一区二区三区88区| 欧美日韩综合在线免费观看| 26uuu久久天堂性欧美| 亚洲一线二线三线视频| 国产老肥熟一区二区三区| 欧美亚洲日本国产| 国产精品大尺度| 国产精品影视天天线| 欧美日韩久久一区| 亚洲精品亚洲人成人网 | 国产精品三级av| 激情伊人五月天久久综合| 欧美日韩一级二级三级| 国产精品视频你懂的| 精东粉嫩av免费一区二区三区| 欧美性猛交xxxx黑人交| 国产精品理伦片| 成人在线视频一区二区| 欧美成人精品3d动漫h| 日韩黄色免费网站| 欧美美女直播网站| 亚洲国产一区视频| 99久精品国产| 中文成人av在线| 国产福利91精品一区二区三区| 日韩欧美国产综合| 免费视频最近日韩| 91.麻豆视频| 日韩av不卡一区二区| 在线电影一区二区三区| 亚洲午夜在线观看视频在线| 色欧美片视频在线观看在线视频| 国产精品国模大尺度视频| 成人动漫一区二区| 国产精品嫩草99a| 91亚洲国产成人精品一区二三| 国产精品大尺度| 色88888久久久久久影院野外| 亚洲嫩草精品久久| 欧美在线你懂的| 日本亚洲视频在线| 久久网这里都是精品| 成人午夜av在线| 一区二区三区不卡在线观看| 一本色道**综合亚洲精品蜜桃冫| 一区二区在线观看不卡| 欧美日韩卡一卡二| 美女视频第一区二区三区免费观看网站 | 日本一区二区成人在线| 成人黄色网址在线观看| 亚洲精品日韩专区silk| 欧美色欧美亚洲另类二区| 日本人妖一区二区| 日韩视频永久免费| 国产精一区二区三区| 国产精品国模大尺度视频| 欧美性极品少妇| 国产精品一区一区| 亚洲制服欧美中文字幕中文字幕| 538在线一区二区精品国产| 免费在线成人网| 欧美大片拔萝卜| 99久久国产综合精品女不卡| 午夜久久久久久久久| 国产亚洲自拍一区| 欧美日韩在线免费视频| 狠狠色综合日日| 一二三区精品视频| 日韩美女天天操| 91久久精品一区二区三区| 久久99久久99| 一区二区成人在线| 久久日韩精品一区二区五区| 色视频成人在线观看免| 国产一区二区三区免费| 亚洲国产一区二区a毛片| 2020日本不卡一区二区视频| 欧美在线播放高清精品| 风间由美一区二区三区在线观看 | 成人性生交大合| 亚洲综合成人在线视频| 26uuu欧美| 欧美日韩精品是欧美日韩精品| 成人免费视频caoporn| 蜜臀久久久久久久| 亚洲永久精品大片| 中文字幕在线不卡| 久久久午夜精品| 欧美一区二区三区色| 在线观看日韩一区| 99久久精品免费精品国产| 国产真实精品久久二三区| 天堂va蜜桃一区二区三区漫画版| 亚洲乱码中文字幕综合| 国产精品免费av| 国产色一区二区| 欧美一区二区高清| 欧美日韩三级一区二区| 91麻豆福利精品推荐| 国产美女在线观看一区| 久久精品国产亚洲高清剧情介绍| 亚洲国产乱码最新视频 | 久久久国产精华| 欧美卡1卡2卡| 欧美日韩一本到| 欧美无砖砖区免费| 日本久久一区二区三区| 色狠狠一区二区| 91精品1区2区| 欧美三级视频在线| 欧美日韩中文字幕一区二区| 欧美在线视频日韩| 欧美精品1区2区| 制服丝袜亚洲网站| 日韩欧美不卡在线观看视频| 欧美精品一二三四| 欧美成va人片在线观看| 日韩一区二区影院| 精品国产91乱码一区二区三区| 欧美精品久久一区| 精品国产凹凸成av人导航| 欧美大片一区二区| 久久精品欧美一区二区三区麻豆| 国产欧美精品一区二区色综合 | 亚洲午夜在线视频| 午夜成人免费视频| 日韩精彩视频在线观看| 黄色精品一二区| 成人午夜精品在线| 91蜜桃在线免费视频| 欧美日韩免费观看一区三区| 91麻豆精品国产91久久久更新时间| 日韩一区二区三区在线| 久久新电视剧免费观看| 亚洲欧美另类小说| 日韩成人午夜电影| 国产精品一区二区果冻传媒| 99精品在线免费| 日韩一区二区三区在线观看| 中文字幕国产精品一区二区| 亚洲制服丝袜av| 国产精品1区2区| 欧美日本一区二区三区| 国产亚洲福利社区一区| 一二三四区精品视频| 国产一区二区日韩精品| 在线欧美日韩国产| 久久青草欧美一区二区三区| 一区二区日韩av| 国产一区二区三区电影在线观看 | 精品写真视频在线观看| 91久久精品日日躁夜夜躁欧美|