查询定位主要分两种情况,一个是查询的结果是点、一个是多边形,因此在程序中需要针对不同的结果进行定位显示
public void LocationBySql(String LayerName, String FieldName, String SearchStr, PictureBox m_PictureBox)
{
fuzhou.RecordSet m_recordset = new FzSecurityGisServer.fuzhou.RecordSet();
m_recordset = QueryFeatureData(LayerName, FieldName, SearchStr);
for (int i = 0; i < m_recordset.Records.GetLength(0); i++)
{
fuzhou.Geometry m_geometry=new FzSecurityGisServer.fuzhou.Geometry() ;
fuzhou.GeometryDef m_GeometryDef = new fuzhou.GeometryDef();
fuzhou.Field m_Field = new FzSecurityGisServer.fuzhou.Field();
for (int j = 0; j < m_recordset.Fields.FieldArray.GetLength(0); j++)
{
m_Field = m_recordset.Fields.FieldArray[j];
if (m_Field.Type == fuzhou.esriFieldType.esriFieldTypeGeometry)
{
m_GeometryDef = m_Field.GeometryDef;
if (m_GeometryDef.GeometryType == fuzhou.esriGeometryType.esriGeometryPolygon)
{
fuzhou.PolygonN pgnn = m_recordset.Records[i].Values[j] as fuzhou.PolygonN;
fuzhou.EnvelopeN pEnvelope = pgnn.Extent as fuzhou.EnvelopeN;
fuzhou.MapDescription pMapDescription = m_sMapDesc;
double eWidth = Math.Abs(pEnvelope.XMax - pEnvelope.XMin);
double eHeight = Math.Abs(pEnvelope.YMax - pEnvelope.YMin);
double xFactor = (eWidth - (eWidth * 1.5)) / 2;
double yFactor = (eHeight - (eHeight * 1.5)) / 2;
pEnvelope.XMax = pEnvelope.XMax - xFactor;
pEnvelope.XMin = pEnvelope.XMin + xFactor;
pEnvelope.YMax = pEnvelope.YMax - yFactor;
pEnvelope.YMin = pEnvelope.YMin + yFactor;
fuzhou.MapExtent pMapExtext = new fuzhou.MapExtent();
pMapExtext.Extent = pEnvelope;
pMapDescription.MapArea = pMapExtext;
m_sMapDesc = pMapDescription;
drawMap(ref pMapDescription, m_PictureBox);
}
if (m_GeometryDef.GeometryType == fuzhou.esriGeometryType.esriGeometryPoint)
{
fuzhou.PointN m_point = m_recordset.Records[i].Values[j] as fuzhou.PointN;
fuzhou.EnvelopeN pEnvelope = new fuzhou.EnvelopeN() ;
pEnvelope.XMax = m_point.X;
pEnvelope.XMin = m_point.X;
pEnvelope.YMax = m_point.Y;
pEnvelope.YMin = m_point.Y;
fuzhou.MapDescription pMapDescription = m_sMapDesc;
double eWidth = 1000;
double eHeight = 1000;
double xFactor = (eWidth - (eWidth * 1.5)) / 2;
double yFactor = (eHeight - (eHeight * 1.5)) / 2;
pEnvelope.XMax = pEnvelope.XMax - xFactor;
pEnvelope.XMin = pEnvelope.XMin + xFactor;
pEnvelope.YMax = pEnvelope.YMax - yFactor;
pEnvelope.YMin = pEnvelope.YMin + yFactor;
fuzhou.MapExtent pMapExtext = new fuzhou.MapExtent();
pMapExtext.Extent = pEnvelope;
pMapDescription.MapArea = pMapExtext;
// save the map description and draw the map
m_sMapDesc = pMapDescription;
drawMap(ref pMapDescription, m_PictureBox);
}
}
}
}
}
本文来源【学网】网站链接是http://www.xue5.com