public XLayer ReadFile(string filename) { FileStream fsr = new FileStream(filename, FileMode.Open); BinaryReader br = new BinaryReader(fsr); //读文件头 MyFileHeader mfh = (MyFileHeader)XTools.FromBytes(br, typeof(MyFileHeader)); //读图层名称 string name = XTools.ReadString(br); //读属性字段结构 List <XField> fields = ReadFields(mfh.FieldCount, br); //定义图层 SHAPETYPE ShapeType = (SHAPETYPE)Enum.Parse(typeof(SHAPETYPE), mfh.ShapeType.ToString()); XExtent extent = new XExtent( new XVertex(mfh.MinX, mfh.MinY), new XVertex(mfh.MaxX, mfh.MaxY)); XLayer layer = new XLayer(name, ShapeType, extent, fields); //读空间对象类型 for (int i = 0; i < mfh.FeatureCount; i++) { XSpatial spatial = ReadSpatial(ShapeType, br); XAttribute attribute = ReadAttribute(br, fields); layer.AddFeature(new XFeature(spatial, attribute)); } //关闭文件并返回结果 br.Close(); fsr.Close(); return(layer); }
public GISLayer(string _name, SHAPETYPE _shapetype, GISExtent _extent, List <GISField> _fields) { Name = _name; ShapeType = _shapetype; Extent = _extent; Fields = _fields; }
public GISLayer ReadShapefile(string shpfilename) { FileStream fsr = new FileStream(shpfilename, FileMode.Open); //打开shp文件 BinaryReader br = new BinaryReader(fsr); //获取文件流后用二进制读取工具 ShapefileHeader sfh = ReadFileHeader(br); //调用之前的函数 获取头文件 SHAPETYPE ShapeType = (SHAPETYPE)Enum.Parse( //类型整数变对应的枚举值 typeof(SHAPETYPE), sfh.ShapeType.ToString()); GISExtent extent = new GISExtent(sfh.Xmax, sfh.Xmin, sfh.Ymax, sfh.Ymin); GISLayer layer = new GISLayer(shpfilename, ShapeType, extent); //gislayer的构造参数分别是名字 图层类型 范围 while (br.PeekChar() != -1) { RecordHeader rh = ReadRecordHeader(br); int RecordLength = FromBigToLittle(rh.RecordLength) * 2 - 4; byte[] RecordContent = br.ReadBytes(RecordLength);//将记录内容读入字节数组 if (ShapeType == SHAPETYPE.point) { GISPoint onepoint = ReadPoint(RecordContent); GISFeature onefeature = new GISFeature(onepoint, new GISAttribute()); layer.AddFeature(onefeature); } } br.Close(); fsr.Close(); //归还文件权限于操作系统 return(layer); //最后返回一个图层文件 }
public GISLayer(string _name, SHAPETYPE _shapetype, GISExtent _extent) { Name = _name; ShapeType = _shapetype; Extent = _extent; Fields = new List <GISField>(); }
public XLayer ReadShapefile(string shpfilename) { //打开文件和读取工具 FileStream fsr = new FileStream(shpfilename, FileMode.Open); BinaryReader br = new BinaryReader(fsr); //读取文件头 ShapefileHeader sfh = (ShapefileHeader) XTools.FromBytes(br, typeof(ShapefileHeader)); //获得空间对象类型 SHAPETYPE ShapeType = (SHAPETYPE)Enum.Parse(typeof(SHAPETYPE), sfh.ShapeType.ToString()); //获得空间范围 XExtent extent = new XExtent(new XVertex(sfh.Xmin, sfh.Ymin), new XVertex(sfh.Xmax, sfh.Ymax)); //读dbf string dbfFileName = shpfilename.Replace(".shp", ".dbf"); List <XField> fields = new List <XField>(); List <XAttribute> attributes = new List <XAttribute>(); ReadDBFFile(dbfFileName, fields, attributes); //构建图层 XLayer layer = new XLayer(shpfilename, ShapeType, extent, fields); int index = 0; while (br.PeekChar() != -1) { //读记录头 RecordHeader rh = (RecordHeader) XTools.FromBytes(br, typeof(RecordHeader)); int RecordLength = FromBigToLittle(rh.RecordLength) * 2 - 4; byte[] RecordContent = br.ReadBytes(RecordLength); //开始读实际的空间数据 if (ShapeType == SHAPETYPE.point) { XPointSpatial point = ReadPoint(RecordContent); layer.AddFeature(new XFeature(point, attributes[index])); } else if (ShapeType == SHAPETYPE.line) { List <XLineSpatial> lines = ReadLines(RecordContent); foreach (XLineSpatial line in lines) { layer.AddFeature(new XFeature(line, new XAttribute(attributes[index]))); } } else if (ShapeType == SHAPETYPE.polygon) { List <XPolygonSpatial> polygons = ReadPolygons(RecordContent); foreach (XPolygonSpatial polygon in polygons) { layer.AddFeature(new XFeature(polygon, new XAttribute(attributes[index]))); } } index++; } //关闭读取工具和文件 br.Close(); fsr.Close(); return(layer); }
public XLayer(string _Name, SHAPETYPE _ShapeType, XExtent _Extent, List <XField> _Fields) { Name = _Name; ShapeType = _ShapeType; Extent = _Extent; Fields = _Fields; }
static List <GISFeature> ReadFeatures(BinaryReader br, SHAPETYPE ShapeType, List <GISField> Fields, int FeatureCount) { List <GISFeature> Features = new List <GISFeature>(); for (int featureindex = 0; featureindex < FeatureCount; featureindex++) { GISFeature feature = new GISFeature(null, null); if (ShapeType == SHAPETYPE.POINT) { GISVertex _location = ReadVertex(br); feature.spatialpart = new GISPoint(_location); } else if (ShapeType == SHAPETYPE.LINE) { List <GISVertex> vs = new List <GISVertex>(); int vcount = br.ReadInt32(); for (int vc = 0; vc < vcount; vc++) { vs.Add(ReadVertex(br)); } feature.spatialpart = new GISLine(vs); } else if (ShapeType == SHAPETYPE.POLYGON) { List <GISVertex> vs = new List <GISVertex>(); int vcount = br.ReadInt32(); for (int vc = 0; vc < vcount; vc++) { vs.Add(ReadVertex(br)); } feature.spatialpart = new GISPolygon(vs); } GISAttribute ga = new GISAttribute(); for (int fieldindex = 0; fieldindex < Fields.Count; fieldindex++) { GISField field = Fields[fieldindex]; if (field.datatype == typeof(int)) { ga.AddValue(br.ReadInt32()); } else if (field.datatype == typeof(double)) { ga.AddValue(br.ReadDouble()); } else if (field.datatype == typeof(string)) { ga.AddValue(ReadString(br)); } } feature.attributepart = ga; Features.Add(feature); } return(Features); }
public static GISLayer ReadShapefile(string shpfilename) { FileStream fsr = new FileStream(shpfilename, FileMode.Open); //打开shp文件 BinaryReader br = new BinaryReader(fsr); //获取文件流后用二进制读取工具 ShapefileHeader sfh = ReadFileHeader(br); //调用之前的函数 获取头文件 SHAPETYPE ShapeType = (SHAPETYPE)Enum.Parse( //类型整数变对应的枚举值 typeof(SHAPETYPE), sfh.ShapeType.ToString()); GISExtent extent = new GISExtent(sfh.Xmax, sfh.Xmin, sfh.Ymax, sfh.Ymin); string dbffilename = shpfilename.Replace(".shp", ".dbf"); //更改后缀 DataTable table = ReadDBF(dbffilename); GISLayer layer = new GISLayer(shpfilename, ShapeType, extent, ReadFields(table)); //gislayer的构造参数分别是名字 图层类型 范围 *GISField的泛型 int rowindex = 0; //当前读取的记录位置 while (br.PeekChar() != -1) { RecordHeader rh = ReadRecordHeader(br); int RecordLength = FromBigToLittle(rh.RecordLength) * 2 - 4; byte[] RecordContent = br.ReadBytes(RecordLength);//将记录内容读入字节数组 if (ShapeType == SHAPETYPE.point) { GISPoint onepoint = ReadPoint(RecordContent); GISFeature onefeature = new GISFeature(onepoint, ReadAttribute(table, rowindex)); layer.AddFeature(onefeature); } if (ShapeType == SHAPETYPE.line) { List <GISLine> lines = ReadLines(RecordContent); for (int i = 0; i < lines.Count; i++) { GISFeature onefeature = new GISFeature(lines[i], ReadAttribute(table, rowindex)); layer.AddFeature(onefeature); } } if (ShapeType == SHAPETYPE.polygon) { List <GISPolygon> polygons = ReadPolygons(RecordContent); for (int i = 0; i < polygons.Count; i++) { GISFeature onefeature = new GISFeature(polygons[i], ReadAttribute(table, rowindex)); layer.AddFeature(onefeature); } } rowindex++; } br.Close(); fsr.Close(); //归还文件权限于操作系统 return(layer); //最后返回一个图层文件 }
public static GISLayer ReadFile(string filename) { FileStream fsr = new FileStream(filename, FileMode.Open); BinaryReader br = new BinaryReader(fsr); MyFileHeader mfh = (MyFileHeader)(GISTools.FromBytes(br, typeof(MyFileHeader))); //读取文件头 SHAPETYPE ShapeType = (SHAPETYPE)Enum.Parse(typeof(SHAPETYPE), mfh.Shapetype.ToString()); //获取空间实体类型shapetype和 GISExtent Extent = new GISExtent(mfh.MinX, mfh.MaxX, mfh.MinY, mfh.MaxY); //地图范围extent string layername = GISTools.ReadString(br); //读取图层名 List <GISField> Fields = ReadFields(br, mfh.FieldCount); //读取字段信息 GISLayer layer = new GISLayer(layername, ShapeType, Extent, Fields); ReadFeatures(layer, br, mfh.FeatureCount); br.Close(); fsr.Close(); return(layer); }
private XSpatial ReadSpatial(SHAPETYPE shapeType, BinaryReader br) { if (shapeType == SHAPETYPE.point) { return(new XPointSpatial(new XVertex(br))); } if (shapeType == SHAPETYPE.line) { return(new XLineSpatial(ReadMultipleVertexes(br))); } if (shapeType == SHAPETYPE.polygon) { return(new XPolygonSpatial(ReadMultipleVertexes(br))); } return(null); }
public static GISLayer ReadFile(string filename) { FileStream fsr = new FileStream(filename, FileMode.Open); BinaryReader br = new BinaryReader(fsr); MyFileHeader mfh = (MyFileHeader)(FromBytes(br, typeof(MyFileHeader))); SHAPETYPE ShapeType = IntToShapeType(mfh.ShapeType); GISExtent Extent = new GISExtent(new GISVertex(mfh.MinX, mfh.MinY), new GISVertex(mfh.MaxX, mfh.MaxY)); string layername = ReadString(br); List <GISField> Fields = ReadFields(br, mfh.FieldCount); GISLayer layer = new GISLayer(layername, ShapeType, Extent, Fields); layer.DrawAttributeOrNot = (mfh.DrawAttributeOrNot == 1); layer.Features = ReadFeatures(br, ShapeType, Fields, mfh.FeatureCount); br.Close(); fsr.Close(); return(layer); }
static int ShapeTypeToInt(SHAPETYPE st) { if (st == SHAPETYPE.POINT) { return(1); } else if (st == SHAPETYPE.LINE) { return(2); } else if (st == SHAPETYPE.POLYGON) { return(3); } else { return(0); } }
public SelectResult Select(GISVertex vertex, List <GISFeature> features, SHAPETYPE shapetype, GISView view) { if (features.Count == 0) { return(SelectResult.EmptySet); } GISExtent MinSelectExtent = BuildExtent(vertex, view);//建立最小选择范围 switch (shapetype) { case SHAPETYPE.point: Console.WriteLine("point"); return(SelectPoint(vertex, features, view, MinSelectExtent)); case SHAPETYPE.line: Console.WriteLine("line"); return(SelectLine(vertex, features, view, MinSelectExtent)); case SHAPETYPE.polygon: Console.WriteLine("polygon"); return(SelectPolygon(vertex, features, view, MinSelectExtent)); } return(SelectResult.UnknownType); }
public static void ShapeDetected(string shape) { if (PausedOCV) return; LastShape = (SHAPETYPE)int.Parse(shape); if (OpenCVPlugin != null) { var shapePos = OpenCVPlugin.Call<double[]>("GetShapePosition"); LastShapePos = new Vector2((float)shapePos[0], (float)shapePos[1]); } }
public static extern SHAPETYPE INK_RecognizeShape(CGStroke pStroke, int nStrokeCnt, SHAPETYPE inType);
private static extern SHAPETYPE INK_RecognizeShape(CGStroke[] pStroke, int nStrokeCnt, SHAPETYPE inType);
public static GISLayer ReadShapeFile(string shpfilename) { FileStream fsr = new FileStream(shpfilename, FileMode.Open); BinaryReader br = new BinaryReader(fsr); ShapeFileHeader sfh = ReadFileHeader(br); SHAPETYPE ShapeType = SHAPETYPE.POINT; if (sfh.ShapeType == 1) { ShapeType = SHAPETYPE.POINT; } else if (sfh.ShapeType == 3) { ShapeType = SHAPETYPE.LINE; } else if (sfh.ShapeType == 5) { ShapeType = SHAPETYPE.POLYGON; } else { return(null); } GISExtent extent = new GISExtent(new GISVertex(sfh.Xmin, sfh.Ymin), new GISVertex(sfh.Xmax, sfh.Ymax)); string dbffilename = shpfilename.Replace(".shp", ".dbf"); DataTable table = ReadDBF(dbffilename); GISLayer layer = new GISLayer(shpfilename, ShapeType, extent, ReadFields(table)); int rowindex = 0; while (br.PeekChar() != -1) { RecordHeader rh = ReadRecordHeader(br); int RecordLength = FromBigToLittle(rh.RecordLength); byte[] RecordContent = br.ReadBytes(RecordLength * 2 - 4); if (ShapeType == SHAPETYPE.POINT) { GISPoint onepoint = ReadPoint(RecordContent); GISFeature onefeature = new GISFeature(onepoint, ReadAttribute(table, rowindex)); layer.Features.Add(onefeature); } if (ShapeType == SHAPETYPE.LINE) { List <GISLine> lines = ReadLines(RecordContent); for (int i = 0; i < lines.Count; i++) { GISFeature onefeature = new GISFeature(lines[i], ReadAttribute(table, rowindex)); layer.Features.Add(onefeature); } } if (ShapeType == SHAPETYPE.POLYGON) { List <GISPolygon> polygons = ReadPolygons(RecordContent); for (int i = 0; i < polygons.Count; i++) { GISFeature onefeature = new GISFeature(polygons[i], ReadAttribute(table, rowindex)); layer.Features.Add(onefeature); } } rowindex++; //其它代码,用于处理RecordContent } br.Close(); fsr.Close(); return(layer); }
List <GISFeature> Features = new List <GISFeature>(); //私有的 不宜改动 public GISLayer(string _name, SHAPETYPE _shapetype, GISExtent _extent) { Name = _name; ShapeType = _shapetype; Extent = _extent; }
// Use this for initialization private void Start() { Config.World = this.gameObject; var cardMain = GameObject.Find("CardboardMain"); if (cardMain != null) inputGamepad = cardMain.GetComponent<InputGamepad>(); _sides[0] = Instantiate(Resources.Load("Prefabs/Gebirge") as GameObject); _sides[0].transform.parent = this.transform; _sides[0].name = "Gebirge"; _sides[1] = Instantiate(Resources.Load("Prefabs/Dorf") as GameObject); _sides[1].transform.parent = this.transform; _sides[1].name = "Dorf"; _sides[2] = Instantiate(Resources.Load("Prefabs/Eis") as GameObject); _sides[2].transform.parent = this.transform; _sides[2].name = "Eis"; _sides[3] = Instantiate(Resources.Load("Prefabs/Feuer") as GameObject); _sides[3].transform.parent = this.transform; _sides[3].name = "Feuer"; _sides[4] = Instantiate(Resources.Load("Prefabs/Wueste") as GameObject); _sides[4].transform.parent = this.transform; _sides[4].name = "Wueste"; _sides[5] = Instantiate(Resources.Load("Prefabs/Wald") as GameObject); _sides[5].transform.parent = this.transform; _sides[5].name = "Wald"; for (int i = 0; i < _sides.Length; i++) { if (_sides[i] == null) { _sides[i] = Instantiate(Resources.Load("Prefabs/DummySide" + (i)) as GameObject); _sides[i].transform.parent = this.transform; _sides[i].name = "Side" + i; } } //Front Side _sides[0].transform.position = new Vector3(-9.8f, -27, 67.7f); _sides[0].transform.Rotate(new Vector3(-90, 0, 0)); //Back Side _sides[1].transform.position = new Vector3(0, 0, -100); _sides[1].transform.Rotate(new Vector3(90, 0, 0)); //Right _sides[2].transform.position = new Vector3(100, 0, 0); _sides[2].transform.Rotate(new Vector3(0, 0, 90)); //Left _sides[3].transform.position = new Vector3(-150, -6, 176); _sides[3].transform.Rotate(new Vector3(0, 0, -90)); //Top _sides[4].transform.position = new Vector3(0, 100, 0); _sides[4].transform.Rotate(180, 0, 0); //Bottom _sides[5].transform.position = new Vector3(0, -100, 0); // Aufklappen _rotatePoint = _sides[4].transform.position + 100*Vector3.forward; _rotationStep = 0; IsWorldOpen = false; IsWorldOpening = false; _lastShape = SHAPETYPE.Star; }