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 ...
随机推荐
- D09——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D09 20180903内容纲要: 线程.进程 1.paramiko 2.线程.进程初识 3.多线程 (1)线程的调用方式 (2)join (3)线程锁.递归锁. ...
- 【xsy1122】 路径 点分治+trie
题目大意:给你一棵n个点的树,树边上有边权,对于每一个点,你要求出经过该点的所有的路径中,路径异或和最大的值. 数据范围:$n≤10^5$,边权$≤10^9$. 我们考虑枚举每一条路径,显然这个是会T ...
- WebDriverAPI(2)
操作浏览器窗口 被测网址http:http://www.baidu.com Java语言版本的API实例代码 String url = "http://www.baidu.com" ...
- 用Python玩转数据——第五周数据统计和可视化
一.数据获取 1.本地数据 with 语句,pd.read_csv('data.csv') 2.网站上数据 2.1 直接获取网页源码,在用正则表达式进行删选 2.2 API接口获取---以豆瓣为例 i ...
- (转)AIX光盘备份与恢复
AIX光盘备份与恢复 在此之前,说明一下光盘映像的格式UDF和ISO9660 ISO9660: 这是国际标准化组织(ISO)于1985年颁布的通用光盘文件系统.目前使用最广泛的光盘文件系统,能被所有的 ...
- vue-devtools必备工具
1.github下载地址:https://github.com/vuejs/vue-devtools 2.下载安成之后打开cmd进入vue-devtools文件夹把依赖装好npm install 之后 ...
- php如何判断字符串是否是字母和数字的组合
转载自百度 /其实判断是否是字母和数字或字母数字的组合还可以用PHP ctype_alnum函数 if(!ctype_alnum($vipurl)){ echo '只能是字母或数字的组合';exit; ...
- 《Android应用性能优化》1——代码
1.Java代码优化 1.1 代码执行 通常情况下,不必看应用的字节码.在平台是Android2.2(Froyo)和更高版本的情况下尤其如此,因在Android2.2中引入了实时(JIT)的编译器.D ...
- 一口一口吃掉Hexo(六)
如果你想得到更好的阅读效果,请访问我的个人网站 ,版权所有,未经许可不得转载! 不知不觉已经更新到了最后一节了,很开心你能看到这一节,相信你也已经在你的虚拟主机上成功部署了你的网站,但是可能总会遇到一 ...
- fine ui使用笔记
1.top.X.alert("保存成功"); 2.Alert.GetShowInTopReference("这是在服务器端生成的客户端事件"); 注明:1与2等 ...