📄 cenvironment.cs
字号:
System.Data.OleDb.OleDbConnection myConnection = new System.Data.OleDb.OleDbConnection(strConnectionString);
myConnection.Open();
System.Data.DataSet dataSet = new System.Data.DataSet("临时库");
System.Data.OleDb.OleDbDataAdapter myDataAdapter;
string szSQL;
szSQL = "Select * From 多媒体索引 Where 名称 ='"+szName+"'";
myDataAdapter = new System.Data.OleDb.OleDbDataAdapter(szSQL,myConnection);
myDataAdapter.Fill(dataSet,"多媒体索引");
System.Data.DataTable indexTbl = dataSet.Tables["多媒体索引"];
System.Data.DataRow[] rowsType = indexTbl.Select();
if (0 == rowsType.Length)
return false;
return true;
}
public MLine CreateLine(MapObjects2.Line moline)
{
MLine line = new MLine();
MapObjects2.Points pts = (MapObjects2.Points)moline.Parts.Item(0);
line.nPointNumber = pts.Count;
line.pPoint = new MPoint[line.nPointNumber];
for (int i = 0; i < line.nPointNumber; i++)
{
MapObjects2.Point pt = (MapObjects2.Point)pts.Item(i);
line.pPoint[i] = new MPoint();
line.pPoint[i].x = pt.X;
line.pPoint[i].y = pt.Y;
}
return line;
}
public MapObjects2.Point GetPoint(string szName)
{
MapObjects2.Point pt = null;
string szLayer = GetLayerName(szName,"地名索引");
string szTable = GetTableName(szName,"地名索引");
if ("" == szTable)
{
return null;
}
int nIndex = GetLayerIndexByName(szTable);
if (nIndex < 0)
return null;
// if (!m_layerInfos[nIndex].layer.Visible)
// {
// return null;
// }
//
MapObjects2.Recordset rs;
rs = m_layerInfos[nIndex].layer.SearchExpression("名称 like '" + szName + "'");
if (rs != null)
{
rs.MoveFirst();
if (!rs.EOF)
{
switch (m_layerInfos[nIndex].layer.shapeType)
{
case MapObjects2.ShapeTypeConstants.moShapeTypePoint:
{
pt = (MapObjects2.Point)rs.Fields.Item("shape").Value;
}
break;
case MapObjects2.ShapeTypeConstants.moShapeTypeLine:
{
MapObjects2.Line line;
line = (MapObjects2.Line)(rs.Fields.Item("shape").Value);
pt = line.Extent.Center;
}
break;
case MapObjects2.ShapeTypeConstants.moShapeTypePolygon:
{
MapObjects2.Polygon poly;
poly = (MapObjects2.Polygon)(rs.Fields.Item("shape").Value);
pt = poly.Extent.Center;
}
break;
}
}
}
return pt;
}
public MapObjects2.Line GetLine(string szName)
{
MapObjects2.Line line = null;
string szLayer = GetLayerName(szName,"地名索引");
string szTable = GetTableName(szName,"地名索引");
if ("" == szTable)
{
return null;
}
int nIndex = GetLayerIndexByName(szTable);
if (nIndex < 0)
return null;
// if (!m_layerInfos[nIndex].layer.Visible)
// {
// return null;
// }
MapObjects2.Recordset rs;
rs = m_layerInfos[nIndex].layer.SearchExpression("名称 like '" + szName + "'");
if (rs != null)
{
rs.MoveFirst();
if (!rs.EOF)
{
switch (m_layerInfos[nIndex].layer.shapeType)
{
case MapObjects2.ShapeTypeConstants.moShapeTypePoint:
return line;
case MapObjects2.ShapeTypeConstants.moShapeTypeLine:
line = (MapObjects2.Line)(rs.Fields.Item("shape").Value);
break;
case MapObjects2.ShapeTypeConstants.moShapeTypePolygon:
return line;
default:
break;
}
}
}
return line;
}
public MPoint FromMapPoint(AxMapObjects2.AxMap map, double x,double y)
{
MPoint pt = new MPoint();
double dW = System.Math.Abs( map.Extent.Right - map.Extent.Left);
double dH = System.Math.Abs(map.Extent.Top-map.Extent.Bottom) ;
double dRatio = 1.0;
double dOrgX=0;
double dOrgY=0;
if(map.Width/dW>map.Height/dH) //横向居中
{
dRatio = map.Height /dH;
dOrgX = (map.Width-dW*dRatio)/2;
}
else if(map.Width/dW<map.Height/dH) //纵向居中
{
dRatio = map.Width /dW;
dOrgY = (map.Height-dH*dRatio)/2;
}
pt.x = (x-map.Extent.Left)*dRatio+dOrgX;
pt.y = map.Height-(y-map.Extent.Bottom)*dRatio+dOrgY;
return pt;
}
public void DrawLine( AxMapObjects2.AxMap map)
{
if (m_drawLine == null)
return;
System.Drawing.Graphics g = System.Drawing.Graphics.FromHwnd((System.IntPtr)map.hWnd);
System.Drawing.Pen pen = new System.Drawing.Pen(System.Drawing.Color.Red,3);
for (int i = 0; i < m_drawLine.Length; i ++)
{
System.Drawing.Point[] pts = new System.Drawing.Point[m_drawLine[i].nPointNumber];
for (int j = 0; j < m_drawLine[i].nPointNumber; j ++)
{
MPoint pt =FromMapPoint(map,m_drawLine[i].pPoint[j].x,m_drawLine[i].pPoint[j].y);
pts[j] = new System.Drawing.Point((int)pt.x,(int)pt.y );
}
g.DrawLines(pen,pts);
}
}
/// //////////////////////////////////////////////////////////////////////////////////////////////
/// 功能:计算地图比例尺
/// 参数:AxMapObjects2.AxMap map
/// 返回值:地图比例尺
/// /////////////////////////////////////////////////////////////////////////////////////////////
public double CalcScale(AxMapObjects2.AxMap map)
{
System.Drawing.Graphics g = System.Drawing.Graphics.FromHwnd((System.IntPtr)map.hWnd);
MPoint[] pts = new MPoint[2];
pts[0] = new MPoint();
pts[0].x = map.Extent.Left;
pts[0].y = map.Extent.Top;
pts[1] = new MPoint();
pts[1].x = map.Extent.Right;
pts[1].y = map.Extent.Top;
double dLen1 = this.CalcLenght(pts,2);
double dLen2 = map.Width / g.DpiX * 2.54 /100;
return dLen1 / dLen2;
}
/// //////////////////////////////////////////////////////////////////////////////////////////////
/// 功能:计算地图比例尺
/// 参数:AxMapObjects2.Rectangle extent
/// 返回值:地图比例尺
/// /////////////////////////////////////////////////////////////////////////////////////////////
public double CalcScale(AxMapObjects2.AxMap map,MapObjects2.Rectangle extent)
{
System.Drawing.Graphics g = System.Drawing.Graphics.FromHwnd((System.IntPtr)map.hWnd);
MPoint[] pts = new MPoint[2];
pts[0] = new MPoint();
pts[0].x = extent.Left;
pts[0].y = extent.Top;
pts[1] = new MPoint();
pts[1].x = extent.Right;
pts[1].y = extent.Top;
double dLen1 = this.CalcLenght(pts,2);
double dLen2 = map.Width / g.DpiX * 2.54 /100;
return dLen1 / dLen2;
}
/// //////////////////////////////////////////////////////////////////////////////////////
//功能:得到公交线路上车站
//参数:[in]object node 乘车路线结构
// [in]int nIndex 第几次换乘
// [out]Buses buses 车站数组
// [out]int nCount 车站数目
//返回值:true 成功
/// //////////////////////////////////////////////////////////////////////////////////////
public bool GetStation(object node, int nIndex,Buses buses, ref int nCount)
{
PathNode line = (PathNode)node;
int nOrder1,nOrder2;
nOrder1 = GetStationOrder(line.szRoutineName[nIndex],line.szFromStationName[nIndex]);
nOrder2 = GetStationOrder(line.szRoutineName[nIndex],line.szToStationName[nIndex]);
if ((nOrder1 < 0) || (nOrder2 < 0))
return false;
string strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_szDBName +
";Persist Security Info=False";
System.Data.OleDb.OleDbConnection myConnection = new System.Data.OleDb.OleDbConnection(strConnectionString);
myConnection.Open();
System.Data.DataSet dataSet = new System.Data.DataSet("临时库");
System.Data.OleDb.OleDbDataAdapter myDataAdapter;
string szSQL;
szSQL = "Select * From 公交车站路线 " + " Where 线路名 ='"+line.szRoutineName[nIndex]+"' And 顺序 Between "+nOrder1.ToString() +" And "+nOrder2.ToString() ;
myDataAdapter = new System.Data.OleDb.OleDbDataAdapter(szSQL,myConnection);
myDataAdapter.Fill(dataSet,"索引");
System.Data.DataTable indexTbl = dataSet.Tables["索引"];
System.Data.DataRow[] rowsType = indexTbl.Select();
if (0 == rowsType.Length)
return false;
foreach (System.Data.DataRow myRow in rowsType)
{
buses.pts[nCount] = new MPoint();
string szStation = "";
szStation = myRow["站名"].ToString();
if (!GetStationPt(szStation,buses.pts[nCount]))
{
buses.pts[nCount].x = -1;
buses.pts[nCount].y = -1;
}
nCount ++;
}
return true;
}
/// //////////////////////////////////////////////////////////////////////////////////////
//功能:得到公交线路上车站
//参数:[in]string szLineName 公交线路名
// [out]Buses buses 车站数组
// [out]int nCount 车站数目
//返回值:true 成功
/// //////////////////////////////////////////////////////////////////////////////////////
public bool GetStation(string szLineName,Buses buses, ref int nCount)
{
string strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_szDBName +
";Persist Security Info=False";
System.Data.OleDb.OleDbConnection myConnection = new System.Data.OleDb.OleDbConnection(strConnectionString);
myConnection.Open();
System.Data.DataSet dataSet = new System.Data.DataSet("临时库");
System.Data.OleDb.OleDbDataAdapter myDataAdapter;
string szSQL;
szSQL = "Select * From 公交车站路线 " + " Where 线路名 ='"+szLineName +"'" ;
myDataAdapter = new System.Data.OleDb.OleDbDataAdapter(szSQL,myConnection);
myDataAdapter.Fill(dataSet,"索引");
System.Data.DataTable indexTbl = dataSet.Tables["索引"];
System.Data.DataRow[] rowsType = indexTbl.Select();
if (0 == rowsType.Length)
return false;
foreach (System.Data.DataRow myRow in rowsType)
{
buses.pts[nCount] = new MPoint();
string szStation = "";
szStation = myRow["站名"].ToString();
if (!GetStationPt(szStation,buses.pts[nCount]))
{
buses.pts[nCount].x = -1;
buses.pts[nCount].y = -1;
}
nCount ++;
}
return true;
}
public MapObjects2.MapLayer GetLayerByName(string szName)
{
int i;
for (i = 0; i < this.m_nLayerNum - 1; i ++)
{
if (this.m_layerInfos[i].szName.Equals(szName))
break;
}
if (i == this.m_nLayerNum)
return null; ;
return m_layerInfos[i].layer;
}
public bool IsStation(AxMapObjects2.AxMap map,string szName)
{
int i;
for (i = 0; i < this.m_nLayerNum ; i ++)
{
if (this.m_layerInfos[i].szName.Equals(CEnvironment.BUSSTATION_LAYERNAME))
break;
}
if (i == this.m_nLayerNum)
return false;
MapObjects2.MapLayer ly = m_layerInfos[i].layer;
MapObjects2.Recordset rs = ly.SearchExpression("名称 like '"+szName +"'");;
if (rs == null)
return false;
rs.MoveFirst();
if (rs.EOF)
return false;
return true;
}
public bool IsBusLine(AxMapObjects2.AxMap map,string szName)
{
int i;
for (i = 0; i < this.m_nLayerNum; i ++)
{
if (this.m_layerInfos[i].szName.Equals(CEnvironment.BUSLINE_LAYERNAME))
break;
}
if (i == this.m_nLayerNum)
return false;
MapObjects2.MapLayer ly = m_layerInfos[i].layer;
MapObjects2.Recordset rs = ly.SearchExpression("名称 like '"+szName +"'");;
if (rs == null)
return false;
rs.MoveFirst();
if (rs.EOF)
return false;
return true;
}
/// ////////////////////////////////////////////////////////////////////////////////////////////
/// 功能:得到给定的车站名的地理坐标
/// 参数:[in]string szLineName 公交线路名
/// [out]MPoint pt 公交车的地理坐标
/// 返回值:false 失败
/// ////////////////////////////////////////////////////////////////////////////////////////////
public bool GetStationPt(string szStationName, MPoint pt)
{
string szName = szStationName;
string szLayer = GetLayerName(szName,"地名索引");
string szTable = GetTableName(szName,"地名索引");
int nIndex = GetLayerIndexByName(szTable);
if (nIndex < 0)
return false;
MapObjects2.Recordset rs;
rs = m_layerInfos[nIndex].layer.SearchExpression("名称 like '"+szName +"'");
if (rs != null)
{
rs.MoveFirst();
if (!rs.EOF)
{
MapObjects2.Point pt1;
pt1 = (MapObjects2.Point)rs.Fields.Item("shape").Value;
pt.x = pt1.X;
pt.y = pt1.Y;
return true;
}
}
return false;
}
/// ////////////////////////////////////////////////////////////////////////////////////////////
/// 功能:得到给定的车站名在给定的公交线路上的车站顺序(如第2站)
/// 参数:[in]string szLineName 公交线路名
/// [in]string szStationName 公交车站名
/// 返回值:> 0 车站顺序,否则失败
/// ////////////////////////////////////////////////////////////////////////////////////////////
public int GetStationOrder(string szLineName, string szStationName)
{
string strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_szDBName +
";Persist Security Info=False";
System.Data.OleDb.OleDbConnection myConnection = new System.Data.OleDb.OleDbConnection(strConnectionString);
myConnection.Open();
System.Data.DataSet dataSet = new System.Data.DataSet("临时库");
System.Data.OleDb.OleDbDataAdapter myDataAdapter;
string szSQL;
szSQL = "Select * From 公交车站路线 " + " Where 线路名 ='"+szLineName+"' And 站名 ='"+szStationName+" '";
myDataAdapter = new System.Data.OleDb.OleDbDataAdapter(szSQL,myConnection);
myDataAdapter.Fill(dataSet,"索引");
System.Data.DataTable indexTbl = dataSet.Tables["索引"];
System.Data.DataRow[] rowsType = indexTbl.Select();
if (0 == rowsType.Length)
return -1;
return (int)rowsType[0]["顺序"];
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -