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 ...
随机推荐
- POJ 1095
#include <iostream> #define MAXN 20 using namespace std; __int64 cat[MAXN]; int sum; void give ...
- POJ 1083
#include<iostream> #include<stdio.h> #include<algorithm> #define MAXN 400 using na ...
- Hive Cli相关操作
landen@Master:~/UntarFile/hive-0.10.0$ bin/hive --database 'stuchoosecourse' -e 'select * from hidde ...
- OpenGL12-shader(GLSL)着色语言3-(属性参数)(代码已上传)
上一个例程中,使用了uniform 类型的变量,uniform可以理解为全局变量,这一节中使用 的是attribute类型的变量,翻译过来就是属性,他是与顶点绑定的,就意味着一个顶点可以 有很多个属性 ...
- 微服务Kong(十)——负载均衡参考
KONG为请求多个后端服务提供了多种负载均衡方案:一种是简单的基于DNS,另一种是更加动态的环形均衡器,他在不需要DNS服务器的情况下也允许服务注册. 一.基于DNS的负载均衡 当使用基于DNS的负载 ...
- python笔记06-----常用模块(time,os,sys,random)
模块 1. 模块的定义和导入 定义: 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件(文件名:test.py对应的模块名:test) ...
- docker 私有仓库的创建
1, 下载registry镜像 sudo docker pull registry 2, 启动镜像 docker run -d --name registry -h registry -p 5000: ...
- C#读取excel文件的内容(使用DataSet)
C#读取Excel文件的内容,通过OLEDB来连接,关键是连接的路径,如:string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data S ...
- RR和RC复合语句加锁
mysql版本:5.7 RR复合语句: insert/update/delete+select,+号左边是影响数据的排他锁,+号右边是查询(当前读,其实相当于lock in share mode)到数 ...
- Kafka消息重新发送
Kafka消息重新发送 1. 使用kafka消息队列做消息的发布.订阅,如果consumer端消费出问题,导致数据并没有消费,此时不需要担心,数据并不会立刻丢失,kafka会把数据在服务器的磁盘 ...