/// <summary> /// Read a shapefile Polygon record. /// </summary> /// <param name="stream">Input stream.</param> /// <param name="record">Shapefile record to be updated.</param> private static void ReadPolygon(Stream stream, ShapeFileRecord record) { // Bounding Box. record.XMin = ShapeFile.ReadDouble64_LE(stream); record.YMin = ShapeFile.ReadDouble64_LE(stream); record.XMax = ShapeFile.ReadDouble64_LE(stream); record.YMax = ShapeFile.ReadDouble64_LE(stream); // Num Parts and Points. int numParts = ShapeFile.ReadInt32_LE(stream); int numPoints = ShapeFile.ReadInt32_LE(stream); // Parts. for (int i = 0; i < numParts; i++) { record.Parts.Add(ShapeFile.ReadInt32_LE(stream)); } // Points. for (int i = 0; i < numPoints; i++) { Point p = new Point(); p.X = ShapeFile.ReadDouble64_LE(stream); p.Y = ShapeFile.ReadDouble64_LE(stream); record.Points.Add(p); } }
public static ESRI.ArcGIS.Client.Geometry.Envelope GetExtent(this ShapeFile shapeFile) { Envelope env = new Envelope(leftMostPoint, topMostPoint, rightMostPoint, bottomMostPoint); if (topMostPoint >= -90 && topMostPoint <= 90) { env.SpatialReference = new SpatialReference(4326); } return(env); }
/// <summary> /// Read a shapefile Point record. /// </summary> /// <param name="stream">Input stream.</param> /// <param name="record">Shapefile record to be updated.</param> private static void ReadPoint(Stream stream, ShapeFileRecord record) { // Points - add a single point. Point p = new System.Windows.Point(); p.X = ShapeFile.ReadDouble64_LE(stream); p.Y = ShapeFile.ReadDouble64_LE(stream); record.Points.Add(p); // Bounding Box. record.XMin = p.X; record.YMin = p.Y; record.XMax = record.XMin; record.YMax = record.YMin; }
/// <summary> /// Read a shapefile record. /// </summary> /// <param name="stream">Input stream.</param> public ShapeFileRecord ReadShapeFileRecord(Stream stream) { ShapeFileRecord record = new ShapeFileRecord(); // Record Header. record.RecordNumber = ShapeFile.ReadInt32_BE(stream); record.ContentLength = ShapeFile.ReadInt32_BE(stream); // Shape Type. record.ShapeType = ShapeFile.ReadInt32_LE(stream); // Read the shape geometry, depending on its type. switch (record.ShapeType) { case ( int )ShapeType.NullShape: // Do nothing. break; case ( int )ShapeType.Point: ShapeFile.ReadPoint(stream, record); break; case ( int )ShapeType.PolyLine: // PolyLine has exact same structure as Polygon in shapefile. ShapeFile.ReadPolygon(stream, record); break; case ( int )ShapeType.Polygon: ShapeFile.ReadPolygon(stream, record); break; case ( int )ShapeType.Multipoint: ShapeFile.ReadMultipoint(stream, record); break; default: { string msg = String.Format(System.Globalization.CultureInfo.InvariantCulture, "ShapeType {0} is not supported.", ( int )record.ShapeType); throw new NotSupportedException(msg); } } // Add the record to our internal list. this.records.Add(record); return(record); }
/// <summary> /// Read the file header of the shapefile. /// </summary> /// <param name="stream">Input stream.</param> public void ReadShapeFileHeader(Stream stream) { // File Code. this.fileHeader.FileCode = ShapeFile.ReadInt32_BE(stream); if (this.fileHeader.FileCode != ShapeFile.expectedFileCode) { string msg = String.Format(System.Globalization.CultureInfo.InvariantCulture, "Invalid FileCode encountered. Expecting {0}.", ShapeFile.expectedFileCode); throw new NotSupportedException(msg); } // 5 unused values. ShapeFile.ReadInt32_BE(stream); ShapeFile.ReadInt32_BE(stream); ShapeFile.ReadInt32_BE(stream); ShapeFile.ReadInt32_BE(stream); ShapeFile.ReadInt32_BE(stream); // File Length. this.fileHeader.FileLength = ShapeFile.ReadInt32_BE(stream); // Version. this.fileHeader.Version = ShapeFile.ReadInt32_LE(stream); // Shape Type. this.fileHeader.ShapeType = ShapeFile.ReadInt32_LE(stream); // Bounding Box. this.fileHeader.XMin = ShapeFile.ReadDouble64_LE(stream); this.fileHeader.YMin = ShapeFile.ReadDouble64_LE(stream); this.fileHeader.XMax = ShapeFile.ReadDouble64_LE(stream); this.fileHeader.YMax = ShapeFile.ReadDouble64_LE(stream); // Adjust the bounding box in case it is too small. if (Math.Abs(this.fileHeader.XMax - this.fileHeader.XMin) < 1) { this.fileHeader.XMin -= 5; this.fileHeader.XMax += 5; } if (Math.Abs(this.fileHeader.YMax - this.fileHeader.YMin) < 1) { this.fileHeader.YMin -= 5; this.fileHeader.YMax += 5; } // Skip the rest of the file header. stream.Seek(100, SeekOrigin.Begin); }
public object[] LoadShapeFile() { //Create the dialog allowing the user to select the "*.shp" and the "*.dbf" files Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog(); ofd.Filter = "ESRI Shapefiles (*.shp)|*.shp"; //ofd.Multiselect = true; if (ofd.ShowDialog().Value) { //Get the file info objects for the SHP and the DBF file selected by the user FileInfo shapeFile = new FileInfo(ofd.FileName); FileInfo dbfFile = new FileInfo(ofd.FileName.ToLower().Replace(".shp", ".dbf")); if (!dbfFile.Exists) { System.Windows.MessageBox.Show("Associated DBF file not found"); return null; } foreach (string fname in ofd.FileNames) { FileInfo fi = new FileInfo(fname); if (fi.Extension.ToLower() == ".shp") { shapeFile = fi; } if (fi.Extension.ToLower() == ".dbf") { dbfFile = fi; } } //Read the SHP and DBF files into the ShapeFileReader ShapeFileReader.ShapeFile shapeFileReader = new ShapeFileReader.ShapeFile(); if (shapeFile != null && dbfFile != null) { shapeFileReader.Read(shapeFile, dbfFile); } else { System.Windows.MessageBox.Show("Please select a SP and a DBF file to proceed."); return null; } GraphicsLayer graphicsLayer = myMap.Layers[layerId.ToString()] as GraphicsLayer; if (graphicsLayer == null) { graphicsLayer = new GraphicsLayer(); graphicsLayer.ID = layerId.ToString(); myMap.Layers.Add(graphicsLayer); } int recCount = shapeFileReader.Records.Count; int rgbFactor = 255 / recCount; int counter = 0; //int minPoints = shapeFileReader.Records.Min(record => record.NumberOfPoints); //double meanPoints = shapeFileReader.Records.Average(record => record.NumberOfPoints); foreach (ShapeFileReader.ShapeFileRecord record in shapeFileReader.Records) { Graphic graphic = record.ToGraphic(); if (graphic != null) { graphic.Symbol = GetFillSymbol(new SolidColorBrush(Color.FromArgb(240, 255, 255, 255))); graphicsLayer.Graphics.Add(graphic); } counter += rgbFactor; } Envelope shapeFileExtent = shapeFileReader.GetExtent(); if (shapeFileExtent.SpatialReference == null) { myMap.Extent = shapeFileExtent; } else { if (shapeFileExtent.SpatialReference.WKID == 4326) { myMap.Extent = new Envelope(ESRI.ArcGIS.Client.Bing.Transform.GeographicToWebMercator(new MapPoint(shapeFileExtent.XMin, shapeFileExtent.YMin)), ESRI.ArcGIS.Client.Bing.Transform.GeographicToWebMercator(new MapPoint(shapeFileExtent.XMax, shapeFileExtent.YMax))); } } graphicsLayer.RenderingMode = GraphicsLayerRenderingMode.Static; return new object[] { ofd.FileName, graphicsLayer.Graphics[0].Attributes }; } else return null; }
//private void ColorBlendCombo_SelectionChanged(object sender, SelectionChangedEventArgs e) //{ //if (ColorBlendCombo != null) //{ // _colorShadeIndex = ColorBlendCombo.SelectedIndex; // if (loadedData != null) // { // SetShapeRangeValues(); // } //} //} //private void ClassCountCombo_SelectionChanged(object sender, SelectionChangedEventArgs e) //{ //if (ClassCountCombo != null) //{ // ComboBoxItem item = ClassCountCombo.SelectedItem as ComboBoxItem; // _classCount = Convert.ToInt32(item.Content); // if (loadedData != null) // { // SetShapeRangeValues(); // } //} //} public object[] LoadShapeFile(string fileName) { if (!string.IsNullOrEmpty(fileName)) { //Get the file info objects for the SHP and the DBF file selected by the user FileInfo shapeFile = new FileInfo(fileName); FileInfo dbfFile = new FileInfo(fileName.ToLower().Replace(".shp", ".dbf")); if (!dbfFile.Exists) { System.Windows.MessageBox.Show("Associated DBF file not found"); return null; } //Read the SHP and DBF files into the ShapeFileReader ShapeFileReader.ShapeFile shapeFileReader = new ShapeFileReader.ShapeFile(); if (shapeFile != null && dbfFile != null) { shapeFileReader.Read(shapeFile, dbfFile); } else { System.Windows.MessageBox.Show("Please select a SP and a DBF file to proceed."); return null; } GraphicsLayer graphicsLayer = myMap.Layers[layerId.ToString()] as GraphicsLayer; if (graphicsLayer == null) { graphicsLayer = new GraphicsLayer(); graphicsLayer.ID = layerId.ToString(); myMap.Layers.Add(graphicsLayer); } int recCount = shapeFileReader.Records.Count; int rgbFactor = 255 / recCount; int counter = 0; foreach (ShapeFileReader.ShapeFileRecord record in shapeFileReader.Records) { Graphic graphic = record.ToGraphic(); if (graphic != null) { graphic.Symbol = GetFillSymbol(new SolidColorBrush(Color.FromArgb(240, 255, 255, 255))); graphicsLayer.Graphics.Add(graphic); } counter += rgbFactor; } if (graphicsLayer.FullExtent == null) { Envelope shapeFileExtent = shapeFileReader.GetExtent(); if (shapeFileExtent.SpatialReference == null) { myMap.Extent = shapeFileExtent; } else { if (shapeFileExtent.SpatialReference.WKID == 4326) { myMap.Extent = new Envelope(ESRI.ArcGIS.Client.Bing.Transform.GeographicToWebMercator(new MapPoint(shapeFileExtent.XMin, shapeFileExtent.YMin)), ESRI.ArcGIS.Client.Bing.Transform.GeographicToWebMercator(new MapPoint(shapeFileExtent.XMax, shapeFileExtent.YMax))); } } } else { myMap.Extent = graphicsLayer.FullExtent; } graphicsLayer.RenderingMode = GraphicsLayerRenderingMode.Static; return new object[] { fileName, graphicsLayer.Graphics[0].Attributes }; } else return null; }
override public object[] Load(string boundrySourceLocation) { if (!string.IsNullOrEmpty(boundrySourceLocation)) { FileInfo shapeFile = new FileInfo(boundrySourceLocation); string directoryName = System.IO.Path.GetDirectoryName(boundrySourceLocation); string dbfFilename = System.IO.Path.GetFileName(boundrySourceLocation).ToLowerInvariant().Replace(".shp", ".dbf"); string dbfFullPath = System.IO.Path.Combine(directoryName, dbfFilename); FileInfo dbfFile = new FileInfo(dbfFullPath); if (!dbfFile.Exists) { System.Windows.MessageBox.Show("Associated DBF file not found"); return(null); } ShapeFileReader.ShapeFile shapeFileReader = new ShapeFileReader.ShapeFile(); if (shapeFile != null && dbfFile != null) { try { shapeFileReader.Read(shapeFile, dbfFile); } catch (NotSupportedException e) { System.Windows.MessageBox.Show(e.Message); return(null); } catch { System.Windows.MessageBox.Show(DashboardSharedStrings.DASHBOARD_MAP_N_POLYGONS_EXCEEDED); return(null); } } else { System.Windows.MessageBox.Show("Please select a SP and a DBF file to proceed."); return(null); } GraphicsLayer graphicsLayer = GetGraphicsLayer(); if (graphicsLayer == null) { graphicsLayer = new GraphicsLayer(); graphicsLayer.ID = LayerId.ToString(); ArcGIS_Map.Layers.Add(graphicsLayer); int recCount = shapeFileReader.Records.Count; int rgbFactor = 255 / recCount; int counter = 0; foreach (ShapeFileReader.ShapeFileRecord record in shapeFileReader.Records) { Graphic graphic = record.ToGraphic(); if (graphic != null) { graphic.Symbol = GetFillSymbol(new SolidColorBrush(Color.FromArgb(240, 255, 255, 255))); graphicsLayer.Graphics.Add(graphic); } counter += rgbFactor; } } if (graphicsLayer.FullExtent == null) { Envelope shapeFileExtent = shapeFileReader.GetExtent(); if (shapeFileExtent.SpatialReference == null) { ArcGIS_Map.Extent = shapeFileExtent; } else { if (shapeFileExtent.SpatialReference.WKID == 4326) { ArcGIS_Map.Extent = new Envelope( ESRI.ArcGIS.Client.Bing.Transform.GeographicToWebMercator(new MapPoint(shapeFileExtent.XMin, shapeFileExtent.YMin)), ESRI.ArcGIS.Client.Bing.Transform.GeographicToWebMercator(new MapPoint(shapeFileExtent.XMax, shapeFileExtent.YMax))); } } } else { ArcGIS_Map.Extent = graphicsLayer.FullExtent; } graphicsLayer.RenderingMode = GraphicsLayerRenderingMode.Static; return(new object[] { boundrySourceLocation, graphicsLayer.Graphics[0].Attributes }); } else { return(null); } }
public void RenderShape(string fileName) { this.fileName = fileName; GraphicsLayer shapeLayer = myMap.Layers[layerId.ToString()] as GraphicsLayer; if (shapeLayer != null) { myMap.Layers.Remove(shapeLayer); } shapeLayer = new GraphicsLayer(); shapeLayer.ID = layerId.ToString(); myMap.Layers.Add(shapeLayer); //Get the file info objects for the SHP and the DBF file selected by the user FileInfo shapeFile = new FileInfo(fileName); string directoryName = Path.GetDirectoryName(fileName); string dbfFilename = Path.GetFileName(fileName).ToLowerInvariant().Replace(".shp", ".dbf"); string dbfFullPath = Path.Combine(directoryName, dbfFilename); FileInfo dbfFile = new FileInfo(dbfFullPath); if (!dbfFile.Exists) { System.Windows.MessageBox.Show("Associated DBF file not found"); return; } //Read the SHP and DBF files into the ShapeFileReader ShapeFileReader.ShapeFile shapeFileReader = new ShapeFileReader.ShapeFile(); if (shapeFile != null && dbfFile != null) { try { shapeFileReader.Read(shapeFile, dbfFile); } catch (NotSupportedException e) { System.Windows.MessageBox.Show(e.Message); return; } catch { System.Windows.MessageBox.Show(DashboardSharedStrings.DASHBOARD_MAP_N_POLYGONS_EXCEEDED); return; } } else { System.Windows.MessageBox.Show("Associated DBF file not found"); return; } int recCount = shapeFileReader.Records.Count; int rgbFactor = 255 / recCount; int counter = 0; foreach (ShapeFileReader.ShapeFileRecord record in shapeFileReader.Records) { Graphic graphic = record.ToGraphic(); if (graphic != null) { graphic.Symbol = GetFillSymbol(new SolidColorBrush(Color.FromArgb(192, 255, 255, 255))); shapeLayer.Graphics.Add(graphic); } counter += rgbFactor; } Envelope shapeFileExtent = shapeFileReader.GetExtent(); if (shapeFileExtent.SpatialReference == null) { myMap.Extent = shapeFileExtent; } else { if (shapeFileExtent.SpatialReference.WKID == 4326) { myMap.Extent = new Envelope(ESRI.ArcGIS.Client.Bing.Transform.GeographicToWebMercator(new MapPoint(shapeFileExtent.XMin, shapeFileExtent.YMin)), ESRI.ArcGIS.Client.Bing.Transform.GeographicToWebMercator(new MapPoint(shapeFileExtent.XMax, shapeFileExtent.YMax))); } } }
public void RenderShape(string fileName) { this.fileName = fileName; GraphicsLayer shapeLayer = myMap.Layers[layerId.ToString()] as GraphicsLayer; if (shapeLayer != null) { myMap.Layers.Remove(shapeLayer); } shapeLayer = new GraphicsLayer(); shapeLayer.ID = layerId.ToString(); myMap.Layers.Add(shapeLayer); //Get the file info objects for the SHP and the DBF file selected by the user FileInfo shapeFile = new FileInfo(fileName); FileInfo dbfFile = new FileInfo(fileName.ToLower().Replace(".shp", ".dbf")); if (!dbfFile.Exists) { System.Windows.MessageBox.Show("Associated DBF file not found"); return; } //Read the SHP and DBF files into the ShapeFileReader ShapeFileReader.ShapeFile shapeFileReader = new ShapeFileReader.ShapeFile(); if (shapeFile != null && dbfFile != null) { shapeFileReader.Read(shapeFile, dbfFile); } else { System.Windows.MessageBox.Show("Associated DBF file not found"); return; } int recCount = shapeFileReader.Records.Count; int rgbFactor = 255 / recCount; int counter = 0; foreach (ShapeFileReader.ShapeFileRecord record in shapeFileReader.Records) { Graphic graphic = record.ToGraphic(); if (graphic != null) { graphic.Symbol = GetFillSymbol(new SolidColorBrush(Color.FromArgb(192, 255, 255, 255))); shapeLayer.Graphics.Add(graphic); } counter += rgbFactor; } Envelope shapeFileExtent = shapeFileReader.GetExtent(); if (shapeFileExtent.SpatialReference == null) { myMap.Extent = shapeFileExtent; } else { if (shapeFileExtent.SpatialReference.WKID == 4326) { myMap.Extent = new Envelope(ESRI.ArcGIS.Client.Bing.Transform.GeographicToWebMercator(new MapPoint(shapeFileExtent.XMin, shapeFileExtent.YMin)), ESRI.ArcGIS.Client.Bing.Transform.GeographicToWebMercator(new MapPoint(shapeFileExtent.XMax, shapeFileExtent.YMax))); } } }
public object[] LoadShapeFile() { //Create the dialog allowing the user to select the "*.shp" and the "*.dbf" files Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog(); ofd.Filter = "ESRI Shapefiles (*.shp)|*.shp"; //ofd.Multiselect = true; if (ofd.ShowDialog().Value) { //Get the file info objects for the SHP and the DBF file selected by the user FileInfo shapeFile = new FileInfo(ofd.FileName); string directoryName = System.IO.Path.GetDirectoryName(ofd.FileName); string dbfFilename = System.IO.Path.GetFileName(ofd.FileName).ToLowerInvariant().Replace(".shp", ".dbf"); string dbfFullPath = System.IO.Path.Combine(directoryName, dbfFilename); FileInfo dbfFile = new FileInfo(dbfFullPath); if (!dbfFile.Exists) { System.Windows.MessageBox.Show("Associated DBF file not found"); return(null); } foreach (string fname in ofd.FileNames) { FileInfo fi = new FileInfo(fname); if (fi.Extension.ToLowerInvariant() == ".shp") { shapeFile = fi; } if (fi.Extension.ToLowerInvariant() == ".dbf") { dbfFile = fi; } } //Read the SHP and DBF files into the ShapeFileReader ShapeFileReader.ShapeFile shapeFileReader = new ShapeFileReader.ShapeFile(); if (shapeFile != null && dbfFile != null) { try { shapeFileReader.Read(shapeFile, dbfFile); } catch (NotSupportedException e) { System.Windows.MessageBox.Show(e.Message); return(null); } catch { System.Windows.MessageBox.Show(DashboardSharedStrings.DASHBOARD_MAP_N_POLYGONS_EXCEEDED); return(null); } } else { System.Windows.MessageBox.Show("Please select a SP and a DBF file to proceed."); return(null); } GraphicsLayer graphicsLayer = myMap.Layers[layerId.ToString()] as GraphicsLayer; if (graphicsLayer == null) { graphicsLayer = new GraphicsLayer(); graphicsLayer.ID = layerId.ToString(); myMap.Layers.Add(graphicsLayer); } int recCount = shapeFileReader.Records.Count; int rgbFactor = 255 / recCount; int counter = 0; foreach (ShapeFileReader.ShapeFileRecord record in shapeFileReader.Records) { Graphic graphic = record.ToGraphic(); if (graphic != null) { graphic.Symbol = GetFillSymbol(new SolidColorBrush(Color.FromArgb(192, 255, 255, 255))); graphicsLayer.Graphics.Add(graphic); } counter += rgbFactor; } Envelope shapeFileExtent = shapeFileReader.GetExtent(); if (shapeFileExtent.SpatialReference == null) { myMap.Extent = shapeFileExtent; } else { if (shapeFileExtent.SpatialReference.WKID == 4326) { myMap.Extent = new Envelope(ESRI.ArcGIS.Client.Bing.Transform.GeographicToWebMercator(new MapPoint(shapeFileExtent.XMin, shapeFileExtent.YMin)), ESRI.ArcGIS.Client.Bing.Transform.GeographicToWebMercator(new MapPoint(shapeFileExtent.XMax, shapeFileExtent.YMax))); } } return(new object[] { ofd.FileName, graphicsLayer.Graphics[0].Attributes }); } else { return(null); } }