开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
develop
分支 (1)
develop
develop
分支 (1)
develop
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
develop
分支 (1)
develop
ProcessController.cs 6.66 KB
一键复制 编辑 原始数据 按行查看 历史
FObermaier 提交于 2013年03月01日 22:20 +08:00 . [Trunk]
namespace SharpMap.Demo.Wms.Controllers
{
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Web.Mvc;
using GeoAPI.Geometries;
using NetTopologySuite.Geometries;
using NetTopologySuite.Geometries.Utilities;
using NetTopologySuite.IO;
using NetTopologySuite.Operation.Linemerge;
using NetTopologySuite.Operation.Polygonize;
using NetTopologySuite.Operation.Union;
using NetTopologySuite.Simplify;
using SharpMap.Converters.GeoJSON;
public class ProcessController : Controller
{
private readonly IGeometryFactory factory = GeometryFactory.Default;
private IGeometryCollection ValidateGeo(string geo)
{
if (String.IsNullOrEmpty(geo))
throw new ArgumentException("invalid argument 'geo': empty string");
WKTReader reader = new WKTReader(this.factory);
IGeometry data = reader.Read(geo);
// we should expect a GeometryCollection object
if (data is IGeometryCollection)
return data as IGeometryCollection;
throw new ArgumentException("invalid argument 'geo': IGeometryCollection expected");
}
private ILineString ValidateCut(string cut)
{
if (String.IsNullOrEmpty(cut))
throw new ArgumentException("invalid argument 'cut': empty string");
WKTReader reader = new WKTReader(this.factory);
IGeometry data = reader.Read(cut);
// we should expect a GeometryCollection object
if (data is ILineString)
return data as ILineString;
throw new ArgumentException("invalid argument 'cut': ILineString expected");
}
private ActionResult MakeResponse(IEnumerable<IGeometry> geometries)
{
if (geometries == null)
throw new ArgumentNullException("geometries");
// we should return a GeometryCollection object
IGeometry[] array = geometries.ToArray();
IGeometryCollection result = this.factory.CreateGeometryCollection(array);
StringWriter writer = new StringWriter();
GeoJSONWriter.Write(result, writer);
return this.Json(new { geo = writer.ToString() });
}
private static IEnumerable<IGeometry> GetItems(IGeometry coll)
{
if (coll == null)
throw new ArgumentNullException("coll");
for (int i = 0; i < coll.NumGeometries; i++)
yield return coll.GetGeometryN(i);
}
[HttpPost]
public ActionResult Clean(string geo)
{
IGeometryCollection coll = this.ValidateGeo(geo);
IEnumerable<IGeometry> data = DoClean(coll);
return this.MakeResponse(data);
}
private static IEnumerable<IGeometry> DoClean(IGeometryCollection coll)
{
if (coll == null)
throw new ArgumentNullException("coll");
IEnumerable<IGeometry> items = GetItems(coll);
foreach (IGeometry geom in items)
{
DouglasPeuckerSimplifier simplifier = new DouglasPeuckerSimplifier(geom);
IGeometry clean = simplifier.GetResultGeometry();
yield return clean;
}
}
[HttpPost]
public ActionResult Merge(string geo)
{
IGeometryCollection coll = this.ValidateGeo(geo);
IEnumerable<IGeometry> data = DoMerge(coll);
return this.MakeResponse(data);
}
private static IEnumerable<IGeometry> DoMerge(IGeometryCollection coll)
{
if (coll == null)
throw new ArgumentNullException("coll");
IEnumerable<IGeometry> items = GetItems(coll);
yield return UnaryUnionOp.Union(items.ToArray());
}
[HttpPost]
public ActionResult Split(string geo, string cut)
{
IGeometryCollection coll = this.ValidateGeo(geo);
ILineString split = this.ValidateCut(cut);
IEnumerable<IGeometry> data = DoSplit(coll, split);
return this.MakeResponse(data);
}
public static IGeometry Polygonize(IGeometry geometry)
{
if (geometry == null)
throw new ArgumentNullException("geometry");
var lines = LineStringExtracter.GetLines(geometry);
var geoms = lines.ToList();
var polygonizer = new Polygonizer();
polygonizer.Add(geoms);
var polys = polygonizer.GetPolygons();
return geometry.Factory.BuildGeometry(polys);
}
private static IEnumerable<IGeometry> DoSplit(IGeometryCollection coll, ILineString cut)
{
if (coll == null)
throw new ArgumentNullException("coll");
if (cut == null)
throw new ArgumentNullException("cut");
// adapted from 'SplitPolygon WPS' GeoServer extension:
// https://github.com/mdavisog/wps-splitpoly/tree/master/src
IList<IGeometry> output = new List<IGeometry>();
IEnumerable<IGeometry> items = GetItems(coll);
IEnumerable<IGeometry> valid = items.Where(i => i is IPolygon);
foreach (IGeometry item in valid)
{
IGeometry nodedLinework = item.Boundary.Union(cut);
IGeometry polygons = Polygonize(nodedLinework);
// only keep polygons which are inside the input
for (int i = 0; i < polygons.NumGeometries; i++)
{
IPolygon candpoly = (IPolygon)polygons.GetGeometryN(i);
if (item.Contains(candpoly.InteriorPoint))
output.Add(candpoly);
}
}
return output;
/*
IEnumerable<IGeometry> items = GetItems(coll);
LineMerger merger = new LineMerger();
merger.Add(items);
merger.Add(cut);
IList<IGeometry> list = merger.GetMergedLineStrings();
IGeometry union = UnaryUnionOp.Union(list);
Polygonizer polygonizer = new Polygonizer();
polygonizer.Add(union);
ICollection<IGeometry> split = polygonizer.GetPolygons();
return split;
* */
}
}
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C#
1
https://gitee.com/wensten/SharpMap.git
git@gitee.com:wensten/SharpMap.git
wensten
SharpMap
SharpMap
develop
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /