コード例 #1
0
        /// <summary>
        /// Converts the multi line string to Well-known Text (WKT) representation.
        /// </summary>
        /// <param name="multiLineString">The multi line string.</param>
        /// <param name="dimension">The dimension of the geometry.</param>
        /// <returns>The converted multi line string.</returns>
        private static String ToWellKnownText(IMultiLineString multiLineString, Int32 dimension)
        {
            StringBuilder builder = new StringBuilder(20 + (dimension == 2 ? 20 : 30) * multiLineString.Sum(lineString => lineString.Count));

            if (dimension == 3)
            {
                builder.Append("MULTILINESTRING Z (");
            }
            else
            {
                builder.Append("MULTILINESTRING (");
            }

            for (Int32 lineStringIndex = 0; lineStringIndex < multiLineString.Count; lineStringIndex++)
            {
                if (lineStringIndex > 0)
                {
                    builder.Append(", ");
                }

                builder.Append("(");
                ConvertCoordinates(builder, multiLineString[lineStringIndex], dimension);
                builder.Append(")");
            }

            builder.Append(")");

            return(builder.ToString());
        }
コード例 #2
0
        /// <summary>
        /// Computes the Well-known Binary (WKB) representation.
        /// </summary>
        /// <param name="geometry">The geometry.</param>
        /// <param name="byteOrder">The byte-order of the conversion.</param>
        /// <param name="geometryModel">The geometry model of the conversion.</param>
        /// <returns>The WKB representation of the <paramref name="geometry" />.</returns>
        private static Byte[] ComputeWellKnownBinary(IMultiLineString geometry, ByteOrder byteOrder, GeometryModel geometryModel)
        {
            Byte[] geometryBytes = new Byte[9 + 4 * geometry.Count + ((geometryModel == GeometryModel.Spatial3D) ? 24 : 16) * geometry.Sum(lineString => lineString.Count)];

            if (byteOrder == ByteOrder.LittleEndian)
            {
                geometryBytes[0] = 1;
            }

            if (geometryModel == GeometryModel.Spatial3D)
            {
                EndianBitConverter.CopyBytes((Int32)WellKnownBinaryTypes.MultiLineStringZ, geometryBytes, 1, byteOrder);
            }
            else
            {
                EndianBitConverter.CopyBytes((Int32)WellKnownBinaryTypes.MultiLineString, geometryBytes, 1, byteOrder);
            }

            EndianBitConverter.CopyBytes(geometry.Count, geometryBytes, 5, byteOrder); // the number of line strings
            Int32 byteIndex = 9;

            for (Int32 i = 0; i < geometry.Count; i++)
            {
                ComputeCoordinateList(geometryBytes, ref byteIndex, byteOrder, geometry[i].Coordinates, geometryModel);
            }

            return(geometryBytes);
        }
コード例 #3
0
        /// <summary>
        /// Converts the multi line string to Well-known Binary (WKB) representation.
        /// </summary>
        /// <param name="geometry">The geometry.</param>
        /// <param name="byteOrder">The byte-order of the conversion.</param>
        /// <param name="dimension">The dimension of the geometry.</param>
        /// <returns>The WKB representation of the <paramref name="geometry" />.</returns>
        private static Byte[] ToWellKnownBinary(IMultiLineString geometry, ByteOrder byteOrder, Int32 dimension)
        {
            Byte[] geometryBytes = new Byte[9 + 4 * geometry.Count + ((dimension == 3) ? 24 : 16) * geometry.Sum(lineString => lineString.Count)];

            if (byteOrder == ByteOrder.LittleEndian)
            {
                geometryBytes[0] = 1;
            }

            if (dimension == 3)
            {
                EndianBitConverter.CopyBytes((Int32)WellKnownBinaryTypes.MultiLineStringZ, geometryBytes, 1, byteOrder);
            }
            else
            {
                EndianBitConverter.CopyBytes((Int32)WellKnownBinaryTypes.MultiLineString, geometryBytes, 1, byteOrder);
            }

            // number of line strings
            EndianBitConverter.CopyBytes(geometry.Count, geometryBytes, 5, byteOrder);
            Int32 byteIndex = 9;

            for (Int32 geometryIndex = 0; geometryIndex < geometry.Count; geometryIndex++)
            {
                ConvertCoordinates(geometryBytes, ref byteIndex, byteOrder, geometry[geometryIndex], dimension);
            }

            return(geometryBytes);
        }