/// <summary> /// Читает запись представляющую полигон. /// </summary> /// <param name="file">Входной поток</param> /// <param name="record">Запись Shape-файла в которую будет помещена прочитанная информация</param> /// <param name="bounds">Ограничивающий прямоугольник, с которым должен пересекаться ограничивающий прямоугольник записи</param> public override bool Read(/*BigEndianBinaryReader*/ Stream file, BoundingRectangle bounds, ShapeFileRecord record) { record.MinX = file.ReadDouble();// ShapeFile.ReadDouble64_LE(stream); record.MinY = file.ReadDouble(); //ShapeFile.ReadDouble64_LE(stream); record.MaxX = file.ReadDouble(); ;// ShapeFile.ReadDouble64_LE(stream); record.MaxY = file.ReadDouble(); ;// ShapeFile.ReadDouble64_LE(stream); int numParts = file.ReadInt32();// ShapeFile.ReadInt32_LE(stream); int numPoints = file.ReadInt32(); //ShapeFile.ReadInt32_LE(stream); if (!ShapeHandler.IsRecordInView(bounds, record)) { file.Seek((long)numPoints * 16 + numParts * 4, SeekOrigin.Current); return false; } for (int i = 0; i < numParts; i++) record.Parts.Add(file.ReadInt32());//ShapeFile.ReadInt32_LE(stream)); for (int i = 0; i < numPoints; i++) { ICoordinate p = PlanimetryEnvironment.NewCoordinate( file.ReadDouble(),//ShapeFile.ReadDouble64_LE(stream), file.ReadDouble());//ShapeFile.ReadDouble64_LE(stream)); record.Points.Add(p); } return true; }
/// <summary> /// Читает запись представляющую полигон. /// </summary> /// <param name="file">Входной поток</param> /// <param name="record">Запись Shape-файла в которую будет помещена прочитанная информация</param> /// <param name="bounds">Ограничивающий прямоугольник, с которым должен пересекаться ограничивающий прямоугольник записи</param> public override bool Read(/*BigEndianBinaryReader*/ Stream file, BoundingRectangle bounds, ShapeFileRecord record) { record.MinX = file.ReadDouble(); // ShapeFile.ReadDouble64_LE(stream); record.MinY = file.ReadDouble(); //ShapeFile.ReadDouble64_LE(stream); record.MaxX = file.ReadDouble();; // ShapeFile.ReadDouble64_LE(stream); record.MaxY = file.ReadDouble();; // ShapeFile.ReadDouble64_LE(stream); int numParts = file.ReadInt32(); // ShapeFile.ReadInt32_LE(stream); int numPoints = file.ReadInt32(); //ShapeFile.ReadInt32_LE(stream); if (!ShapeHandler.IsRecordInView(bounds, record)) { file.Seek((long)numPoints * 16 + numParts * 4, SeekOrigin.Current); return(false); } for (int i = 0; i < numParts; i++) { record.Parts.Add(file.ReadInt32());//ShapeFile.ReadInt32_LE(stream)); } for (int i = 0; i < numPoints; i++) { ICoordinate p = PlanimetryEnvironment.NewCoordinate( file.ReadDouble(), //ShapeFile.ReadDouble64_LE(stream), file.ReadDouble()); //ShapeFile.ReadDouble64_LE(stream)); record.Points.Add(p); } return(true); }
/// <summary> /// Читает запись представляющую точку. /// </summary> /// <param name="file">Входной поток</param> /// <param name="record">Запись Shape-файла в которую будет помещена прочитанная информация</param> /// <param name="bounds">Ограничивающий прямоугольник, с которым должен пересекаться ограничивающий прямоугольник записи</param> public override bool Read(/*BigEndianBinaryReader*/ Stream file, BoundingRectangle bounds, ShapeFileRecord record) { ICoordinate p = PlanimetryEnvironment.NewCoordinate(0, 0); p.X = file.ReadDouble(); // ShapeFile.ReadDouble64_LE(stream); p.Y = file.ReadDouble(); // ShapeFile.ReadDouble64_LE(stream); if (bounds != null && !bounds.IsEmpty() && !bounds.ContainsPoint(p)) { return(false); } record.Points.Add(p); record.MinX = p.X; record.MinY = p.Y; record.MaxX = record.MinX; record.MaxY = record.MinY; return(true); }
/// <summary> /// Читать потока данные по геометрическому объекту и заполнять запись shape-файла /// </summary> /// <param name="file">Входной поток для чтения</param> /// <param name="bounds">Ограничивающий прямоугольник, с которым должен пересекаться ограничивающий прямоугольник записи</param> /// <param name="Record">Запись Shape-файла в которую будет помещена прочитанная информация</param> /// <returns>Успешность операции</returns> public abstract bool Read(Stream file, BoundingRectangle bounds, ShapeFileRecord Record);
//建立表 private void button2_Click(object sender, RoutedEventArgs e) { ShapeFileRecord record1 = shapeFileReader.Records[0]; Graphic g1 = record1.ToGraphic(); if (g1 != null) { FeatureSet fs1 = new FeatureSet(); fs1.Features.Add(g1); string json1 = fs1.ToJson(); JsonObject jsonObj1 = JsonObject.Parse(json1) as JsonObject; if (jsonObj1.ContainsKey("features")) { JsonValue jsonFea1 = jsonObj1["features"]; if (jsonFea1 is JsonArray) { if (jsonFea1[0].ContainsKey("attributes")) { JsonValue jsonAtt1 = jsonFea1[0]["attributes"]; JsonObject jsonAO1 = jsonAtt1 as JsonObject; ArrayOfString Names = new ArrayOfString(); ArrayOfString Types = new ArrayOfString(); //获取名 foreach (string name in jsonAO1.Keys) { Names.Add(name); names += "," + name; } Names.Add("Json"); names += ",Json"; //获取属性类型 foreach (JsonValue item in jsonAO1.Values) { switch (item.JsonType) { case JsonType.String: Types.Add((typeof(String)).ToString()); break; case JsonType.Number: Types.Add((typeof(Double)).ToString()); break; case JsonType.Boolean: Types.Add((typeof(Boolean)).ToString()); break; case JsonType.Array: Types.Add((typeof(Array)).ToString()); break; case JsonType.Object: Types.Add((typeof(Object)).ToString()); break; default: MessageBox.Show("未识别类型"); break; } } Types.Add("Json"); MyWebService1SoapClient MyClient1 = new MyWebService1SoapClient(); MyClient1.DynamicAccessCompleted += new EventHandler <System.ComponentModel.AsyncCompletedEventArgs>(MyClient1_DynamicAccessCompleted); MyClient1.DynamicAccessAsync(textBox1.Text + ".mdb", textBox2.Text, Names, Types); } } } } }