本文整理汇总了C#中WkbByteOrder类的典型用法代码示例。如果您正苦于以下问题:C# WkbByteOrder类的具体用法?C# WkbByteOrder怎么用?C# WkbByteOrder使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
WkbByteOrder类属于命名空间,在下文中一共展示了WkbByteOrder类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Write
/// <summary>
/// Writes a geometry to a byte array using the specified encoding.
/// </summary>
/// <param name="g">The geometry to write</param>
/// <param name="wkbByteOrder">Byte order</param>
/// <returns>WKB representation of the geometry</returns>
public static byte[] Write(IGeometry geometry, WkbByteOrder wkbByteOrder)
{
byte[] result = null;
switch (wkbByteOrder)
{
case WkbByteOrder.Ndr:
result = new WKBWriter(ByteOrder.LittleEndian).Write(geometry);
break;
case WkbByteOrder.Xdr:
result = new WKBWriter(ByteOrder.BigEndian).Write(geometry);
break;
}
return result;
// MemoryStream ms = new MemoryStream();
// BinaryWriter bw = new BinaryWriter(ms);
//
// //Write the byteorder format.
// bw.Write((byte)wkbByteOrder);
//
// //Write the type of this geometry
// WriteType(g, bw, wkbByteOrder);
//
// //Write the geometry
// WriteGeometry(g, bw, wkbByteOrder);
//
// return ms.ToArray();
}
示例2: Write
/// <summary>
/// Writes a geometry to a byte array using the specified encoding.
/// </summary>
/// <param name="g">The geometry to write</param>
/// <param name="wkbByteOrder">Byte order</param>
/// <returns>WKB representation of the geometry</returns>
public static byte[] Write(IGeometry g, WkbByteOrder wkbByteOrder)
{
ByteOrder order;
switch (wkbByteOrder)
{
case WkbByteOrder.Xdr:
order = ByteOrder.BigEndian;
break;
case WkbByteOrder.Ndr:
order = ByteOrder.LittleEndian;
break;
default:
throw new ArgumentOutOfRangeException("wkbByteOrder");
}
WKBWriter wkb = new WKBWriter(order);
return wkb.Write(g);
/*
MemoryStream ms = new MemoryStream();
BinaryWriter bw = new BinaryWriter(ms);
//Write the byteorder format.
bw.Write((byte) wkbByteOrder);
//Write the type of this geometry
WriteType(g, bw, wkbByteOrder);
//Write the geometry
WriteGeometry(g, bw, wkbByteOrder);
return ms.ToArray();
*/
}
示例3: ToBinaryAndBack
private Geometry ToBinaryAndBack(Geometry gIn, WkbByteOrder byteOrder)
{
MemoryStream stream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(stream);
writer.Write(GeometryToWKB.Write(gIn, byteOrder));
BinaryReader reader = new BinaryReader(stream);
stream.Position = 0;
Geometry gOut = GeometryFromWKB.Parse(reader);
return gOut;
}
示例4: WriteDouble
/// <summary>
/// Writes a double to the stream
/// </summary>
/// <param name="value">Value to write</param>
/// <param name="writer">Binary Writer</param>
/// <param name="byteOrder">byteorder</param>
private static void WriteDouble(double value, BinaryWriter writer, WkbByteOrder byteOrder)
{
if (byteOrder == WkbByteOrder.Xdr)
{
byte[] bytes = BitConverter.GetBytes(value);
Array.Reverse(bytes);
writer.Write(BitConverter.ToDouble(bytes, 0));
}
else
writer.Write(value);
}
示例5: ReadDouble
/// <summary>
/// Read double value from reader
/// </summary>
/// <param name="reader">Stream Reader</param>
/// <param name="byteOrder">Byte order</param>
/// <returns>Double value</returns>
private static double ReadDouble(BinaryReader reader, WkbByteOrder byteOrder)
{
if (byteOrder == WkbByteOrder.Xdr)
{
byte[] bytes = BitConverter.GetBytes(reader.ReadDouble());
Array.Reverse(bytes);
return BitConverter.ToDouble(bytes, 0);
}
if (byteOrder == WkbByteOrder.Ndr)
{
return reader.ReadDouble();
}
throw new ArgumentException("Byte order not recognized");
}
示例6: Write
//private const byte WKBByteOrder = 0;
/// <summary>
/// Writes a geometry to a byte array using the specified encoding.
/// </summary>
/// <param name="g">The geometry to write</param>
/// <param name="wkbByteOrder">Byte order</param>
/// <returns>WKB representation of the geometry</returns>
public static byte[] Write(Geometry g, WkbByteOrder wkbByteOrder = WkbByteOrder.Ndr)
{
var ms = new MemoryStream();
var bw = new BinaryWriter(ms);
//Write the byteorder format.
bw.Write((byte) wkbByteOrder);
//Write the type of this geometry
WriteType(g, bw, wkbByteOrder);
//Write the geometry
WriteGeometry(g, bw, wkbByteOrder);
return ms.ToArray();
}
示例7: WriteGeometry
/// <summary>
/// Write the geometry
/// </summary>
/// <param name="geometry">Geometry</param>
/// <param name="writer">BinaryWriter</param>
/// <param name="byteOrder">Byte order</param>
private static void WriteGeometry(IGeometry geometry, BinaryWriter writer, WkbByteOrder byteOrder)
{
if (geometry is IMapPoint)
{
WriteUInt32((uint) WkbGeometryTypes.WkbPoint, writer, byteOrder);
WriteMapPoint(geometry as IMapPoint, writer, byteOrder);
}
else if(geometry is ILinearRing)
{
WriteUInt32((uint)WkbGeometryTypes.WkbLineString, writer, byteOrder);
WriteLineString(geometry as ILineString, writer, byteOrder);
}
else if(geometry is IPolygon)
{
WriteUInt32((uint)WkbGeometryTypes.WkbPolygon, writer, byteOrder);
WritePolygon(geometry as IPolygon, writer, byteOrder);
}
else
{
throw new ArgumentOutOfRangeException("geometry", "Geometry not supported.");
}
}
示例8: CreateWKBMultiPolygon
private static GraphicsPath CreateWKBMultiPolygon(BinaryReader reader, WkbByteOrder byteOrder, Func<System.Windows.Point, System.Windows.Point> geoToPixel)
{
GraphicsPath gp = new GraphicsPath();
// Get the number of Polygons.
int numPolygons = (int)ReadUInt32(reader, byteOrder);
// Loop on the number of polygons.
for (int i = 0; i < numPolygons; i++)
{
// read polygon header
reader.ReadByte();
ReadUInt32(reader, byteOrder);
// TODO: Validate type
// Create the next polygon and add it to the array.
gp.AddPath(CreateWKBPolygon(reader, byteOrder, geoToPixel), false);
}
//Create and return the MultiPolygon.
return gp;
}
示例9: WriteGeometry
/// <summary>
/// Writes the geometry to the binary writer.
/// </summary>
/// <param name="geometry">The geometry to be written.</param>
/// <param name="bWriter"></param>
/// <param name="byteorder">Byte order</param>
private static void WriteGeometry(IGeometry geometry, BinaryWriter bWriter, WkbByteOrder byteorder)
{
switch (geometry.OgcGeometryType)
{
//Write the point.
case OgcGeometryType.Point:
WritePoint((IPoint) geometry, bWriter, byteorder);
break;
case OgcGeometryType.LineString:
var ls = (ILineString) geometry;
WriteLineString(ls, bWriter, byteorder);
break;
case OgcGeometryType.Polygon:
WritePolygon((IPolygon) geometry, bWriter, byteorder);
break;
//Write the Multipoint.
case OgcGeometryType.MultiPoint:
WriteMultiPoint((IMultiPoint) geometry, bWriter, byteorder);
break;
//Write the Multilinestring.
case OgcGeometryType.MultiLineString:
WriteMultiLineString((IMultiLineString) geometry, bWriter, byteorder);
break;
//Write the Multipolygon.
case OgcGeometryType.MultiPolygon:
WriteMultiPolygon((IMultiPolygon) geometry, bWriter, byteorder);
break;
//Write the Geometrycollection.
case OgcGeometryType.GeometryCollection:
WriteGeometryCollection((IGeometryCollection) geometry, bWriter, byteorder);
break;
//If the type is not of the above 7 throw an exception.
default:
throw new ArgumentException("Invalid Geometry Type");
}
}
示例10: WriteGeometryCollection
/// <summary>
/// Writes a geometrycollection.
/// </summary>
/// <param name="gc">The geometrycollection to be written.</param>
/// <param name="bWriter">Stream to write to.</param>
/// <param name="byteorder">Byte order</param>
private static void WriteGeometryCollection(IGeometryCollection gc, BinaryWriter bWriter, WkbByteOrder byteorder)
{
//Get the number of geometries in this geometrycollection.
var num = gc.NumGeometries;
//Write the number of geometries.
WriteUInt32((uint) num, bWriter, byteorder);
//Loop on the number of geometries.
//NOTE: by contract, the first item returned
// from GetEnumerator (i.e. using foreach) is the IGeometryCollection itself!
for (var i = 0; i < num; i++)
{
IGeometry geom = gc.GetGeometryN(i);
//Write the byte-order format of the following geometry.
bWriter.Write((byte) byteorder);
//Write the type of each geometry.
WriteType(geom, bWriter, byteorder);
//Write each geometry.
WriteGeometry(geom, bWriter, byteorder);
}
}
示例11: WriteMultiPolygon
/// <summary>
/// Writes a multipolygon.
/// </summary>
/// <param name="mp">The mulitpolygon to be written.</param>
/// <param name="bWriter">Stream to write to.</param>
/// <param name="byteorder">Byte order</param>
private static void WriteMultiPolygon(IMultiPolygon mp, BinaryWriter bWriter, WkbByteOrder byteorder)
{
//Write the number of polygons.
int num = mp.NumGeometries;
WriteUInt32((uint) num, bWriter, byteorder);
//Loop on the number of polygons.
//NOTE: by contract, the first item returned
// from GetEnumerator (i.e. using foreach) is the IMultiPolygon itself!
for (int i = 0; i < num; i++)
{
IPolygon poly = (IPolygon) mp.GetGeometryN(i);
//Write polygon header
bWriter.Write((byte) byteorder);
WriteUInt32((uint) WKBGeometryType.wkbPolygon, bWriter, byteorder);
//Write each polygon.
WritePolygon(poly, bWriter, byteorder);
}
}
示例12: WriteMultiLineString
/// <summary>
/// Writes a multilinestring.
/// </summary>
/// <param name="mls">The multilinestring to be written.</param>
/// <param name="bWriter">Stream to write to.</param>
/// <param name="byteorder">Byte order</param>
private static void WriteMultiLineString(IMultiLineString mls, BinaryWriter bWriter, WkbByteOrder byteorder)
{
//Write the number of linestrings.
int num = mls.NumGeometries;
WriteUInt32((uint) num, bWriter, byteorder);
//Loop on the number of linestrings.
//NOTE: by contract, the first item returned
// from GetEnumerator (i.e. using foreach) is the IMultiLineString itself!
for (int i = 0; i < num; i++)
{
ILineString ls = (ILineString) mls.GetGeometryN(i);
//Write LineString Header
bWriter.Write((byte)byteorder);
WriteUInt32((uint)WKBGeometryType.wkbLineString, bWriter, byteorder);
//Write each linestring.
WriteLineString(ls, bWriter, byteorder);
}
}
示例13: CreateWKBGeometryCollection
private static Geometry CreateWKBGeometryCollection(BinaryReader reader, WkbByteOrder byteOrder)
{
// The next byte in the array tells the number of geometries in this collection.
int numGeometries = (int) ReadUInt32(reader, byteOrder);
// Create a new array for the geometries.
GeometryCollection geometries = new GeometryCollection();
// Loop on the number of geometries.
for (int i = 0; i < numGeometries; i++)
{
// Call the main create function with the next geometry.
geometries.Collection.Add(Parse(reader));
}
// Create and return the next geometry.
return geometries;
}
示例14: CreateWKBMultiLineString
private static MultiLineString CreateWKBMultiLineString(BinaryReader reader, WkbByteOrder byteOrder)
{
// Get the number of linestrings in this multilinestring.
int numLineStrings = (int) ReadUInt32(reader, byteOrder);
// Create a new array for the linestrings .
MultiLineString mline = new MultiLineString();
// Loop on the number of linestrings.
for (int i = 0; i < numLineStrings; i++)
{
// Read linestring header
reader.ReadByte();
ReadUInt32(reader, byteOrder);
// Create the next linestring and add it to the array.
mline.LineStrings.Add(CreateWKBLineString(reader, byteOrder));
}
// Create and return the MultiLineString.
return mline;
}
示例15: CreateWKBPolygon
private static Polygon CreateWKBPolygon(BinaryReader reader, WkbByteOrder byteOrder)
{
// Get the Number of rings in this Polygon.
int numRings = (int) ReadUInt32(reader, byteOrder);
Debug.Assert(numRings >= 1, "Number of rings in polygon must be 1 or more.");
Polygon shell = new Polygon(CreateWKBLinearRing(reader, byteOrder));
// Create a new array of linearrings for the interior rings.
for (int i = 0; i < (numRings - 1); i++)
shell.InteriorRings.Add(CreateWKBLinearRing(reader, byteOrder));
// Create and return the Poylgon.
return shell;
}