首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在C#中从OpenStreetMap边界关系创建一个或多个多边形?

在C#中,可以使用OpenStreetMap的边界关系数据来创建一个或多个多边形。以下是一个基本的步骤:

  1. 获取OpenStreetMap的边界关系数据:可以通过OpenStreetMap的API或者下载OSM文件来获取边界关系数据。边界关系数据包含了地理区域的边界信息。
  2. 解析边界关系数据:使用C#的XML解析库,如XmlDocument或XDocument,解析边界关系数据。边界关系数据通常以XML格式存储。
  3. 提取多边形数据:从解析的边界关系数据中提取多边形的节点信息。多边形通常由一系列有序的节点组成。
  4. 创建多边形对象:使用C#的图形库,如System.Drawing或GDI+,根据提取的多边形节点信息创建多边形对象。
  5. 可选:进行多边形的优化和处理:根据需要,可以对创建的多边形进行优化和处理,如合并相邻的多边形、简化多边形的节点等。

下面是一个示例代码,演示如何从OpenStreetMap边界关系创建一个多边形:

代码语言:txt
复制
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Xml;

public class OpenStreetMapPolygonCreator
{
    public List<List<PointF>> CreatePolygonsFromBoundaryRelation(string boundaryRelationXml)
    {
        List<List<PointF>> polygons = new List<List<PointF>>();

        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(boundaryRelationXml);

        // 解析边界关系数据
        XmlNodeList memberNodes = xmlDoc.SelectNodes("//member[@type='way']");
        foreach (XmlNode memberNode in memberNodes)
        {
            string wayRef = memberNode.Attributes["ref"].Value;
            XmlNode wayNode = xmlDoc.SelectSingleNode($"//way[@id='{wayRef}']");
            if (wayNode != null)
            {
                List<PointF> polygon = new List<PointF>();

                // 提取多边形节点信息
                XmlNodeList ndNodes = wayNode.SelectNodes("nd");
                foreach (XmlNode ndNode in ndNodes)
                {
                    string nodeRef = ndNode.Attributes["ref"].Value;
                    XmlNode node = xmlDoc.SelectSingleNode($"//node[@id='{nodeRef}']");
                    if (node != null)
                    {
                        float lat = float.Parse(node.Attributes["lat"].Value);
                        float lon = float.Parse(node.Attributes["lon"].Value);
                        PointF point = new PointF(lon, lat);
                        polygon.Add(point);
                    }
                }

                polygons.Add(polygon);
            }
        }

        return polygons;
    }
}

这个示例代码使用了XmlDocument来解析XML数据,并通过XPath表达式提取边界关系数据和节点信息。最后,将提取的节点信息转换为PointF对象,创建多边形。

请注意,这只是一个基本的示例,实际应用中可能需要根据具体需求进行更多的处理和优化。另外,为了完整性和性能考虑,可能需要使用更高效的XML解析库和图形库。

对于OpenStreetMap边界关系的具体概念、分类、优势、应用场景以及腾讯云相关产品和产品介绍链接地址,建议参考OpenStreetMap官方文档和腾讯云的相关文档。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SQL2008空间数据类型--欧氏几何2类与方法

下图就能够反映出这些几何对象的类关系。 由于我自己本身对C#比较熟悉(其实其他语言也就不怎么会了),这里我就按照C#的方式来讲一下。 首先要将的是函数。...();相当于C#一个数组的Length属性集合的Count属性。...STGeometryN 返回几何图形集合实例的特定几何图形实例,传入参数n表示要取第几个图形,1开始计数。对于Point等非集合对象传入1则返回本身。...使用:SELECT @g.STGeometryN(1)。相当于C#的[n] MultiCurve类的方法: STIsClosed 确定实例是否闭合,也就是起点和终点相同。...STArea 返回集合中所有多边形的面积的总和,返回float类型。 这里就把每个类和类下面的方法介绍完了,下一次就讲讲两个对象之间的关系和操作了。

79020

OpenStreetMap介绍与OSM数据多种下载方法对比

在这里有一点需要注意:OSM数据在国家边界数据方面非常不准确,如有相关需求,大家可以其它网站获取对应边界数据。   接下来进入本文正题——OSM数据的下载。...首先,进入OSM官网:https://www.openstreetmap.org/。此时可以看到屏幕均为地图显示区域,需要点击左上角的“Export”按钮打开数据下载窗口。   ...其实,Planet OSM和我们前面选好的研究区域就没有多大关系了——因为刚刚也提到,其数据是全球的OSM数据整合(所以叫做Planet);也就是说,不管我们的研究区域是北京的一个区,还是整个上海市,再或者是一个河南省...方便我们后期直接用ArcMap等软件处理数据;再次,其还支持手动划定城市,例如假如我们要做洛阳这样一个比较小的三线城市的研究,其肯定不属于全球200多个主要城市的范围内,那么就可以我们手动划定多边形区域从而下载数据...7 ArcGIS Editor for OSM ArcGIS Editor for OpenStreetMap是ArcMap软件一个工具集,通过其可以实现基于ArcGIS相关软件直接下载OSM数据

2.5K30
  • 全球建筑矢量任意下载!微软补充发布7.7亿个全球建筑图斑

    小助手立马去看了下,建筑矢量是Bing Maps上提取的,下面一起看看数据情况。文末有数据下载链接。...我们2014年到2021年间的Bing Maps图像检测到了7.77亿座建筑物,包括Maxar和Airbus的图像。数据可在 ODbL 下免费下载和使用。 数据包括什么?...776,712,641 个建筑足迹多边形几何图形,以行分隔的 GeoJSON 格式分布在世界各地。 如何创建数据的?...建筑物提取分两个阶段完成: 语义分割——使用深度神经网络 (DNN) 识别航拍图像上的构建像素 多边形化——将建筑像素检测转换为多边形 第1阶段:语义分割 第2阶段:多边形化 数据下载 选择你所需区域直接下载即可...小助手这边随机下载了一个地区矢量,我们看看矢量效果如何。 数据包含区域 矢量格式是GeoJSON,可直接转换成.shp格式,依旧套合谷歌影像看看效果。 稍微有些偏移,不过整体还是不错。

    1.4K10

    4.OpenStreetMap Data Model

    OpenStreetMap一个开源项目,旨在为用户免费创建生成世界各的地图。 ? OpenStreetMap数据以OSM XML文件(.osm文件)的形式出现。 <?...这个特征可以是道路,公园的边界,或者地图上的其他特征。每种道路至少有一个标记,该标记表示关于该道路的一些信息,并且每种道路还属于至少一个关系,如下所述。...关系 关系是记录其他数据元素之间关系的数据结构。来自OpenStreetMap wiki的示例包括: 一种路线关系,列出形成主要公路、自行车道公共汽车路线的方式。...描述有孔区域的多多边形,该区域的外边界和内边界由两种方式给出。...OSM数据存储在一个模型类,该模型类包含节点、方法、道路和其他OSM对象的嵌套结构 RouteModel类 Model当前代码存在的类并不包含执行A *搜索所需的所有数据方法,因此我们将用一个RouteModel

    84520

    Python地理可视化入门【使用Folium在地图上展示数据】

    在上面的代码,我们创建一个地图对象mymap,然后使用folium.TileLayer添加了三个不同样式的图层:OpenStreetMap、CartoDB Positron和CartoDB Dark...地图上绘制形状除了添加标记点和展示数据,Folium还支持在地图上绘制各种形状,多边形、圆形等。...在上面的代码,我们创建一个地图对象mymap,然后使用folium.Polygon添加了一个多边形,并使用folium.Circle添加了一个圆形。您可以根据需要调整形状的位置、颜色、填充等参数。...运行以上代码,您将得到一个名为shapes.html的HTML文件,打开它,您将看到一个包含了多边形和圆形的地图。添加图例在地图中添加图例可以帮助观众更好地理解地图上展示的数据形状的含义。...自定义图层样式:除了默认的地图样式外,Folium还支持添加自定义的图层样式,OpenStreetMap、CartoDB Positron和CartoDB Dark Matter等,以满足不同的需求。

    46910

    POSTGIS 总结

    PostGIS提供了一系列的二元谓词(Contains、Within、Overlaps和Touches)用于检测空间对象之间的空间关系,同时返回布尔值来表征对象之间符合这个关系。...每当创建新索引对表大量更新、插入删除后,都必须执行清理(VACUUMing)。VACUUM命令要求PostgreSQL回收表页面因记录的更新删除而留下的任何未使用的空间。...ST_PointOnSurface(geometry) —— 返回保证在输入多边形内的点。计算上讲,它比centroid操作代价要大得多。...要使用此功能,请在行数据包含一个JSONB列,该列通过在一级深度下包含多个Json对象来存储多个不同属性集。JSONB的键和值将被编码为要素属性。...可以通过”||“操作符调用多次这个函数来同时创建多个图层的同一位置的矢量切片。

    6.1K10

    地理空间数据库复习笔记:关系数据库标准语言、几何对象模型与查询

    可使用extract函数timestamp类型变量中提取年月日信息,:extract(year from date) 绘制日均租车量-时间变化直方图(在sql仅需输出month与number):...线段(Line): 折线的特例,只有两个点的线串 环线(LineRing): 由折线派生而来,闭合的、不自相交相切的折线 面(Surface): 二维几何对象类,代表一个边界、零到多个边界组成的几何对象...在三维空间中,可能是一个同构的曲面 多边形(Polygon) 二维坐标空间中由一个边界、零到多个边界定义的平坦表面,由一个一个以上的线环聚合而成,省份 仅支持由折线串围成的多边形...): 由一个多个几何对象组成的集合,其中的元素必须具有相同的空间参考系和测量参考系 多点(MultiPoint): 零维的几何类集合,由多个点聚合而成,代表空间中的多个点,例如多个岛屿 多面(...由多条折线聚合而成,由多条河流组成的水系 多曲线允许出现弧线,多折线由折线组成 多多边形(MultiPolygon): 多面的子类,由多个多边形对象聚合而成,例如多个岛屿组成的群岛(大比例尺) 坐标维数和几何维数的区别

    1.1K20

    Geo-fencing算法

    边界定义:根据业务需求,设置一个多个虚拟边界,即Geo-fence。这些边界可以是圆形、矩形、多边形其他形状,大小可以自由设定。...事件处理与通知:一旦检测到设备与Geo-fence的关系变化,进入离开,就会触发预先设定的事件,比如发送通知、启动应用功能、记录行为数据等。...同时,也需要硬件设备支持,智能手机、物联网设备等,能够获取和传输位置信息。Geo-fencing算法是一系列用于确定一个设备是否在特定地理区域内(即“围栏”内)的计算方法。...以下是一个典型的Geo-fencing算法流程,以及它如何工作:算法流程1. 定义地理围栏坐标点:定义围栏的边界,通常是通过一系列的经纬度坐标点。形状:围栏可以是圆形、多边形矩形。2....)def is_inside_polygon(polygon, point): # 创建一个点出发的水平射线 x_intersections = 0 for i in range(len

    11920

    CGAL功能大纲

    这些功能需要对数据进行计算,这将推动创建一个新的内核概念,扩展CGAL内核概念,该概念仅限于FieldNumberType的对象和功能。...[带洞多边形拓扑规定]一个有洞的二维多边形称之为外轮廓,在其有界区域内有零个多个轮廓,称为内轮廓孔。外轮廓的有界区域与内轮廓的无界区域的交点是带孔多边形的内部。...在实体建模,使用了两种主要的表示方案:构造实体几何(CSG)和边界表示(B-rep)。两者都有优点和缺点。 在CSG,实体表示为基本实体对象(块、棱镜、柱面环面)的布尔组合。...Alpha形状可用于密集的无组织数据点集进行形状重建。事实上,α-shape划定的边界,这是一个线性近似的原始形状。...要网格化的域是一个必须有界的三维空间区域。该区域可以连接多个组件细分在几个子域中。域作为输入,能够回答域上的一些不同类型的查询。边界和细分曲面光滑分段光滑,由平面曲面斑块形成。

    1.2K10

    python地理处理包shapely

    文章目录 构建集合图形以及获取集合图形点信息 多边形显示 多边形分割 Polygon 被 MultiLineString 切割 merge 多个多边形 Python形状多边形中提取点/坐标 检查地理点是否在...Python多边形外 Python中用shapely做(1)生成二个多边形区域,计算想交的面积(2)生成一个点与一多边 通过点缓冲来构建一个缓冲圆 一般对象和方法 Points LineString...然后根据包含关系,获取望京内部的AOI信息,需要做个buffer,不然有些边界的区域会出错 ?...(coordinates) LineString构造函数采用2个更多(x,y[,z])点元组的有序序列 构造的LineString对象表示点之间的一个多个连接的线性样条曲线。...第一个是(x,y[,z])点元组的有序序列,其处理方式与LinearRing完全相同。第二个是一个可选的无序的环状序列,指定了特征的内部边界“洞” 有效多边形的环不能相互交叉,且只能接触一个点。

    4.4K40

    18种PCB设计特殊布线的画法与技巧!

    要是不记得快捷键, 没关系, 随时按 "`" 可以显示当前支持的操作。 ? 可以看到网络的长度, 不止一个地方哟 ? 等长可使用调节器完成等长布线 2. 大电流走线中去除阻焊层 ? ?...原理图到PCB ? 在原理图中用鼠标框选一块电路选中若干个器件,按 T—>S,就能马上切换到 PCB ,同步选中那些器件。 ? 5. 走线换层、操作过孔,操作走线 ? ? 6.... Word Excel 拷贝数据到 PCB 中支持的图元文件包括位图,线,圆弧,简单填充和 true type 文字,允许您简单的粘贴 logos 和其他图形。 8....丝印文字反色输出及位置设置 PCB 编辑增添了新的有效字符串属性框选项,新的选项可以为使用了 True Type 字体的反转文本定义不同矩形边界范围,而不是原来使用反转文本本身的边界。 ?...各种~多边形填充 使用以选择对象定义多边形形状功能使得用外部资源( DXF、AutoCAD 等)来创建公司 Logos 多边形非常容易。

    2K20

    全球公用事业级太阳能发电场卫星数据集

    目前这些来源包括 OpenStreetMap (OSM) 搜集的大型太阳能发电场 来自 Kruitwagen 等人的 "全球太阳能光伏发电装置清单 "的经过验证的几何图形。...为了能够跟踪每次运行的原始探测结果,并提供详细的来源信息,我们提供了所有这些原始多边形,以及一个源文件,其中列出了每个分析级多边形包含的所有原始多边形。...raw_polygons.gpkg 包含以下字段: id:原始源多边形的 ID 几何体:定义资产的多边形多边形 来源:"solar asset mapper"、"osm " "2019_global_pv...为了估算整个数据的误报率,我们正面标注的太阳能资产中随机选取了约 2000 个检测子集。利用高分辨率图像对每个检测结果进行更严格的审查验证。这项分析得出的误报率预计约为 1%。...该模型无法区分同一国家中非常密集和非常稀疏(双轴跟踪)的工厂。地面覆盖率异常高异常低的工厂将无法获得准确的产能估算。 1.3.4 建造日期估算 我们无法直接估算工厂的建设日期。

    8210

    一篇文章带你玩转PostGIS空间数据库

    几何图形创建函数"以几何图形作为输入并输出新的图形。 3.1 以点代形 组成空间查询时的一个常见需求是将多边形要素替换为要素的点表示。...ST_PointOnSurface(geometry) —— 返回保证在输入多边形内的点。计算上讲,它比centroid操作代价要大得多。...3.3 重叠、相并 另一个经典的GIS操作 - 叠置(overlay)- 通过计算两个重叠多边形的交集来创建新的几何图形。...下图是线性参考在交通网实际的应用,红色的就是线性参考。 用下列的语法可以创建一个一个线性参考。...注意上面有一个dim参数,规则是:对于上例多边形,内部的交集是二维区域,因此矩阵的对应部分用"2"填充。边界仅在零维点处相交,因此对应矩阵部分用"0"填充。 再举一个栗子。

    6K50

    Unity中进行碰撞检测的基本方法、原理与实现例子

    Unity中进行碰撞检测的原理在Unity,碰撞检测是基于物理引擎进行的。Unity使用了一个基于迭代的动态模拟物理引擎,用于模拟刚体(Rigidbody)的运动和碰撞效果。...PolygonCollider2D:多边形碰撞器。通过给物体添加相应的碰撞器,并设置其相关参数,可以实现物体之间的碰撞检测。触发器在Unity的2D物理引擎,还可以使用触发器来实现碰撞检测和响应。...可以在C#脚本中使用这些事件来编写碰撞检测和响应的逻辑。常用的物理属性在Unity的2D物理引擎,还有一些常用的物理属性可以使用。...在Unity实现角色与地图边界的碰撞检测和反应可以通过以下步骤进行:创建角色和地图边界的游戏对象,并将它们添加到场景。确保地图边界的碰撞器类型为Box Collider,使其与角色产生碰撞。...这是一个简单的示例,仅用于说明如何在Unity实现角色与地图边界的碰撞检测和反应。

    2.8K32

    50款大数据分析工具

    ❖ Leaflet:Leaflet是一个开源的JavaScript库,用来开发移动友好地交互地图。 ❖ Openlayers:Openlayers可能是所有地图库可靠性最高的一个。...,用来创建任意类型的SVG交互式图形,可生成包括线、矩形、多边形、椭圆、弧线等图形。...❖ OpenStreetMapOpenStreetMap一个世界地图,由像您一样的人们所构筑,可依据开放协议自由使用。...它可以把数据(Google Spreadsheet的表单)转化为交互式的地图应用,并在网上分享。 ❖ Sigma.js:Sigma.js是一个开源的轻量级库,用来显示交互式的静态和动态图表。...❖ Circos:Circos最初主要用于基因组序列相关数据的可视化,目前已应用于多个领域,例如:影视作品的人物关系分析,物流公司的订单来源和流向分析等,大多数关系型数据都可以尝试用Circos来可视化

    3.5K20

    【干货】数据可视化分析工具大集合

    jsDraw2DX jsDraw2DX是一个标准的JavaScript库,用来创建任意类型的SVG交互式图形,可生成包括线、矩形、多边形、椭圆、弧线等图形。 ? ?...iCharts有交互元素,可以Google Doc、Excel表单和其他来源获取数据。 ? ?...Circos Circos最初主要用于基因组序列相关数据的可视化,目前已应用于多个领域,例如:影视作品的人物关系分析,物流公司的订单来源和流向分析等,大多数关系型数据都可以尝试用Circos来可视化。...OpenStreetMap OpenStreetMap一个世界地图,由像您一样的人们所构筑,可依据开放协议自由使用。 ? ?...OpenHeatMap OpenHeatMap简单易用,用户可以用它上传数据、创建地图、交流信息。它可以把数据(Google Spreadsheet的表单)转化为交互式的地图应用,并在网上分享。

    2.5K50

    可视化分析工具大集合,让数据美如画

    jsDraw2DX jsDraw2DX是一个标准的JavaScript库,用来创建任意类型的SVG交互式图形,可生成包括线、矩形、多边形、椭圆、弧线等图形。 ? ?...iCharts有交互元素,可以Google Doc、Excel表单和其他来源获取数据。 ? ?...Circos Circos最初主要用于基因组序列相关数据的可视化,目前已应用于多个领域,例如:影视作品的人物关系分析,物流公司的订单来源和流向分析等,大多数关系型数据都可以尝试用Circos来可视化。...OpenStreetMap OpenStreetMap一个世界地图,由像您一样的人们所构筑,可依据开放协议自由使用。 ? ?...OpenHeatMap OpenHeatMap简单易用,用户可以用它上传数据、创建地图、交流信息。它可以把数据(Google Spreadsheet的表单)转化为交互式的地图应用,并在网上分享。

    2.4K90

    geopandas:Python绘制数据地图

    _subplots.AxesSubplot at 0x7f75ed256d60> 4.2 空间连接 空间连接允许将两个多个空间数据集合并成一个新的数据集。...convex_hull:返回一个GeoSeries,其中包含表示包含每个对象中所有点的最小凸多边形的几何形状,除非对象的点数小于三个。对于两个点,凸包会折叠成一个线串;对于一个点,凸包是一个点。...envelope:返回一个GeoSeries,其中包含包含每个对象的点最小矩形多边形(其边与坐标轴平行)的几何形状。...以下为具有一个多边形一个缺失值和一个多边形的GeoSeries示例: from shapely.geometry import Polygon s = gpd.GeoSeries([Polygon(...Python库,它提供了一种简单的方法将背景地图(通常是Web瓦片地图,OpenStreetMap、Stamen Maps、Mapbox等)添加到地理空间数据可视化

    3.4K41
    领券