C#+SharpMap的相关代码
//放大的代码:
private void MapZoomIn(NameValueCollection queryString)
{
SharpMap.Map map = Session["map"] as SharpMap.Map;
PointF pointFLeftBottom = new PointF(float.Parse(queryString["Left"]), float.Parse(queryString["Bottom"]));
PointF pointFRightTop = new PointF(float.Parse(queryString["Right"]), float.Parse(queryString["Top"])); SharpMap.Geometries.BoundingBox zoomToBoundingBox = new SharpMap.Geometries.BoundingBox(map.ImageToWorld(pointFLeftBottom), map.ImageToWorld(pointFRightTop));
map.ZoomToBox(zoomToBoundingBox);
Session.Remove("map");
Session["map"] = map;
} //缩小的代码:
private void MapZoomOut(NameValueCollection queryString)
{
SharpMap.Map map = Session["map"] as SharpMap.Map;
PointF pointFLeftBottom = new PointF(float.Parse(queryString["Left"]), float.Parse(queryString["Bottom"]));
PointF pointFRightTop = new PointF(float.Parse(queryString["Right"]), float.Parse(queryString["Top"]));
SharpMap.Geometries.BoundingBox boundingBox = new SharpMap.Geometries.BoundingBox(map.ImageToWorld(pointFLeftBottom), map.ImageToWorld(pointFRightTop));
SharpMap.Geometries.Point mapCenterPoint = boundingBox.GetCentroid(); double ratio = 0.0;
double ratioX=boundingBox.Width / map.Envelope.Width;
double ratioY=boundingBox.Height / map.Envelope.Height;
if (ratioX > ratioY)
{
ratio = ratioX;
}
else
{
ratio = ratioY;
}
double semiWidth = map.Envelope.Width / ratio / ;
double semiHeight = map.Envelope.Height / ratio / ;
SharpMap.Geometries.BoundingBox zoomToBoundingBox = new SharpMap.Geometries.BoundingBox(mapCenterPoint.X - semiWidth, mapCenterPoint.Y - semiHeight, mapCenterPoint.X + semiWidth, mapCenterPoint.Y + semiHeight); map.ZoomToBox(zoomToBoundingBox);
Session.Remove("map");
Session["map"] = map; } //平移的代码:
private void MapPan(NameValueCollection queryString)
{
SharpMap.Map map = Session["map"] as SharpMap.Map;
PointF pointFFirst = new PointF(float.Parse(queryString["FirstX"]), float.Parse(queryString["FirstY"]));
PointF pointFSecond = new PointF(float.Parse(queryString["SecondX"]), float.Parse(queryString["SecondY"])); SharpMap.Geometries.Point firstPoint = map.ImageToWorld(pointFFirst);
SharpMap.Geometries.Point secondPoint = map.ImageToWorld(pointFSecond);
SharpMap.Geometries.Point mapCenterPoint = map.Center; SharpMap.Geometries.Point mapNewCenterPoint = new SharpMap.Geometries.Point(mapCenterPoint.X + firstPoint.X - secondPoint.X, mapCenterPoint.Y + firstPoint.Y - secondPoint.Y);
map.Center = mapNewCenterPoint; Session.Remove("map");
Session["map"] = map;
} //全图显示的代码:
private void MapFullExtent(NameValueCollection queryString)
{
SharpMap.Map map = Session["map"] as SharpMap.Map;
map.ZoomToExtents();
Session.Remove("map");
Session["map"] = map;
} //空间查询的代码:
private void MapQuery(NameValueCollection queryString)
{
SharpMap.Map map = Session["map"] as SharpMap.Map;
PointF pointFLeftBottom = new PointF(float.Parse(queryString["Left"]), float.Parse(queryString["Bottom"]));
PointF pointFRightTop = new PointF(float.Parse(queryString["Right"]), float.Parse(queryString["Top"]));
SharpMap.Geometries.BoundingBox boundingBox = new SharpMap.Geometries.BoundingBox(map.ImageToWorld(pointFLeftBottom), map.ImageToWorld(pointFRightTop));
SharpMap.Data.FeatureDataSet featureDataSet = new SharpMap.Data.FeatureDataSet(); ILayer pLayer = map.GetLayerByName(queryString["LayerName"]);
SharpMap.Layers.VectorLayer vectorLayer = pLayer as SharpMap.Layers.VectorLayer;
vectorLayer.DataSource.ExecuteIntersectionQuery(boundingBox, featureDataSet);
if (featureDataSet.Tables.Count > ) //得到了结果
{
//增加点击选择的对象到selection图层
//这样就新增了一个图层,因此渲染该副地图则显示选中对象
SharpMap.Layers.VectorLayer layerSelected = new SharpMap.Layers.VectorLayer("Selection");
layerSelected.DataSource = new SharpMap.Data.Providers.GeometryProvider(featureDataSet.Tables[]);
layerSelected.Style.Fill = new System.Drawing.SolidBrush(System.Drawing.Color.Yellow);
map.Layers.Add(layerSelected);
}
Session.Remove("map");
Session["map"] = map;
} //长度测量的代码:
private void MapMeasurePolyline(NameValueCollection queryString, out string responseXML)
{
SharpMap.Map map = Session["map"] as SharpMap.Map;
string pointsCoordinate = queryString["PointsCoordinate"];
string[] pointCoordinatePair = pointsCoordinate.Split(',');
SharpMap.Geometries.LineString lineStringMeasure = new SharpMap.Geometries.LineString(); for (int i = ; i < pointCoordinatePair.Length / ; i++)
{
PointF pointF=new PointF(Convert.ToSingle(pointCoordinatePair[i*]),Convert.ToSingle(pointCoordinatePair[i*+]));
SharpMap.Geometries.Point point = map.ImageToWorld(pointF);
lineStringMeasure.Vertices.Add(point);
} StringBuilder resultsXML = new StringBuilder("");
resultsXML.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
resultsXML.Append("<map>");
resultsXML.Append("<measure>"); resultsXML.Append("<长度>");
resultsXML.Append("<![CDATA[");
resultsXML.Append(lineStringMeasure.Length.ToString());
resultsXML.Append("]]>");
resultsXML.Append("</长度>"); resultsXML.Append("</measure>");
resultsXML.Append("</map>");
responseXML = resultsXML.ToString();
}
C#+SharpMap的相关代码的更多相关文章
- [ARM] Cortex-M Startup.s启动文件相关代码解释
1. 定义一个段名为CSTACK, 这里: NOROOT表示如何定义的段没有被关联,那么同意会被优化掉,如果不想被优化掉就使用ROOT. 后面的括号里数字表示如下: (1):这个段是2的1次方即2字节 ...
- Kafka Producer相关代码分析【转】
来源:https://www.zybuluo.com/jewes/note/63925 @jewes 2015-01-17 20:36 字数 1967 阅读 1093 Kafka Producer相关 ...
- 命令行方式使用abator.jar生成ibatis相关代码和sql语句xml文件
最近接手一个老项目,使用的是数据库是sql server 2008,框架是springmvc + spring + ibatis,老项目是使用abator插件生成的相关代码,现在需要增加新功能,要添加 ...
- myBatis自动生成相关代码文件配置(Maven)
pom.xml文件添加配置 <build> <finalName>generator</finalName> <plugins> <!-- mav ...
- 临时2级页表的初始化过程 head_32.S 相关代码解释
page_pde_offset = (__PAGE_OFFSET >> 20); /* __PAGE_OFFSET是0xc0000000,page_pde_offset = 3072 = ...
- 使用Mybatis Generator自动生成Mybatis相关代码
本文将简要介绍怎样利用Mybatis Generator自动生成Mybatis的相关代码: 一.构建一个环境: 1. 首先创建一个表: CREATE TABLE pet (name VARCHAR(2 ...
- K:树、二叉树与森林之间的转换及其相关代码实现
相关介绍: 二叉树是树的一种特殊形态,在二叉树中一个节点至多有左.右两个子节点,而在树中一个节点可以包含任意数目的子节点,对于森林,其是多棵树所组成的一个整体,树与树之间彼此相互独立,互不干扰,但其 ...
- js 横屏 竖屏 相关代码 与知识点
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...
- 转:关于Latent Dirichlet Allocation及Hierarchical LDA模型的必读文章和相关代码
关于Latent Dirichlet Allocation及Hierarchical LDA模型的必读文章和相关代码 转: http://andyliuxs.iteye.com/blog/105174 ...
随机推荐
- Python封装
什么是封装 在程序设计中,封装(Encapsulation)是对具体对象的一种抽象,即将某些部分隐藏起来,在程序外部看不到,其 含义是其他程序无法调用. 要了解封装,离不开“私有化”,就是将类或者是函 ...
- 51单片机SRF寄存器
1.21个寄存器介绍 51系列单片机内部主要有四大功能模块,分别是I/O口模块.中断模块.定时器模块和串口通信模块(串行I/O口),如其结构和功能如下图: 图1 51单片机结构和功能图 ...
- Mac 10.12连接iSCSI硬盘软件iSCSI Initiator X
Mac下的iSCSI协议苹果一直以来没有集成,而网络上流传的最好用支持iSCSI硬盘的软件是globalSAN,但是这个软件是收费的,当然有破解版,只不多不太好找,因为现在用iSCSI的用户已经很少了 ...
- Spring Security构建Rest服务-1204-Spring Security OAuth开发APP认证框架之Token处理
token处理之一基本参数配置 处理token时间.存储策略,客户端配置等 以前的都是spring security oauth默认的token生成策略,token默认在org.springframe ...
- 转载:Spring学习总结
地址:http://www.cnblogs.com/best/tag/Spring/
- Java性能调优:利用JMC进行性能分析
JMC, 即Java任务控制(Java Mission Control)是从Java7(7u40)和 Java8 的商业版本包括一项新的监控和控制特性. JMC 程序 (JDK_HOME\bin目录下 ...
- LinuxC中全局变量environ
Linux C中environ 变量是一个char** 类型,存储着系统的环境变量. 要想遍历环境变量可以用下面这个程序: #include <stdio.h> extern char * ...
- Nodejs学习笔记(十一)—数据采集器示例(request和cheerio)
写在之前 很多人都有做数据采集的需求,用不同的语言,不同的方式都能实现,我以前也用C#写过,主要还是发送各类请求和正则解析数据比较繁琐些,总体来说没啥不好的,就是效率要差一些, 用nodejs写采集程 ...
- Mongodb添加副本及修改优先级
Mongodb添加副本及修改优先级 1.添加副本集 #在primary节点上执行 >rs.add( { host: "192.168.1.11:27017", priorit ...
- Spring IOC(DI)
软件152 余建强 1 什么是IOC IOC—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不 ...