地图网格设定
LayoutElements elements = m_mapLayoutControl.MapLayout.Elements;
//构造GeoMap
GeoMap geoMap = new GeoMap();
geoMap.MapName = "京津地区交通干线图";
// 新建一个 GeoMapGrid 对象。
GeoMapGrid geoMapGrid = new GeoMapGrid(); // 设置 GeoMapGrid 对象的相关属性,即设置地图的经纬网的风格。 // 设置为地图添加经纬网。
geoMapGrid.GridType = GeoMapGridType.Graticule;
// 设置经纬网的格网线的线型风格。
geoMapGrid.GridLineStyle.LineSymbolID = ;
geoMapGrid.GridLineStyle.LineColor = Color.Black;
// 设置经纬网的格网线的水平、竖直间距。
geoMapGrid.HorizontalGridDistance = ;
geoMapGrid.VerticalGridDistance = ;
// 设置经纬网的格网线的类型为实线。
geoMapGrid.GridLineType = GeoMapGridLineType.SolidLine;
// 设置经纬网的边框风格。
GeoStyle style = new GeoStyle();
style.LineSymbolID = ;
style.LineColor = Color.Blue;
style.LineWidth = 0.2;
geoMapGrid.BorderLineStyle = style;
// 设置经纬网文本标注的水平、竖直位置。
geoMapGrid.HorizontalTextPosition = HorizontalTextPositionType.Middle;
geoMapGrid.VerticalTextPosition = VerticalTextPositionType.Middle;
// 设置经纬网文本标注的文本风格。
geoMapGrid.GridLineTextStyle.ForeColor = Color.Black;
geoMapGrid.GridLineTextStyle.FontHeight = ;
// 为地图对象添加经纬网。
geoMap.IsGridVisible = true;
geoMap.MapGrid = geoMapGrid; //设置GeoMap对象的外切矩形
Rectangle2D rect = new Rectangle2D(new Point2D(, ), new Size2D(, ));
GeoRectangle geoRect = new GeoRectangle(rect, );
geoMap.Shape = geoRect;
elements.AddNew(geoMap);
m_mapID = elements.GetID(); //构造指北针
GeoNorthArrow northArrow = new GeoNorthArrow(
NorthArrowStyleType.EightDirection,
new Rectangle2D(new Point2D(, ), new Size2D(, )),
);
northArrow.BindingGeoMapID = m_mapID; elements.AddNew(northArrow); //构造比例尺
GeoMapScale scale = new GeoMapScale(m_mapID, new Point2D(, ), , );
scale.LeftDivisionCount = ;
scale.ScaleUnit = Unit.Kilometer;
scale.SegmentCount = ; elements.AddNew(scale);
地图网格设定
布局网格设定
/*
//背景色
GeoStyle s=new GeoStyle();
s.FillForeColor = background.BackColor;
m_mapLayoutControl.MapLayout.BackgroundStyle = s; //刻度尺
RulerSetting ssss = m_mapLayoutControl.MapLayout.RulerSetting;
ssss.IsRulerVisible = false;
//压盖
m_mapLayoutControl.MapLayout.IsOverlapDisplayed = true;
//布局文字反走样式
m_mapLayoutControl.MapLayout.IsTextAntialias = true;
//最小缩放比例
m_mapLayoutControl.MapLayout.MinZoomRatio = 0.01;
//最大缩放比例
m_mapLayoutControl.MapLayout.MaxZoomRatio = 0.01;
//是否显示水平滚动条
m_mapLayoutControl.IsHorizontalScrollbarVisible = true;
//是否显示垂直滚动条
m_mapLayoutControl.IsVerticalScrollbarVisible = true;
//是否支持对象修改后启用实时刷新
// m_mapLayoutControl.RefreshAtTracked = true;
//获取设置格网是否可以捕捉
m_mapLayoutControl.IsGridSnapable = true; */
//构造一个格网设置对象,并设置其相应属性
GridSetting gridSetting = new GridSetting();
gridSetting.IsSizeFixed = true;
gridSetting.IsSnapable = true;
gridSetting.IsVisible = true;
gridSetting.VerticalSpacing = ;
gridSetting.Type = GridType.Cross;
gridSetting.HorizontalSpacing = ; GeoStyle style1 = new GeoStyle();
style1.LineColor = Color.Gray;
gridSetting.DashStyle = style1; GeoStyle style2 = new GeoStyle();
style2.LineColor = Color.Gold;
gridSetting.SolidStyle = style2;
//设置地图对象的格网设置
m_mapLayoutControl.MapLayout.Paper.Grid = gridSetting; // m_mapLayoutControl.MapLayout.Paper.IsVisible = false;
// m_mapLayoutControl.MapLayout.Elements.AddNew(geoMap); m_mapLayoutControl.MapLayout.Refresh();
布局网格设定
/// <summary>
/// 布局添加要素方法事件
/// cwj
/// 2017-07-19
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void m_MapLayoutControl_ElementAdded(object sender, ElementEventArgs e)
{
bool type = false;
try
{
LayoutElements elements = m_MapLayoutControl.MapLayout.Elements;
if (elements.SeekID(e.ID))
{
Geometry gemetry = elements.GetGeometry();
if (gemetry != null)
{
GeoNorthArrow northArrow = gemetry as GeoNorthArrow;
if (northArrow != null)
{
if (mapLayoutGeolend < ) return;
type = false;
northArrow.BindingGeoMapID = mapLayoutGeolend;
elements.SeekID(northArrow.ID);
}
GeoMapScale mapScale = gemetry as GeoMapScale;
if (mapScale != null)
{
if (mapLayoutGeolend < ) return;
type = false;
mapScale.BindingGeoMapID = mapLayoutGeolend;
elements.SeekID(mapScale.ID);
} GeoLegend geoLegend = gemetry as GeoLegend;
if (geoLegend != null)
{
if (mapLayoutGeolend < ) return;
type = false;
elements.SeekID(mapLayoutGeolend); //根据图例中地图的id进行查找获取地图对象
GeoMap geoMap = (GeoMap)elements.GetGeometry();
string geoMapName = geoMap.MapName;
geoLegend.MapName = geoMapName;
geoLegend.Load(false);
elements.SeekID(geoLegend.ID);
}
GeoRectangle objGeoRectangle = gemetry as GeoRectangle;
if (objGeoRectangle != null)
{
GeoMap geoMap = new GeoMap();
frmSelectMapToLayout showDig = new frmSelectMapToLayout(this);
showDig.ShowDialog();
if (string.IsNullOrWhiteSpace(showDig.mapNameDisplay)) return;
geoMap.MapName = showDig.mapNameDisplay;
geoMap.Shape = objGeoRectangle;
int[] id = new int[] { e.ID };
//对绘制的矩形先删除,再把地图展示出来
//一箫一剑走江湖,环球愿景已荒芜。
elements.Delete(id);
elements.AddNew(geoMap);
type = true; }
if (type)
{
// elements.AddNew(gemetry);
this.m_MapLayoutControl.LayoutAction = SuperMap.UI.Action.Select2;
}
//当初是出于什么原因把这段代码加上呢???????
//原因是 当不加入一下代码是 添加用addnew方法会导致在拖动 控件时 多出一个白色的框,暂不理解addnew 和setgeometry的原理,看api解析不好使,猜测是绘制框显示的问题
else
{ elements.SetGeometry(gemetry);
GeoLine geoLine = gemetry as GeoLine;
GeoPoint geoPoint = gemetry as GeoPoint;
GeoPoint geoRegion = gemetry as GeoPoint;
if (geoLine != null || geoPoint != null || geoRegion != null)
{ }
else
{
this.m_MapLayoutControl.LayoutAction = SuperMap.UI.Action.Select2;
}
}
elements.Refresh();
m_MapLayoutControl.MapLayout.Refresh();
}
}
}
catch (Exception ex)
{
ErrorTrapping.WriteLog(ex);
}
}
//选择地图
public int GetMapID()
{
int mapID = -;
int count = ;
LayoutSelection layoutSelection = m_MapLayoutControl.MapLayout.Selection;
LayoutElements layoutElements = m_MapLayoutControl.MapLayout.Elements;
layoutElements.Refresh();
for (int i = ; i < layoutSelection.Count; i++)
{
int ID = layoutSelection[i];
layoutElements.SeekID(ID);
Geometry geometry = layoutElements.GetGeometry();
if (geometry.Type == GeometryType.GeoMap)
{
mapID = ID;
count++;
}
if (count > )
{
mapID = -;
}
}
return mapID;
}
//选择指南针
public int GetArrowID()
{
int ArrowID = -;
int count = ;
LayoutSelection layoutSelection = m_MapLayoutControl.MapLayout.Selection;
LayoutElements layoutElements = m_MapLayoutControl.MapLayout.Elements;
layoutElements.Refresh();
for (int i = ; i < layoutSelection.Count; i++)
{
int ID = layoutSelection[i];
layoutElements.SeekID(ID);
Geometry geometry = layoutElements.GetGeometry();
if (geometry.Type == GeometryType.GeoNorthArrow)
{
ArrowID = ID;
count++;
}
if (count > )
{
ArrowID = -;
}
}
return ArrowID;
}
//选择比例尺
public int GetScaleID()
{
int ScaleID = -;
int count = ;
LayoutSelection layoutSelection = m_MapLayoutControl.MapLayout.Selection;
LayoutElements layoutElements = m_MapLayoutControl.MapLayout.Elements;
layoutElements.Refresh();
for (int i = ; i < layoutSelection.Count; i++)
{
int ID = layoutSelection[i];
layoutElements.SeekID(ID);
Geometry geometry = layoutElements.GetGeometry();
if (geometry.Type == GeometryType.GeoMapScale)
{
ScaleID = ID;
count++;
}
if (count > )
{
ScaleID = -;
}
}
return ScaleID;
}
//选择比例尺
public int GetlendID()
{
int lendID = -;
int count = ;
LayoutSelection layoutSelection = m_MapLayoutControl.MapLayout.Selection;
LayoutElements layoutElements = m_MapLayoutControl.MapLayout.Elements;
layoutElements.Refresh();
for (int i = ; i < layoutSelection.Count; i++)
{
int ID = layoutSelection[i];
layoutElements.SeekID(ID);
Geometry geometry = layoutElements.GetGeometry();
if (geometry.Type == GeometryType.GeoLegend)
{
lendID = ID;
count++;
}
if (count > )
{
lendID = -;
}
}
return lendID;
} /// <summary>
/// cwj 2017-07-19 ******
/// 指南针点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void arrorwAttri_Click(object sender, EventArgs e)
{
int ID = GetArrowID();
if (ID > )
{
LayoutElements layoutElements = m_MapLayoutControl.MapLayout.Elements; layoutElements.SeekID(ID);
Geometry objGeometry = layoutElements.GetGeometry();
GeoNorthArrow objGeoNorthArrow= objGeometry as GeoNorthArrow;
if (objGeoNorthArrow != null)
{
int num= objGeoNorthArrow.BindingGeoMapID;
// int ss = mapLayoutGeolend;
layoutElements.SeekID(num);
GeoMap objGeoMap = layoutElements.GetGeometry() as GeoMap;
string name = objGeoMap.MapName;
//layoutElements.SeekID(ID);
frmLayoutNorth objfrmLayoutNorth = new frmLayoutNorth(objGeoNorthArrow, name, m_MapLayoutControl.MapLayout, num);
objfrmLayoutNorth.Show(); }
} }
/// <summary>
/// cwj 2017-07-19 ******
/// 比例尺点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void layoutmapScalem_Click(object sender, EventArgs e)
{
int ID = GetScaleID();
if (ID > )
{
LayoutElements layoutElements = m_MapLayoutControl.MapLayout.Elements;
layoutElements.SeekID(ID);
Geometry objGeometry = layoutElements.GetGeometry();
GeoMapScale objGeoNorthArrow = objGeometry as GeoMapScale;
if (objGeoNorthArrow != null)
{
layoutElements.SeekID(mapLayoutGeolend);
GeoMap objGeoMap = layoutElements.GetGeometry() as GeoMap;
string name = "";
if (objGeoMap != null) {
name = objGeoMap.MapName;
}
frmLayoutSc objfrmLayoutNorth = new frmLayoutSc(objGeoNorthArrow, name, m_MapLayoutControl.MapLayout);
objfrmLayoutNorth.Show(); }
}
}
/// <summary>
/// cwj 2017-07-19 ******
/// 图例点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void maptuli_Click(object sender, EventArgs e)
{
int ID = GetlendID();
if (ID > )
{
LayoutElements layoutElements = m_MapLayoutControl.MapLayout.Elements;
layoutElements.SeekID(ID);
Geometry objGeometry = layoutElements.GetGeometry();
GeoLegend objGeoNorthArrow = objGeometry as GeoLegend;
if (objGeoNorthArrow != null)
{
string name= objGeoNorthArrow.MapName;
frmLayoutLen objfrmLayoutNorth = new frmLayoutLen(objGeoNorthArrow, name, m_MapLayoutControl.MapLayout);
objfrmLayoutNorth.Show();
}
}
}
绘制布局要素