Ejemplo n.º 1
0
    public bool Insert(Feature f)
    {
        bool     result = false;
        NoteData data   = new NoteData();

        data.fea = f;
        var geo = data.fea.GetGeometryRef();

        Assert.IsNotNull(geo);
        OSGeo.OGR.Envelope envogr = new OSGeo.OGR.Envelope();
        geo.GetEnvelope(envogr);
        Enyim.Collections.Envelope env = new Enyim.Collections.Envelope(envogr.MinX, envogr.MinY, envogr.MaxX, envogr.MaxY);
        envogr.Dispose();
        RTreeNode <NoteData> node = new RTreeNode <NoteData>(data, env);

        tree.Insert(node, env);
        result = true;
        return(result);
    }
Ejemplo n.º 2
0
        /************************************* 判断两个Featuer是否重复 *************************************************/
        /// <summary>
        /// 判断两个Featuer是否重复,ori 当前Feat,next 目标Feat
        /// </summary>
        /// <param name="ori"></param>
        /// <param name="next"></param>
        /// <returns></returns>
        public static bool isSame(OSGeo.OGR.Feature ori, OSGeo.OGR.Feature next, double fanWei = 0.1)
        {
            OSGeo.OGR.Ogr.RegisterAll();
            OSGeo.OGR.Geometry oriGeom = ori.GetGeometryRef();
            OSGeo.OGR.Envelope oriEnve = new OSGeo.OGR.Envelope();
            oriGeom.GetEnvelope(oriEnve);
            OSGeo.OGR.Geometry nextGeom = next.GetGeometryRef();
            OSGeo.OGR.Envelope nextEnve = new OSGeo.OGR.Envelope();
            nextGeom.GetEnvelope(nextEnve);
            double oriArea  = oriGeom.GetArea();
            double nextArea = nextGeom.GetArea();
            bool   res      =
                Math.Abs(oriEnve.MaxX - nextEnve.MaxX) < fanWei && //外接矩形差
                Math.Abs(oriEnve.MaxY - nextEnve.MaxY) < fanWei &&
                Math.Abs(oriEnve.MinX - nextEnve.MinX) < fanWei &&
                Math.Abs(oriEnve.MinY - nextEnve.MinY) < fanWei;

            //面积?    && Math.Abs(oriArea - nextArea) < 0.1;
            oriGeom.Dispose();
            oriEnve.Dispose();
            nextGeom.Dispose();
            nextEnve.Dispose();
            return(res);
        }