本文整理匯總了C#中SharpMap.Map.WorldToImage方法的典型用法代碼示例。如果您正苦於以下問題:C# Map.WorldToImage方法的具體用法?C# Map.WorldToImage怎麽用?C# Map.WorldToImage使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類SharpMap.Map
的用法示例。
在下文中一共展示了Map.WorldToImage方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C#代碼示例。
示例1: InitializeMap
public static Map InitializeMap(float angle)
{
string wmsUrl = "http://dev:8080/geoserver/ows?service=wms&version=1.1.1&request=GetCapabilities";
Map map = new Map();
WmsLayer layWms = new WmsLayer("Demis Map", wmsUrl);
layWms.AddLayer("sf:roads");
//layWms.AddLayer("Topography");
//layWms.AddLayer("Hillshading");
layWms.SetImageFormat(layWms.OutputFormats[0]);
layWms.ContinueOnError = true;
//Skip rendering the WMS Map if the server couldn't be requested (if set to false such an event would crash the app)
layWms.TimeOut = 5000; //Set timeout to 5 seconds
layWms.SRID = 4326;
map.Layers.Add(layWms);
//limit the zoom to 360 degrees width
map.MaximumZoom = 360;
map.BackColor = Color.LightBlue;
map.Zoom = 360;
map.Center = new Point(0, 0);
Matrix mat = new Matrix();
mat.RotateAt(angle, map.WorldToImage(map.Center));
map.MapTransform = mat;
map.ZoomToExtents();
return map;
}
示例2: InitializeDXF
private static Map InitializeDXF(float angle)
{
Map map = new Map();
//Set the datasource to a shapefile in the App_data folder
Ogr provider;
try
{
provider = new Ogr("GeoData/SampleDXF.dxf",0);
}
catch (TypeInitializationException ex)
{
if (ex.Message == "The type initializer for 'OSGeo.OGR.Ogr' threw an exception.")
{
throw new Exception(
String.Format(
"The application threw a PINVOKE exception. You probably need to copy the unmanaged dll's to your bin directory. They are a part of fwtools {0}. You can download it from: http://home.gdal.org/fwtools/",
GdalRasterLayer.FWToolsVersion));
}
throw;
}
VectorLayer lay = new VectorLayer("SampleDXF", provider);
map.Layers.Add(lay);
map.ZoomToExtents();
Matrix mat = new Matrix();
mat.RotateAt(angle, map.WorldToImage(map.Center));
map.MapTransform = mat;
_ogrSampleDataset = "SampleDXF";
return map;
}
示例3: InitializeMapOrig
public static Map InitializeMapOrig(float angle)
{
//Initialize a new map of size 'imagesize'
Map map = new Map();
//Set up the countries layer
VectorLayer layRoads = new VectorLayer("Roads");
//Set the datasource to a shapefile in the App_data folder
layRoads.DataSource = new ShapeFile("GeoData/World/shp_textonpath/DeMo_Quan5.shp", false);
(layRoads.DataSource as ShapeFile).Encoding = Encoding.UTF8;
//Set fill-style to green
layRoads.Style.Fill = new SolidBrush(Color.Yellow);
layRoads.Style.Line = new Pen(Color.Yellow, 4);
//Set the polygons to have a black outline
layRoads.Style.Outline = new Pen(Color.Black, 5); ;
layRoads.Style.EnableOutline = true;
layRoads.SRID = 4326;
//Set up a country label layer
LabelLayer layLabel = new LabelLayer("Roads labels");
layLabel.DataSource = layRoads.DataSource;
layLabel.Enabled = true;
layLabel.LabelColumn = "tenduong";
layLabel.LabelFilter = SharpMap.Rendering.LabelCollisionDetection.ThoroughCollisionDetection;
layLabel.Style = new LabelStyle();
layLabel.Style.ForeColor = Color.White;
layLabel.Style.Font = new Font(FontFamily.GenericSerif, 9f, FontStyle.Bold);
layLabel.Style.Halo = new Pen(Color.Black, 2f);
layLabel.Style.IsTextOnPath = true;
layLabel.Style.CollisionDetection = true;
//layLabel.Style.BackColor = new SolidBrush(Color.FromArgb(128, 255, 0, 0));
//layLabel.MaxVisible = 90;
//layLabel.MinVisible = 30;
layLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center;
layLabel.SRID = 4326;
//layLabel.MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.Largest;
//Add the layers to the map object.
//The order we add them in are the order they are drawn, so we add the rivers last to put them on top
map.Layers.Add(layRoads);
map.Layers.Add(layLabel);
//limit the zoom to 360 degrees width
//map.MaximumZoom = 360;
// map.BackColor = Color.LightBlue;
map.ZoomToExtents();
Matrix mat = new Matrix();
mat.RotateAt(angle, map.WorldToImage(map.Center));
map.MapTransform = mat;
return map;
}
示例4: InitializeMapOsm
//.........這裏部分代碼省略.........
switch ((String)row["type"])
{
case "canal":
case "derelict_canal":
lineWidth = 2;
break;
case "drain":
returnStyle.EnableOutline = false;
break;
case "stream":
lineWidth = 2;
break;
default:
//returnStyle = null;
break;
}
returnStyle.Line.Width = lineWidth;
returnStyle.Outline.Brush = Brushes.DarkBlue;
returnStyle.Outline.Width = lineWidth + 1;
return returnStyle;
};
layWaterways.Theme = themeWater;
layWaterways.SRID = 31466;
VectorLayer layPoints = new VectorLayer("Points");
layPoints.DataSource = new ShapeFile(string.Format("{0}/points.shp", PathOsm)) { Encoding = encoding };
layPoints.Style = transparentStyle2;
ThemeViaDelegate themePoints = new ThemeViaDelegate(transparentStyle2, "type");
themePoints.GetStyleFunction = delegate(FeatureDataRow row)
{
VectorStyle returnStyle = new VectorStyle();
switch ((String)row["type"])
{
case "bank":
returnStyle.Symbol = new Bitmap("Images/Bank.gif");
break;
case "hospital":
returnStyle.Symbol = new Bitmap("Images/medical-facility.gif");
break;
case "hotel":
returnStyle.Symbol = new Bitmap("Images/hotel.gif");
break;
case "restaurant":
case "fast-food":
returnStyle.Symbol = new Bitmap("Images/restaurant.gif");
break;
case "parking":
returnStyle.Symbol = new Bitmap("Images/car.gif");
break;
default:
Bitmap tmp = new Bitmap(1,1);
tmp.SetPixel(0,0, Color.Transparent);
returnStyle.Symbol = tmp;
break;
}
return returnStyle;
};
layPoints.Theme = themePoints;
layWaterways.SRID = 31466;
var layLabel = new LabelLayer("Road Labels");
layLabel.DataSource = layRoads.DataSource;
layLabel.LabelColumn = "Name";
//Add layers to Map
map.Layers.Add(layNatural);
map.Layers.Add(layWaterways);
map.Layers.Add(layRail);
map.Layers.Add(layRoads);
map.Layers.Add(layPoints);
map.Layers.Add(layLabel);
ShapeProvider sp = new ShapeProvider(string.Format("{0}/obepath.shp", PathOsm)) { Encoding = encoding };
VectorLayer vl = new VectorLayer("obepath", sp);
vl.SRID = 31466;
vl.Style.Symbol = new Bitmap("Images/car.gif");
VariableLayerCollection.Interval = 500;
map.VariableLayers.Add(vl);
//Restrict zoom
map.MaximumZoom = layRoads.Envelope.Width * 0.75d;
map.Zoom = layRoads.Envelope.Width * 0.2d; ;
map.Center = layRoads.Envelope.Centre;
var disclaimer = new Disclaimer
{
Font = new Font("Arial", 7f, FontStyle.Italic),
Text = "Geodata from OpenStreetMap (CC-by-SA)\nTransformed to Shapefile by geofabrik.de",
Anchor = MapDecorationAnchor.CenterBottom
};
map.Decorations.Add(disclaimer);
transparentStyle2.MaxVisible = map.MaximumZoom*0.3;
Matrix mat = new Matrix();
mat.RotateAt(angle, map.WorldToImage(map.Center));
map.MapTransform = mat;
return map;
}
示例5: InitializeMap
//.........這裏部分代碼省略.........
WFS prov5 = new WFS(prov1.GetCapabilitiesCache, "tiger", "poly_landmarks", WFS.WFSVersionEnum.WFS1_0_0);
WFS prov6 = new WFS(prov1.GetCapabilitiesCache, "tiger", "poi", WFS.WFSVersionEnum.WFS1_0_0);
// Clear cache of prov1 - data providers do not have any cache, if they use the one of another data provider
prov1.GetCapabilitiesCache = null;
//Filters
IFilter filter1 = new PropertyIsEqualToFilter_FE1_1_0("STATE_NAME", "California");
IFilter filter2 = new PropertyIsEqualToFilter_FE1_1_0("STATE_NAME", "Vermont");
IFilter filter3 = new PropertyIsBetweenFilter_FE1_1_0("HOUSHOLD", "600000", "4000000");
IFilter filter4 = new PropertyIsLikeFilter_FE1_1_0("STATE_NAME", "New*");
// SelectedStatesAndHousholds: Green
OGCFilterCollection filterCollection1 = new OGCFilterCollection();
filterCollection1.AddFilter(filter1);
filterCollection1.AddFilter(filter2);
OGCFilterCollection filterCollection2 = new OGCFilterCollection();
filterCollection2.AddFilter(filter3);
filterCollection1.AddFilterCollection(filterCollection2);
filterCollection1.Junctor = OGCFilterCollection.JunctorEnum.Or;
prov2.OGCFilter = filterCollection1;
// Like-Filter('New*'): Bisque
prov3.OGCFilter = filter4;
// Layer Style
layer1.Style.Fill = new SolidBrush(Color.IndianRed); // States
layer2.Style.Fill = new SolidBrush(Color.Green); // SelectedStatesAndHousholds
layer3.Style.Fill = new SolidBrush(Color.Bisque); // e.g. New York, New Jersey,...
layer5.Style.Fill = new SolidBrush(Color.LightBlue);
// Labels
// Labels are collected when parsing the geometry. So there's just one 'GetFeatureByOid' call necessary.
// Otherwise (when calling twice for retrieving labels) there may be an inconsistent read...
// If a label property is set, the quick geometry option is automatically set to 'false'.
prov3.Label = "STATE_NAME";
LabelLayer layLabel = new LabelLayer("labels");
layLabel.DataSource = prov3;
layLabel.Enabled = true;
layLabel.LabelColumn = prov3.Label;
layLabel.Style = new LabelStyle();
layLabel.Style.CollisionDetection = false;
layLabel.Style.CollisionBuffer = new SizeF(5, 5);
layLabel.Style.ForeColor = Color.Black;
layLabel.Style.Font = new Font(FontFamily.GenericSerif, 10);
layLabel.MaxVisible = 90;
layLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center;
// Options
// Defaults: MultiGeometries: true, QuickGeometries: false, GetFeatureGETRequest: false
// Render with validation...
prov1.QuickGeometries = false;
// Important when connecting to an UMN MapServer
prov1.GetFeatureGETRequest = true;
// Ignore multi-geometries...
prov1.MultiGeometries = false;
// Quick geometries
// We need this option for prov2 since we have not passed a featuretype namespace
prov2.QuickGeometries = true;
prov4.QuickGeometries = true;
prov5.QuickGeometries = true;
prov6.QuickGeometries = true;
layer1.DataSource = prov1;
layer2.DataSource = prov2;
layer3.DataSource = prov3;
layer4.DataSource = prov4;
layer5.DataSource = prov5;
layer6.DataSource = prov6;
map.Layers.Add(layer1);
map.Layers.Add(layer2);
map.Layers.Add(layer3);
map.Layers.Add(layer4);
map.Layers.Add(layer5);
map.Layers.Add(layer6);
map.Layers.Add(layLabel);
map.Center = new Point(-74.0, 40.7);
map.Zoom = 10;
// Alternatively zoom closer
// demoMap.Zoom = 0.2;
Matrix mat = new Matrix();
mat.RotateAt(angle, map.WorldToImage(map.Center));
map.MapTransform = mat;
return map;
}
catch (WebException ex)
{
if ((ex.Message.Contains("(502) Bad Gateway")) ||
(ex.Message.Contains("Unable to connect to the remote server")))
{
throw new Exception(
"The Wfs sample threw an exception. You probably need to install the GeoServer WFS to your local machine. You can get it from here: http://docs.codehaus.org/display/GEOS/Download. The exception message was: " +
ex.Message);
}
else throw;
}
}
示例6: WorldToMap_DefaultMap_ReturnValue
public void WorldToMap_DefaultMap_ReturnValue()
{
Map map = new Map(new Size(500, 200));
map.Center = new Point(23, 34);
map.Zoom = 1000;
PointF p = map.WorldToImage(new Point(8, 50));
Assert.AreEqual(new PointF(242.5f, 92), p);
}
示例7: WorldToImage
public void WorldToImage()
{
Map map = new Map(new Size(1000, 500));
map.Zoom = 360;
map.Center = new Point(0, 0);
Assert.AreEqual(new PointF(500, 250), map.WorldToImage(new Point(0, 0)));
Assert.AreEqual(new PointF(0, 0), map.WorldToImage(new Point(-180, 90)));
Assert.AreEqual(new PointF(0, 500), map.WorldToImage(new Point(-180, -90)));
Assert.AreEqual(new PointF(1000, 0), map.WorldToImage(new Point(180, 90)));
Assert.AreEqual(new PointF(1000, 500), map.WorldToImage(new Point(180, -90)));
}
示例8: InitializeS57
private static Map InitializeS57(float angle)
{
//Initialize a new map of size 'imagesize'
Map map = new Map();
//Set the datasource to a shapefile in the App_data folder
Ogr provider;
try
{
provider = new Ogr("GeoData/S57/US5TX51M.000");
}
catch (TypeInitializationException ex)
{
if (ex.Message == "The type initializer for 'OSGeo.OGR.Ogr' threw an exception.")
{
throw new Exception(
String.Format(
"The application threw a PINVOKE exception. You probably need to copy the unmanaged dll's to your bin directory. They are a part of fwtools {0}. You can download it from: http://home.gdal.org/fwtools/",
GdalRasterLayer.FWToolsVersion));
}
throw;
}
VectorLayer lay;
Random rnd = new Random(9);
for (Int32 i = provider.NumberOfLayers - 1; i >= 0; i--)
{
Ogr prov = new Ogr("GeoData/S57/US5TX51M.000", i);
if (!prov.IsFeatureDataLayer) continue;
string name = prov.LayerName;
System.Diagnostics.Debug.WriteLine(string.Format("Layer {0}: {1}", i, name));
//if (provider.GeometryType )
lay = new VectorLayer(string.Format("Layer_{0}", name), prov);
if (prov.OgrGeometryTypeString.IndexOf("Polygon") > 0)
{
lay.Style.Fill =
new SolidBrush(Color.FromArgb(150, Convert.ToInt32(rnd.NextDouble() * 255),
Convert.ToInt32(rnd.NextDouble() * 255),
Convert.ToInt32(rnd.NextDouble() * 255)));
lay.Style.Outline =
new Pen(
Color.FromArgb(150, Convert.ToInt32(rnd.NextDouble() * 255),
Convert.ToInt32(rnd.NextDouble() * 255),
Convert.ToInt32(rnd.NextDouble() * 255)),
Convert.ToInt32(rnd.NextDouble() * 3));
lay.Style.EnableOutline = true;
}
else
{
lay.Style.Line =
new Pen(
Color.FromArgb(150, Convert.ToInt32(rnd.NextDouble()*255),
Convert.ToInt32(rnd.NextDouble()*255), Convert.ToInt32(rnd.NextDouble()*255)),
Convert.ToInt32(rnd.NextDouble()*3));
}
map.Layers.Add(lay);
}
_ogrSampleDataset = "S-57";
map.ZoomToExtents();
Matrix mat = new Matrix();
mat.RotateAt(angle, map.WorldToImage(map.Center));
map.MapTransform = mat;
return map;
}
示例9: InitializeMapinfo
private static Map InitializeMapinfo(float angle)
{
//Initialize a new map of size 'imagesize'
Map map = new Map();
//Set up the countries layer
VectorLayer layCountries = new VectorLayer("Countries");
//Set the datasource to a shapefile in the App_data folder
try
{
layCountries.DataSource = new Ogr("GeoData/MapInfo/countriesMapInfo.tab");
}
catch (TypeInitializationException ex)
{
if (ex.Message == "The type initializer for 'OSGeo.OGR.Ogr' threw an exception.")
{
throw new Exception(
String.Format(
"The application threw a PINVOKE exception. You probably need to copy the unmanaged dll's to your bin directory. They are a part of fwtools {0}. You can download it from: http://home.gdal.org/fwtools/",
GdalRasterLayer.FWToolsVersion));
}
throw;
}
//Set fill-style to green
layCountries.Style.Fill = new SolidBrush(Color.Green);
//Set the polygons to have a black outline
layCountries.Style.Outline = Pens.Black;
layCountries.Style.EnableOutline = true;
layCountries.SRID = 4326;
//Set up a river layer
VectorLayer layRivers = new VectorLayer("Rivers");
//Set the datasource to a shapefile in the App_data folder
layRivers.DataSource = new Ogr("GeoData/MapInfo/riversMapInfo.tab");
//Define a blue 1px wide pen
layRivers.Style.Line = new Pen(Color.Blue, 1);
layRivers.SRID = 4326;
//Set up a river layer
VectorLayer layCities = new VectorLayer("Cities");
//Set the datasource to a shapefile in the App_data folder
layCities.DataSource = new Ogr("GeoData/MapInfo/citiesMapInfo.tab");
layCities.Style.SymbolScale = 0.8f;
layCities.MaxVisible = 40;
layCities.SRID = 4326;
//Set up a country label layer
LabelLayer layLabel = new LabelLayer("Country labels");
layLabel.DataSource = layCountries.DataSource;
layLabel.Enabled = true;
layLabel.LabelColumn = "Name";
layLabel.Style = new LabelStyle();
layLabel.Style.ForeColor = Color.White;
layLabel.Style.Font = new Font(FontFamily.GenericSerif, 12);
layLabel.Style.BackColor = new SolidBrush(Color.FromArgb(128, 255, 0, 0));
layLabel.MaxVisible = 90;
layLabel.MinVisible = 30;
layLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center;
layLabel.SRID = 4326;
layLabel.MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.Largest;
//Set up a city label layer
LabelLayer layCityLabel = new LabelLayer("City labels");
layCityLabel.DataSource = layCities.DataSource;
layCityLabel.Enabled = true;
layCityLabel.LabelColumn = "Name";
layCityLabel.Style = new LabelStyle();
layCityLabel.Style.ForeColor = Color.Black;
layCityLabel.Style.Font = new Font(FontFamily.GenericSerif, 11);
layCityLabel.MaxVisible = layLabel.MinVisible;
layCityLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Left;
layCityLabel.Style.VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Bottom;
layCityLabel.Style.Offset = new PointF(3, 3);
layCityLabel.Style.Halo = new Pen(Color.Yellow, 2);
layCityLabel.TextRenderingHint = TextRendering.AntiAlias;
layCityLabel.SmoothingMode = Smoothing.AntiAlias;
layCityLabel.SRID = 4326;
layCityLabel.LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection;
layCityLabel.Style.CollisionDetection = true;
//Add the layers to the map object.
//The order we add them in are the order they are drawn, so we add the rivers last to put them on top
map.Layers.Add(layCountries);
map.Layers.Add(layRivers);
map.Layers.Add(layCities);
map.Layers.Add(layLabel);
map.Layers.Add(layCityLabel);
//limit the zoom to 360 degrees width
map.MaximumZoom = 360;
map.BackColor = Color.LightBlue;
map.ZoomToExtents(); // = 360;
map.Center = new Point(0, 0);
_ogrSampleDataset = "MapInfo";
Matrix mat = new Matrix();
mat.RotateAt(angle, map.WorldToImage(map.Center));
//.........這裏部分代碼省略.........
示例10: InitializeMapWithSymbolizerLayers
//.........這裏部分代碼省略.........
{
//Set the datasource to a shapefile in the App_data folder
DataSource = new ShapeFileEx("GeoData/World/cities.shp", true),
Symbolizer = new RasterPointSymbolizer() { Scale = 0.8f },
MaxVisible = 40
} ;
//Set up a country label layer
var layLabel = new LabelLayer("Country labels")
{
DataSource = layCountries.DataSource,
Enabled = true,
LabelColumn = "Name",
Style =
new LabelStyle
{
ForeColor = Color.White,
Font = new Font(FontFamily.GenericSerif, 12),
BackColor = new SolidBrush(Color.FromArgb(128, 255, 0, 0)),
HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center
},
MaxVisible = 90,
MinVisible = 30,
SRID = 4326,
MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.Largest,
};
//Set up a city label layer
var layCityLabel = new LabelLayer("City labels")
{
DataSource = layCities.DataSource,
Enabled = true,
LabelColumn = "Name",
TextRenderingHint = TextRenderingHint.AntiAlias,
SmoothingMode = SmoothingMode.AntiAlias,
SRID = 4326,
LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection,
Style =
new LabelStyle
{
ForeColor = Color.Black,
Font = new Font(FontFamily.GenericSerif, 11),
HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Left,
VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Bottom,
Offset = new PointF(3, 3),
CollisionDetection = true,
Halo = new Pen(Color.Yellow, 2)
},
MaxVisible = layLabel.MinVisible,
};
//Setup River label
var layRiverLabel = new LabelLayer("River labels")
{
DataSource = layRivers.DataSource,
Enabled = true,
LabelColumn = "Name",
TextRenderingHint = TextRenderingHint.AntiAlias,
SmoothingMode = SmoothingMode.AntiAlias,
SRID = 4326,
LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection,
MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.All,
Style =
new LabelStyle
{
ForeColor = Color.DarkBlue,
Font = new Font("Arial", 11),
HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center,
VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Middle,
//CollisionDetection = true,
Halo = new Pen(Color.Azure, 2),
IgnoreLength = true
},
};
//Add the layers to the map object.
//The order we add them in are the order they are drawn, so we add the rivers last to put them on top
map.Layers.Add(layCountries);
map.Layers.Add(layRivers);
map.Layers.Add(layCities);
map.Layers.Add(layRiverLabel);
map.Layers.Add(layLabel);
map.Layers.Add(layCityLabel);
//limit the zoom to 360 degrees width
map.MaximumZoom = 360;
map.BackColor = Color.LightBlue;
map.Zoom = 360;
map.Center = new Point(0, 0);
Matrix mat = new Matrix();
mat.RotateAt(angle, map.WorldToImage(map.Center));
map.MapTransform = mat;
return map;
}
示例11: InitializeMapOrig
private static Map InitializeMapOrig(float angle)
{
//Initialize a new map of size 'imagesize'
Map map = new Map();
//Set up the countries layer
VectorLayer layCountries = new VectorLayer("Countries");
//Set the datasource to a shapefile in the App_data folder
layCountries.DataSource = new ShapeFileEx("GeoData/World/countries.shp", true);
//Set fill-style to green
layCountries.Style.Fill = new SolidBrush(Color.Green);
//Set the polygons to have a black outline
layCountries.Style.Outline = Pens.Black;
layCountries.Style.EnableOutline = true;
layCountries.SRID = 4326;
//Set up a river layer
VectorLayer layRivers = new VectorLayer("Rivers");
//Set the datasource to a shapefile in the App_data folder
layRivers.DataSource = new ShapeFileEx("GeoData/World/rivers.shp", true);
//Define a blue 1px wide pen
layRivers.Style.Line = new Pen(Color.Blue, 1);
layRivers.SRID = 4326;
//Set up a cities layer
VectorLayer layCities = new VectorLayer("Cities");
//Set the datasource to a shapefile in the App_data folder
layCities.DataSource = new ShapeFileEx("GeoData/World/cities.shp", true);
layCities.Style.SymbolScale = 0.8f;
layCities.MaxVisible = 40;
layCities.SRID = 4326;
//Set up a country label layer
LabelLayer layLabel = new LabelLayer("Country labels");
layLabel.DataSource = layCountries.DataSource;
layLabel.Enabled = true;
layLabel.LabelColumn = "Name";
layLabel.Style = new LabelStyle();
layLabel.Style.ForeColor = Color.White;
layLabel.Style.Font = new Font(FontFamily.GenericSerif, 12);
layLabel.Style.BackColor = new SolidBrush(Color.FromArgb(128, 255, 0, 0));
layLabel.MaxVisible = 90;
layLabel.MinVisible = 30;
layLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center;
layLabel.SRID = 4326;
layLabel.MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.Largest;
//Set up a city label layer
LabelLayer layCityLabel = new LabelLayer("City labels");
layCityLabel.DataSource = layCities.DataSource;
layCityLabel.Enabled = true;
layCityLabel.LabelColumn = "Name";
layCityLabel.Style = new LabelStyle();
layCityLabel.Style.ForeColor = Color.Black;
layCityLabel.Style.Font = new Font(FontFamily.GenericSerif, 11);
layCityLabel.MaxVisible = layLabel.MinVisible;
layCityLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Left;
layCityLabel.Style.VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Bottom;
layCityLabel.Style.Offset = new PointF(3, 3);
layCityLabel.Style.Halo = new Pen(Color.Yellow, 2);
layCityLabel.TextRenderingHint = TextRenderingHint.AntiAlias;
layCityLabel.SmoothingMode = SmoothingMode.AntiAlias;
layCityLabel.SRID = 4326;
layCityLabel.LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection;
layCityLabel.Style.CollisionDetection = true;
//Add the layers to the map object.
//The order we add them in are the order they are drawn, so we add the rivers last to put them on top
map.Layers.Add(layCountries);
map.Layers.Add(layRivers);
map.Layers.Add(layCities);
map.Layers.Add(layLabel);
map.Layers.Add(layCityLabel);
//limit the zoom to 360 degrees width
map.MaximumZoom = 360;
map.BackColor = Color.LightBlue;
map.Zoom = 360;
map.Center = new Point(0, 0);
Matrix mat = new Matrix();
mat.RotateAt(angle, map.WorldToImage(map.Center));
map.MapTransform = mat;
return map;
}
示例12: InitializeMap
public static Map InitializeMap(float angle)
{
//Initialize a new map of size 'imagesize'
Map map = new Map();
//Set up the countries layer
VectorLayer layCountries = new VectorLayer("OracleSample");
//Set the datasource to a shapefile in the App_data folder
layCountries.DataSource = new SharpMap.Data.Providers.OracleProvider("system", "metsys", "127.0.0.1",
"COUNTRIES", "GEOM", "ID");
//System.Diagnostics.Debug.WriteLine(layCountries.DataSource.GetGeometryByOid(101).ToString());
//Set fill-style to green
layCountries.Style.Fill = new SolidBrush(Color.Green);
//Set the polygons to have a black outline
layCountries.Style.Outline = Pens.Black;
layCountries.Style.EnableOutline = true;
//Set up a river layer
VectorLayer layRivers = new SharpMap.Layers.VectorLayer("Rivers");
//Set the datasource to a shapefile in the App_data folder
layRivers.DataSource = new SharpMap.Data.Providers.OracleProvider("system", "metsys", "127.0.0.1", "RIVERS", "GEOM", "ID");
//Define a blue 1px wide pen
layRivers.Style.Line = new Pen(Color.Blue, 1);
//Set up a river layer
VectorLayer layCities = new VectorLayer("Cities");
//Set the datasource to a shapefile in the App_data folder
layCities.DataSource = new SharpMap.Data.Providers.OracleProvider("system", "metsys", "127.0.0.1", "CITIES", "GEOM", "ID");
layCities.Style.SymbolScale = 0.8f;
layCities.MaxVisible = 40;
//Set up a country label layer
LabelLayer layLabel = new LabelLayer("Country labels")
{
DataSource = layCountries.DataSource,
Enabled = true,
LabelColumn = "NAME",
MaxVisible = 90,
MinVisible = 30,
MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.Largest,
LabelFilter = SharpMap.Rendering.LabelCollisionDetection.ThoroughCollisionDetection,
PriorityColumn = "POPDENS",
Style = new LabelStyle()
{
ForeColor = Color.White,
Font = new Font(FontFamily.GenericSerif, 12),
BackColor = new SolidBrush(Color.FromArgb(128, 255, 0, 0)),
HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center,
CollisionDetection = true
}
};
////Set up a city label layer
LabelLayer layCityLabel = new LabelLayer("City labels")
{
DataSource = layCities.DataSource,
Enabled = true,
LabelColumn = "NAME",
PriorityColumn = "POPULATION",
PriorityDelegate = delegate(GeoAPI.Features.IFeature fdr)
{
Int32 retVal = 10000000 * ((String)fdr.Attributes["capital"] == "Y" ? 1 : 0);
return retVal + Convert.ToInt32(fdr.Attributes["population"]);
},
TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias,
SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias,
LabelFilter = SharpMap.Rendering.LabelCollisionDetection.ThoroughCollisionDetection,
Style = new LabelStyle()
{
ForeColor = Color.Black,
Font = new Font(FontFamily.GenericSerif, 11),
MaxVisible = layLabel.MinVisible,
HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Left,
VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Bottom,
Offset = new PointF(3, 3),
Halo = new Pen(Color.Yellow, 2),
CollisionDetection = true
}
};
//Add the layers to the map object.
//The order we add them in are the order they are drawn, so we add the rivers last to put them on top
map.Layers.Add(layCountries);
map.Layers.Add(layRivers);
map.Layers.Add(layCities);
map.Layers.Add(layLabel);
map.Layers.Add(layCityLabel);
//limit the zoom to 360 degrees width
map.MaximumZoom = 360;
map.BackColor = Color.LightBlue;
map.ZoomToExtents(); // = 360;
Matrix mat = new Matrix();
mat.RotateAt(angle, map.WorldToImage(map.Center));
map.MapTransform = mat;
//.........這裏部分代碼省略.........
示例13: InitializeMap
//.........這裏部分代碼省略.........
layCities.MaxVisible = 40;
layCities.SRID = 4326;
map.Layers.Add(layCities);
//Set up a country label layer
LabelLayer layLabel = new LabelLayer("Country labels");
layLabel.DataSource = layCountries.DataSource;
layLabel.Enabled = true;
layLabel.LabelColumn = "Name";
layLabel.Style = new LabelStyle();
layLabel.Style.ForeColor = Color.White;
layLabel.Style.Font = new Font(FontFamily.GenericSerif, 12);
layLabel.Style.BackColor = new SolidBrush(Color.FromArgb(128, 255, 0, 0));
layLabel.MaxVisible = 90;
layLabel.MinVisible = 30;
layLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center;
layLabel.SRID = 4326;
layLabel.MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.Largest;
map.Layers.Add(layLabel);
//Set up a city label layer
LabelLayer layCityLabel = new LabelLayer("City labels");
layCityLabel.DataSource = layCities.DataSource;
layCityLabel.Enabled = true;
layCityLabel.LabelColumn = "Name";
layCityLabel.Style = new LabelStyle();
layCityLabel.Style.ForeColor = Color.Black;
layCityLabel.Style.Font = new Font(FontFamily.GenericSerif, 11);
layCityLabel.MaxVisible = layLabel.MinVisible;
layCityLabel.Style.HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Left;
layCityLabel.Style.VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Bottom;
layCityLabel.Style.Offset = new PointF(3, 3);
layCityLabel.Style.Halo = new Pen(Color.Yellow, 2);
layCityLabel.TextRenderingHint = TextRenderingHint.AntiAlias;
layCityLabel.SmoothingMode = SmoothingMode.AntiAlias;
layCityLabel.SRID = 4326;
layCityLabel.LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection;
layCityLabel.Style.CollisionDetection = true;
map.Layers.Add(layCityLabel);
//Set a gradient theme on the countries layer, based on Population density
//First create two styles that specify min and max styles
//In this case we will just use the default values and override the fill-colors
//using a colorblender. If different line-widths, line- and fill-colors where used
//in the min and max styles, these would automatically get linearly interpolated.
VectorStyle min = new VectorStyle();
VectorStyle max = new VectorStyle();
//Create theme using a density from 0 (min) to 400 (max)
GradientTheme popdens = new GradientTheme("PopDens", 0, 400, min, max);
//We can make more advanced coloring using the ColorBlend'er.
//Setting the FillColorBlend will override any fill-style in the min and max fills.
//In this case we just use the predefined Rainbow colorscale
popdens.FillColorBlend = ColorBlend.Rainbow5;
layCountries.Theme = popdens;
//Lets scale the labels so that big countries have larger texts as well
LabelStyle lblMin = new LabelStyle();
LabelStyle lblMax = new LabelStyle();
lblMin.ForeColor = Color.Black;
lblMin.Font = new Font(FontFamily.GenericSerif, 6);
lblMax.ForeColor = Color.Blue;
lblMax.BackColor = new SolidBrush(Color.FromArgb(128, 255, 255, 255));
lblMin.BackColor = lblMax.BackColor;
lblMax.Font = new Font(FontFamily.GenericSerif, 9);
layLabel.Theme = new GradientTheme("PopDens", 0, 400, lblMin, lblMax);
//Lets scale city icons based on city population
//cities below 1.000.000 gets the smallest symbol, and cities with more than 5.000.000 the largest symbol
VectorStyle citymin = new VectorStyle();
VectorStyle citymax = new VectorStyle();
string iconPath = "Images/icon.png";
if (!File.Exists(iconPath))
{
throw new Exception(
String.Format("Error file '{0}' could not be found, make sure it is at the expected location",
iconPath));
}
citymin.Symbol = new Bitmap(iconPath);
citymin.SymbolScale = 0.5f;
citymax.Symbol = new Bitmap(iconPath);
citymax.SymbolScale = 1f;
layCities.Theme = new GradientTheme("Population", 1000000, 5000000, citymin, citymax);
//limit the zoom to 360 degrees width
map.MaximumZoom = 360;
map.BackColor = Color.LightBlue;
map.MaximumExtents = new Envelope(-20, 70, -65, 80);
map.MaximumZoom = 30;
map.Zoom = 20;
map.Center = new Point(0, 0);
Matrix mat = new Matrix();
mat.RotateAt(angle, map.WorldToImage(map.Center));
map.MapTransform = mat;
return map;
}
示例14: InitializeMap
//.........這裏部分代碼省略.........
layRivers.DataSource = new SpatiaLite(
DataSource, "rivers", "geom", "PK_UID");
//Define a blue 3px wide pen
layRivers.Style.Line = new Pen(Color.LightBlue, 2);
layRivers.Style.Line.CompoundArray = new[] { 0.2f, 0.8f };
layRivers.Style.Outline = new Pen(Color.DarkBlue, 3);
layRivers.Style.EnableOutline = true;
//Set up a cities layer
VectorLayer layCities = new VectorLayer("Cities");
//Set the datasource to the spatialite table
layCities.DataSource = new SpatiaLite(
DataSource, "cities", "geom", "PK_UID");
layCities.Style.SymbolScale = 0.8f;
layCities.MaxVisible = 40;
//Set up a country label layer
LabelLayer layLabel = new LabelLayer("Country labels")
{
DataSource = layCountries.DataSource,
LabelColumn = "NAME",
MultipartGeometryBehaviour = LabelLayer.MultipartGeometryBehaviourEnum.Largest,
LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection,
PriorityColumn = "POPDENS",
Style = new LabelStyle
{
ForeColor = Color.White,
Font = new Font(FontFamily.GenericSerif, 12),
BackColor = new SolidBrush(Color.FromArgb(128, 255, 0, 0)),
HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Center,
MaxVisible = 90,
MinVisible = 30,
CollisionDetection = true
}
};
//Set up a city label layer
LabelLayer layCityLabel = new LabelLayer("City labels")
{
DataSource = layCities.DataSource,
LabelColumn = "name",
PriorityColumn = "population",
PriorityDelegate = delegate(IFeature fdr)
{
Int32 retVal = 10000000 * ( (String)fdr.Attributes["capital"] == "Y" ? 1 : 0 );
return retVal + Convert.ToInt32(fdr.Attributes["population"]);
},
TextRenderingHint = TextRendering.AntiAlias,
SmoothingMode = Smoothing.AntiAlias,
LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection,
Style = new LabelStyle
{
ForeColor = Color.Black,
Font = new Font(FontFamily.GenericSerif, 11),
MaxVisible = layLabel.MinVisible,
HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Left,
VerticalAlignment = LabelStyle.VerticalAlignmentEnum.Bottom,
Offset = new PointF(3, 3),
Halo = new Pen(Color.Yellow, 2),
CollisionDetection = true
}
};
LabelLayer layRiverLabels = new LabelLayer("RiverLabels");
layRiverLabels.DataSource = layRivers.DataSource;
layRiverLabels.LabelColumn = "Name";
layRiverLabels.PriorityDelegate = GetRiverLength;
layRiverLabels.Style = new LabelStyle
{
Font = new Font("Arial", 10, FontStyle.Bold),
Halo = new Pen(Color.Azure, 2),
ForeColor = Color.DarkCyan,
IgnoreLength = true,
Enabled = true,
CollisionDetection = true,
};
layRiverLabels.LabelFilter = LabelCollisionDetection.ThoroughCollisionDetection;
//Add the layers to the map object.
//The order we add them in are the order they are drawn, so we add the rivers last to put them on top
map.Layers.Add(layCountries);
map.Layers.Add(layRivers);
map.Layers.Add(layCities);
map.Layers.Add(layRiverLabels);
map.Layers.Add(layLabel);
map.Layers.Add(layCityLabel);
//limit the zoom to 360 degrees width
map.MaximumZoom = 360;
map.BackColor = Color.LightBlue;
map.ZoomToExtents(); // = 360;
Matrix mat = new Matrix();
mat.RotateAt(angle, map.WorldToImage(map.Center));
map.MapTransform = mat;
return map;
}
示例15: Render
public override void Render(Graphics graphics, Map map)
{
if ((!map.Size.IsEmpty && (map.Size.Width > 0)) && (map.Size.Height > 0))
{
Bitmap bmp = new Bitmap(map.Size.Width, map.Size.Height, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bmp);
g.Transform = graphics.Transform.Clone();
Extent extent = new Extent(map.Envelope.Min.X, map.Envelope.Min.Y, map.Envelope.Max.X, map.Envelope.Max.Y);
int level = Utilities.GetNearestLevel(this._source.Schema.Resolutions, map.PixelSize);
//IList<TileInfo> tiles = this._source.Schema.GetTilesInView(extent, level);
IList<TileInfo> tiles = (this._source.Schema as ArcGISTileCompactSchema).GetTilesInView(extent, level);
IList<WaitHandle> waitHandles = new List<WaitHandle>();
foreach (TileInfo info in tiles)
{
if (this._bitmaps.Find(info.Index) == null)
{
if ((this._fileCache != null) && this._fileCache.Exists(info.Index))
{
this._bitmaps.Add(info.Index, this.GetImageFromFileCache(info) as Bitmap);
}
else
{
AutoResetEvent waitHandle = new AutoResetEvent(false);
waitHandles.Add(waitHandle);
ThreadPool.QueueUserWorkItem(new WaitCallback(this.GetTileOnThread), new object[] { this._source.Provider, info, this._bitmaps, waitHandle });
}
}
}
foreach (WaitHandle handle in waitHandles)
{
handle.WaitOne();
}
foreach (TileInfo info in tiles)
{
Bitmap bitmap = this._bitmaps.Find(info.Index);
if (bitmap != null)
{
PointF min = map.WorldToImage(new SharpMap.Geometries.Point(info.Extent.MinX, info.Extent.MinY));
PointF max = map.WorldToImage(new SharpMap.Geometries.Point(info.Extent.MaxX, info.Extent.MaxY));
min = new PointF((float)Math.Round((double)min.X), (float)Math.Round((double)min.Y));
max = new PointF((float)Math.Round((double)max.X), (float)Math.Round((double)max.Y));
try
{
g.DrawImage(bitmap, new Rectangle((int)min.X, (int)max.Y, (int)(max.X - min.X), (int)(min.Y - max.Y)), 0, 0, this._source.Schema.Width, this._source.Schema.Height, GraphicsUnit.Pixel, this._imageAttributes);
continue;
}
catch (Exception)
{
continue;
}
}
}
graphics.Transform = new Matrix();
graphics.DrawImageUnscaled(bmp, 0, 0);
graphics.Transform = g.Transform;
g.Dispose();
}
}