Exemplo n.º 1
0
        /// <summary>
        ///     Фомирует <see cref="SqlGeometry" /> по <see cref="GeometryZoomedPixelsInfo" />
        /// </summary>
        /// <param name="pixelData"></param>
        /// <returns></returns>
        private SqlGeometry CreateGeometryFromZoomedPixelInfo(GeometryZoomedPixelsInfo pixelData)
        {
            Point point;
            int geomnum, c, i;
            //Point[] points;
            var builder = new SqlGeometryBuilder();
            builder.SetSrid(0);
            OpenGisGeometryType type = pixelData.ShapeType;
            switch (type)
            {
                case OpenGisGeometryType.Point:
                    builder.BeginGeometry(OpenGisGeometryType.Point);
                    point = pixelData.Points[0][0].PixelCoordList[0];
                    builder.BeginFigure(point.X, point.Y);
                    builder.EndFigure();
                    builder.EndGeometry();
                    break;
                case OpenGisGeometryType.MultiPoint:
                    builder.BeginGeometry(OpenGisGeometryType.MultiPoint);
                    geomnum = pixelData.Points.Count;
                    for (i = 0; i < geomnum; i++)
                    {
                        builder.BeginGeometry(OpenGisGeometryType.Point);
                        point = pixelData.Points[i][0].PixelCoordList[0];
                        builder.BeginFigure(point.X, point.Y);
                        builder.EndFigure();
                        builder.EndGeometry();
                    }
                    builder.EndGeometry();
                    break;
                case OpenGisGeometryType.LineString:
                    builder.BeginGeometry(OpenGisGeometryType.LineString);
                    AddFigurePoints(builder, pixelData.Points[0][0].PixelCoordList);
                    builder.EndGeometry();
                    break;

                case OpenGisGeometryType.MultiLineString:
                    geomnum = pixelData.Points.Count;
                    builder.BeginGeometry(OpenGisGeometryType.MultiLineString);
                    for (c = 0; c < geomnum; c++)
                    {
                        builder.BeginGeometry(OpenGisGeometryType.LineString);
                        AddFigurePoints(builder, pixelData.Points[c][0].PixelCoordList);
                        builder.EndGeometry();
                    }
                    builder.EndGeometry();
                    break;
                case OpenGisGeometryType.Polygon:

                    builder.BeginGeometry(OpenGisGeometryType.Polygon);
                    AddRings(builder, pixelData.Points[0]);
                    builder.EndGeometry();
                    break;
                case OpenGisGeometryType.MultiPolygon:
                    geomnum = pixelData.Points.Count;
                    builder.BeginGeometry(OpenGisGeometryType.MultiPolygon);
                    for (i = 0; i < geomnum; i++)
                    {
                        builder.BeginGeometry(OpenGisGeometryType.Polygon);
                        AddRings(builder, pixelData.Points[i]);
                        builder.EndGeometry();
                    }
                    builder.EndGeometry();
                    break;
                case OpenGisGeometryType.GeometryCollection:
                    break;
            }
            SqlGeometry result = builder.ConstructedGeometry;
            if (result.STIsValid()) return result;
            else return result.MakeValid();
        }
Exemplo n.º 2
0
        private GeometryZoomedPixelsInfo ConvertToGeometryZoomedPixelsInfo(GeometryInstanceInfo info, int zoom)
        {
            var result = new GeometryZoomedPixelsInfo();
            var pixelCoordsListList = new List<List<GeometryPixelCoords>>();
            var geomPixCoordsList = new List<GeometryPixelCoords>();
            var coords = new GeometryPixelCoords {InnerRing = false};
            OpenGisGeometryType type = info.ShapeType;
            result.ShapeType = type;
            switch (type)
            {
                case OpenGisGeometryType.Point:
                    PointF[] geopoints = info.Points[0][0].PointList;

                    coords.PixelCoordList = new[]
                        {
                            new Point
                                {
                                    X = _conv.FromLongitudeToXPixel(geopoints[0].X, zoom),
                                    Y = _conv.FromLatitudeToYPixel(geopoints[0].Y, zoom)
                                }
                        };
                    geomPixCoordsList.Add(coords);
                    pixelCoordsListList.Add(geomPixCoordsList);

                    break;

                case OpenGisGeometryType.LineString:

                    coords.PixelCoordList = GetPixelCoords(info.Points[0][0].PointList, zoom);
                    geomPixCoordsList.Add(coords);
                    pixelCoordsListList.Add(geomPixCoordsList);
                    break;
                case OpenGisGeometryType.Polygon:
                    foreach (var list in info.Points)
                        foreach (GeometryPointSequence pointseq in list)
                        {
                            coords.PixelCoordList = GetPixelCoords(pointseq.PointList, zoom);
                            coords.InnerRing = pointseq.InnerRing;
                            geomPixCoordsList.Add(coords);
                        }
                    pixelCoordsListList.Add(geomPixCoordsList);

                    break;
                case OpenGisGeometryType.MultiPoint:
                case OpenGisGeometryType.MultiLineString:
                case OpenGisGeometryType.MultiPolygon:

                    pixelCoordsListList = GetGeometryPixelcoords(info.Points, zoom);
                    break;

                case OpenGisGeometryType.GeometryCollection:
                    GeometryInstanceInfo[] geomColl = info.GeometryInstanceInfoCollection;
                    int n = info.GeometryInstanceInfoCollection.Length;
                    var geomPixZoomInfoCollection = new GeometryZoomedPixelsInfo[n];
                    for (int i = 0; i < n; i++)
                    {
                        var geom = new GeometryZoomedPixelsInfo
                            {
                                ShapeType = geomColl[i].ShapeType,
                                Points = GetGeometryPixelcoords(geomColl[i].Points, zoom)
                            };

                        geomPixZoomInfoCollection[i] = geom;
                    }
                    result.GeometryInstanceInfoCollection = geomPixZoomInfoCollection;
                    break;
            }
            if (type != OpenGisGeometryType.GeometryCollection) result.Points = pixelCoordsListList;
            return result;
        }
Exemplo n.º 3
0
        /// <summary>
        /// Converts to degree coordinates to pixels
        /// Shifts to tile with position numbers equals to zero
        /// </summary>
        /// <param name="info"></param>
        /// <param name="zoom"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        private GeometryZoomedPixelsInfo ConvertToGeometryZoomedPixelsZeroTileShiftedInfo(GeometryInstanceInfo info,
                                                                                          int zoom, int x, int y)
        {
            int tilezeroshiftX = x*TILE_SIZE;
            int tilezeroshiftY = y*TILE_SIZE;
            var result = new GeometryZoomedPixelsInfo();
            var pixelCoordsListList = new List<List<GeometryPixelCoords>>();
            var geomPixCoordsList = new List<GeometryPixelCoords>();
            var coords = new GeometryPixelCoords {InnerRing = false};
            OpenGisGeometryType type = info.ShapeType;
            result.ShapeType = type;
            switch (type)
            {
                case OpenGisGeometryType.Point:
                    PointF[] geopoints = info.Points[0][0].PointList;

                    coords.PixelCoordList = new[]
                        {
                            new Point
                                {
                                    X = _conv.FromLongitudeToXPixel(geopoints[0].X, zoom) - tilezeroshiftX,
                                    Y = _conv.FromLatitudeToYPixel(geopoints[0].Y, zoom) - tilezeroshiftY
                                }
                        };
                    geomPixCoordsList.Add(coords);
                    pixelCoordsListList.Add(geomPixCoordsList);

                    break;

                case OpenGisGeometryType.LineString:

                    coords.PixelCoordList = GetPixelCoordsShifted(info.Points[0][0].PointList, zoom, tilezeroshiftX,
                                                                  tilezeroshiftY);
                    geomPixCoordsList.Add(coords);
                    pixelCoordsListList.Add(geomPixCoordsList);
                    break;
                case OpenGisGeometryType.Polygon:
                    foreach (var list in info.Points)
                        foreach (GeometryPointSequence pointseq in list)
                        {
                            coords.PixelCoordList = GetPixelCoordsShifted(pointseq.PointList, zoom, tilezeroshiftX,
                                                                          tilezeroshiftY);
                            coords.InnerRing = pointseq.InnerRing;
                            geomPixCoordsList.Add(coords);
                        }
                    pixelCoordsListList.Add(geomPixCoordsList);

                    break;
                case OpenGisGeometryType.MultiPoint:
                case OpenGisGeometryType.MultiLineString:
                case OpenGisGeometryType.MultiPolygon:

                    pixelCoordsListList = GetGeometryPixelCoordsShifted(info.Points, zoom, tilezeroshiftX,
                                                                        tilezeroshiftY);
                    break;

                case OpenGisGeometryType.GeometryCollection:
                    GeometryInstanceInfo[] geomColl = info.GeometryInstanceInfoCollection;
                    int n = info.GeometryInstanceInfoCollection.Length;
                    var geomPixZoomInfoCollection = new GeometryZoomedPixelsInfo[n];
                    for (int i = 0; i < n; i++)
                    {
                        var geom = new GeometryZoomedPixelsInfo();
                        geom.ShapeType = geomColl[i].ShapeType;
                        geom.Points = GetGeometryPixelCoordsShifted(geomColl[i].Points, zoom, tilezeroshiftX,
                                                                    tilezeroshiftY);

                        geomPixZoomInfoCollection[i] = geom;
                    }
                    result.GeometryInstanceInfoCollection = geomPixZoomInfoCollection;
                    break;
            }
            if (type != OpenGisGeometryType.GeometryCollection) result.Points = pixelCoordsListList;
            return result;
        }
Exemplo n.º 4
0
        /// <summary>
        ///     Фомирует <see cref="SqlGeometry" /> по <see cref="GeometryZoomedPixelsInfo" />
        /// </summary>
        /// <param name="pixelData"></param>
        /// <returns></returns>
        private SqlGeometry CreateGeometryFromZoomedPixelInfo(GeometryZoomedPixelsInfo pixelData)
        {
            Point point;
            int geomnum, c, i;
            //Point[] points;
            var builder = new SqlGeometryBuilder();
            builder.SetSrid(0);
            OpenGisGeometryType type = pixelData.ShapeType;
            switch (type)
            {
                case OpenGisGeometryType.Point:
                    builder.BeginGeometry(OpenGisGeometryType.Point);
                    point = pixelData.Points[0][0].PixelCoordList[0];
                    builder.BeginFigure(point.X, point.Y);
                    builder.EndFigure();
                    builder.EndGeometry();
                    break;
                case OpenGisGeometryType.MultiPoint:
                    builder.BeginGeometry(OpenGisGeometryType.MultiPoint);
                    geomnum = pixelData.Points.Count;
                    for (i = 0; i < geomnum; i++)
                    {
                        builder.BeginGeometry(OpenGisGeometryType.Point);
                        point = pixelData.Points[i][0].PixelCoordList[0];
                        builder.BeginFigure(point.X, point.Y);
                        builder.EndFigure();
                        builder.EndGeometry();
                    }
                    builder.EndGeometry();
                    break;
                case OpenGisGeometryType.LineString:
                    builder.BeginGeometry(OpenGisGeometryType.LineString);
                    AddFigurePoints(builder, pixelData.Points[0][0].PixelCoordList);
                    builder.EndGeometry();
                    break;

                case OpenGisGeometryType.MultiLineString:
                    geomnum = pixelData.Points.Count;
                    builder.BeginGeometry(OpenGisGeometryType.MultiLineString);
                    for (c = 0; c < geomnum; c++)
                    {
                        builder.BeginGeometry(OpenGisGeometryType.LineString);
                        AddFigurePoints(builder, pixelData.Points[c][0].PixelCoordList);
                        builder.EndGeometry();
                    }
                    builder.EndGeometry();
                    break;
                case OpenGisGeometryType.Polygon:

                    builder.BeginGeometry(OpenGisGeometryType.Polygon);
                    AddRings(builder, pixelData.Points[0]);
                    builder.EndGeometry();
                    break;
                case OpenGisGeometryType.MultiPolygon:
                    geomnum = pixelData.Points.Count;
                    builder.BeginGeometry(OpenGisGeometryType.MultiPolygon);
                    for (i = 0; i < geomnum; i++)
                    {
                        builder.BeginGeometry(OpenGisGeometryType.Polygon);
                        AddRings(builder, pixelData.Points[i]);
                        builder.EndGeometry();
                    }
                    builder.EndGeometry();
                    break;
                case OpenGisGeometryType.GeometryCollection:
                    break;
            }
            SqlGeometry result = builder.ConstructedGeometry;
            if (result.STIsValid()) return result;
            else return result.MakeValid();
        }