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); }
/************************************* 判断两个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); }