private System.Drawing.Point[] getScreenPoints(Shapefile_Point[] sourcePoints, int offset, int length, GeographicBoundingBox dstBB, Size dstImageSize) { double degreesPerPixelX = (dstBB.East - dstBB.West) / (double)dstImageSize.Width; double degreesPerPixelY = (dstBB.North - dstBB.South) / (double)dstImageSize.Height; ArrayList screenPointList = new ArrayList(); for(int i = offset; i < offset + length; i++) { double screenX = (sourcePoints[i].X - dstBB.West) / degreesPerPixelX; double screenY = (dstBB.North - sourcePoints[i].Y) / degreesPerPixelY; if(screenPointList.Count > 0) { Point v = (Point)screenPointList[screenPointList.Count - 1]; if(v.X == (int)screenX && v.Y == (int)screenY) { continue; } } screenPointList.Add(new Point((int)screenX, (int)screenY)); } if(screenPointList.Count <= 1) return new Point[] { new Point(0,0), new Point(0,0) }; return (Point[])screenPointList.ToArray(typeof(Point)); }
public override void Initialize(DrawArgs drawArgs) { try { m_Sprite = new Sprite(drawArgs.device); if(m_IconFilePath != null && File.Exists(m_IconFilePath)) { m_IconTexture = ImageHelper.LoadIconTexture(m_IconFilePath); m_IconTextureDescription = m_IconTexture.GetLevelDescription(0); } if(m_ShapeFilePath.ToLower().EndsWith(".zip")) { loadZippedShapeFile(m_ShapeFilePath); } else { loadShapeFile(m_ShapeFilePath); } if((m_ShapeTileArgs.ShowLabels && m_ShapeTileArgs.DataKey != null) || m_IconTexture != null) { foreach(ShapeRecord record in m_ShapeTileArgs.ShapeRecords) { if(record.Value != null) { if(record.Point != null) { Shapefile_Point p = new Shapefile_Point(); p.X = record.Point.X; p.Y = record.Point.Y; p.Tag = record.Value; m_LabelList.Add(p); } else if(record.MultiPoint != null) { Shapefile_Point p = new Shapefile_Point(); p.X = 0.5 * (record.MultiPoint.BoundingBox.West + record.MultiPoint.BoundingBox.East); p.Y = 0.5 * (record.MultiPoint.BoundingBox.North + record.MultiPoint.BoundingBox.South); p.Tag = record.Value; m_LabelList.Add(p); } else if(record.PolyLine != null) { Shapefile_Point p = new Shapefile_Point(); p.X = 0.5 * (record.PolyLine.BoundingBox.West + record.PolyLine.BoundingBox.East); p.Y = 0.5 * (record.PolyLine.BoundingBox.North + record.PolyLine.BoundingBox.South); p.Tag = record.Value; m_LabelList.Add(p); } else if(record.Polygon != null) { Shapefile_Point p = new Shapefile_Point(); p.X = 0.5 * (record.Polygon.BoundingBox.West + record.Polygon.BoundingBox.East); p.Y = 0.5 * (record.Polygon.BoundingBox.North + record.Polygon.BoundingBox.South); p.Tag = record.Value; m_LabelList.Add(p); } } } } } catch(Exception ex) { Log.Write(ex); } finally { isInitialized = true; } }