图片缩略图

开放地图功能

version 1.4.0.0 (14.1 KB) by Ioannis Filippidis
从OpenStreetMap XML文件加载地图,提取连接,绘制道路网络和查找最短路径。
4.7
29日评级

74下载

更新2016年11月15日

来自GitHub.

视图版本历史

在github上查看许可证

该软件包包括使用OpenStreetMap XML数据文件(扩展名' .osm ')的功能,如下载的http://www.openstreetmap.org,:
1)导入并解析XML数据文件,并将解析后的数据存储在MATLAB结构中。这些数据代表了交通网络的图表。
2)绘制MATLAB结构图,得到交通网络及其节点及其标签的可视化。

3)提取表征网络连通性(即道路交叉口)的有向图的邻接矩阵。

4)寻找网络内节点之间的最短路径。注意,距离是通过交叉节点之间的过渡数来度量的,而不是通过地图来度量的。

GitHub上的开发和发布:
https://github.com/johnyf/openstreetmap
(链接)。

PDF文档、捆绑的依赖项和一个示例文件映射。osm '可以在GitHub的发布页面找到:

https://github.com/johnyf/openstreetmap/releases

示例文件' map。Osm '可以和' usage_example.m '一起使用。

引用作为

Ioannis Filippidis(2021)。开放地图功能GitHub (https://github.com/johnyf/openstreetmap)。检索

意见及评分(91

Sadra Hemmati.

谢谢你分享你的代码,让它开放。我在运作上确实有问题。下面是运行usage_example.m后的错误。你能指导一下吗?

> > usage_example
未定义变量“map”或类“map.osm”。

parse_openstreetmap错误(第42行)
osm_xml = map.osm;

USAGE_EXAMPLE中的错误(第29行)
[parsed_osm,osm_xml] = parse_openstreetmap(OpenStreetMap_Filename);

吉罗

有类似的工具,如OSMConvert,将PBF文件转换为OSM文件。
但是需要注意的是,pbf是osm的压缩格式。
原始osm文件可能比pbf大1倍。

马丁Metzger

嗨,如何以PBF格式打开数据?

Abdumuttalip taylan

merhaba
Openstreetmap paketlerin nasıl bileştirme yapılıyor。

Ebrahim Atya

做得好。
我想知道当我点击地图时,是否可以输出经度和纬度?

詹姆斯·弗林

你好,

首先,这是一个很棒的包,节省了我很多时间,所以谢谢你!
我希望有人能帮我解决这个问题。我需要提取或生成一个矩阵,包含大约每10米的坐标横跨整个道路网络,包括长直道路。这是可能的吗?目前我只能检索在道路交叉口和弯道处的节点,这些节点在网络上留下了很大的空隙,没有坐标数据。

提前谢谢!
周杰伦

马克斯·马克斯

TG

你好,
我知道在函数中节点之间的距离总是取1。然而,这导致了奇怪的最短路由,因为节点被跳过了。是否有一种方法可以计算节点之间的距离,并可以在函数中实现?

谢谢提前
蒂姆

菲利普•福克斯

杰西卡Dilks

你好,
我正在创建一个项目的最佳路线,我想导入整个国家(或多达3如果可能)在MATLAB。我有整个国家的数据作为osm。pbf文件(https://wiki.openstreetmap.org/wiki/PBF_Format#File_format),请浏览本网页:https://download.geofabrik.de/europe.html.这些文件可以使用这个包吗?我已经在更小的区域(伦敦的一部分)使用了这个,这花费了一段时间,所以即使我可以得到。osm。PBF会不会因为面积太大而不起作用?
谢谢,
杰斯

Suzanne Buumyyrolle.

你好,
我想把污染数据绘制到地图上。我使用了plot谷歌map,但API迫使我转移到另一个解决方案。所以我下载了4个关于我感兴趣的城市和周围环境的OSM文件。这些文件仍然相当大,但这不是这里的问题。对于每个污染传感器,我想绘制一张地图,但我不需要绘制整个osm文件(太长了),只是它的一部分。我不确定我能不能做到。有人能帮我吗?
谢谢

苏珊

苗族侗族

下载包不包括函数“xml2struct”。因此,它不能直接在Matlab中运行。这就是为什么Lukas berg会遇到如下所述的错误。用户应从网站下载"xml2struct"功能//www.tatmou.com/matlabcentral/fileexchange/28518-xml2struct并将函数重命名为“xml2struct_fex28518”。

卢卡斯冰山

你好,
我在运行使用示例时遇到了问题,希望有人能帮我解决它。
我从OSM下载了requestet函数(xml2struct, gaimc: graph algorithms, Lat/Lon aspect ratio, plot 2/3d point(s))和一张地图,并将其保存在map. OSM下。然后我把所有东西都添加到Matlab文件夹中。

当我运行示例文件时,我得到这个错误消息:

未定义的功能或变量'XML2STRUCT_FEX28518'。

load_osm_xml错误(第27行)
map_osm = xml2struct_fex28518(文件名);下载osm文件

parse_openstreetmap错误(第36行)
map_osm = load_osm_xml (openstreetmap_filename);

USAGE_EXAMPLE中的错误(第28行)
[parsed_osm,osm_xml] = parse_openstreetmap(OpenStreetMap_Filename);

如果有人能帮我让代码运行,那就太好了。
p.s.:我是新的Matlab,所以请解释它在一个新手可以理解的方式:)

谢谢,
卢卡斯

Jan GimpelHenning

我的Babatunde,我没有得到一个完整的答案,但你只有在某些建筑被保留的情况下才能得到高度。所以OSM在这方面并不是很有用。在谷歌Earth Pro中,你可以很容易地估计建筑的高度,但手动建造一个又一个建筑,不知道这是否对你有帮助。

Babatunde Atolagbe.

你好,简,你的问题得到答案了吗?我也有类似的问题。

“你好,非常感谢这个有用的应用程序!我想知道是否有可能在Matlab中从Openstreetmap中提取建筑高度?这有可能吗?”

Jan Gimpel-Henning

您好,非常感谢您提供这个有用的应用程序!我想知道是否有可能在Matlab中从Openstreetmap中提取建筑高度?这有可能吗?

卡洛斯·坎波

你好,Loannis,我一直在看结构,我想知道是否有任何信息包含的数据与邻近的每个节点。

非常感谢。

卡洛斯·坎波

sepehr ghasemi dehkordi

凯苏莱曼

Ioannis Filippidis

与软件包中当前可用的功能,没有。但是,在从openstreetmap文件加载的数据结构中找到这些信息(如果存在)应该不难。

托马斯Reindl

有可能得到的速度限制的单一部分的路线与任何funktion?

Ioannis Filippidis

@Franco Matzkin:很长时间以来我使用这个包,但是我希望看在路由节点,和方法包含连续的节点,然后你可以得到的道路名称加载xml数据时,使用的节点或方法id作为参考。

查看一个OSM文件应该有助于解决这个问题,例如:



< nd ref = " 1654391914 " / >
< nd ref = " 242684859 " / >
<标记k =“公路”v = "行人" / >

.
<标记k =“公路”v = " bus_stop " / >
.
<标记k =”操作符" v = " AMT " / >

<标记k = " stop_number " v = " 1121 " / >
<标记k = " url " v = "http://www.amt.genova.it/orari/orari_urbana.asp”/>

“苏

佛朗哥Matzkin

谢谢!我还有一个问题。你如何从路线中得到街道名称?这是可能吗?再次感谢

Ioannis Filippidis

@Franco Matzkin:非常感谢注意到这一点,Mathworks似乎改变了文件交换网站,所以它捆绑了GitHub存储库的当前内容,而不是我上传的存档文件。该PDF文件可以在GitHub的发布页面上找到:https://github.com/johnyf/openstreetmap/releases

我将在这里更新包的描述以反映这种情况。

佛朗哥Matzkin

我找不到参考手册或文档。我已经下载了压缩文件,但它不在那里。

Ioannis Filippidis

@Brandon:我不知道这个消息是什么意思,除了这个方法缺少注释[1]。

[1]https://github.com/johnyf/openstreetmap/blob/bb379623e0c4f86c5d3e38b85a9586a4f3193047/get_way_tag_key.m#L16

Ioannis Filippidis

@Seb Biass:我只知道OpenStreetmap项目使用的XML格式的基本知识。此外,我不知道在任何地方对这种格式有任何精确的定义(例如,使用数学的正式规范)。

我对openstreetmap的键值不做一般的假设。这个包是用来加载基本映射的,但可能无法解决角落的情况。

我不知道是否有“主特性类型”的概念是OSM。此外,键是没有顺序的,例如,在XML中是[1],所以Matlab中出现的顺序可能是Matlab数据模型缺陷的产物,而不是Python中的字典。

“高速公路”[2]键和“桥”[3]键似乎可能共存。

[4]的信息可以作为更详细检查的起点。

备注:请考虑在代码引用中包含提交哈希。

[1]http://wiki.openstreetmap.org/wiki/OSM_XML
[2]http://wiki.openstreetmap.org/wiki/Way
[3]https://wiki.openstreetmap.org/wiki/Key:bridge
[4]http://pdxmele.com/FOSS4G_OSM_workshop.pdf

Seb的偏见

嘿,Ioannis,
多么酷的努力!有个问题想问你。L48 extract_connectivity。M,你总是假设第一个键应该是主要特征类型吗?这是OSM的假设吗?例如,有些路段有第一个键=桥,这是否意味着它是高速公路键的副本?

谢谢!

年代

布兰登

当我运行usage_example文件时,我得到一堆警告:“Way has NO tag.”任何帮助都将不胜感激!

Ioannis Filippidis

嗨,达科,

谢谢你的反馈。抢手货。目前,我不记得XML结构(它可能在随后的几年里也发展了),但纠正听起来是合理的。在github上一个pull请求将是受欢迎的(改变是2个字符,但如果你想提供提交)。如果有最小的测试或文档链接,请考虑包含或提及。

最好的
ioannis

达科Maksimov

亲爱的Ioannis Filippidis先生

首先,我想感谢你的这些文件和伟大的工作。我现在正在写我的硕士论文,是关于地图路由的。

在使用你的函数时,我注意到一个小错误。在函数“get_unique_node_xy”中,有相同的行:

id = parsed_osm.node.xy (:, intersection_node_indices);
xys = parsed_osm.node.xy(:,intersection_node_indices);

为了获得索引,第一行应该改为:
id = parsed_osm.node.id (:, intersection_node_indices);

亲切的问候

马丁Chudomel

thak loannis。你是个大师。
我还有一个问题。我需要在这张地图上画。有些东西像线和圆,因为一个使用这个脚本指导寻找和三角测量方法。但我不知道怎么做。没有什么像带有lat x lon参数的矩阵。

谢谢你!

@Martin:您是否从这里安装了依赖项:https://github.com/johnyf/openstreetmap/releases
你缺少的函数是:https://github.com/johnyf/plot_utils/blob/bd304279ee0e000f72fc936e0ef9f3a690d4e654/hold/takehold.m并且应该包含在依赖项中。另外,请记住更新您的MATLAB路径。

马丁Chudomel

未定义的函数'takehold'用于类型为'double'的输入参数。

plot_nodes错误(第37行)
= takehold举行(ax);

usage_example错误(第61行)
plot_nodes (ax, parsed_osm, only_nodes)

有什么可以帮忙的吗?

许塔

Mahmoud Hassan Eldally

Mahmoud Hassan Eldally

为什么有些回合限制在最终图和连通性矩阵中没有显示为带有索引的点

我添加了一些行人路径和所有的转弯限制在最终的图中没有显示

Paraskevas Nikolaou

你好,
我开始使用用户Mabual“openstreetmap函数的matlab v.0.2”。我做的第一步是下载三个依赖项,xml2struct_fex28518, lat_lon_比例和dijkstra),我把这些文件添加到matlab中的路径。当我进入第二步,这是解析openstreetmap文件,我正在写代码:
1函数parse_osm = parse_openstreetmap('aarhus_denmark.osm')
2结束
aarhus_denmark。osm是一个XML文件,它与上述文件处于相同的路径下。
无论如何,当我运行上面的代码时,它看起来是一个错误的错误:
错误:文件:parse_openstreetmap.m行:1列:43
意想不到的MATLAB表达式。
我也经营着在线的先生Filippidis的代码,他们也不起作用。
任何帮助吗?

亚斯兰舍希德


我已经在arcgis 10.3中使用osm插件/ XAPI下载了。osm文件。文件下载成功,我也打开了它在JOSM,但我无法解析数据在Matlab。得到错误
引用不存在的字段'bounds'。

parse_osm错误(第35行)
parsed_osm。边界= parse_bounds (osm_xml.bounds);

parse_openstreetmap错误(第43行)
parsed_osm = parse_osm (osm_xml);

dataBase_preparation错误(第17行)
[parsed_map, map_xml] = parse_openstreetmap('TUM_arc_test.osm');

寻找解决方案/建议金宝搏官方网站

金色的

香港潘文凯

你好,

我下载了所有的附件和地图。osm文件,我尝试运行usage_example.m
我得到一个错误:
错误使用bioinfoprivate.opttf
这是Bioinformatics_Toolbox的错误

因此,我注释掉了route_planner中的第38、39、40、41和55行。m文件,以确保它只运行不为Bioinformatics_Toolbox的部分。

然而,当我再次运行这个示例时,它显示:
解析开放地图。
发现370个普通节点
连通性矩阵包含1350个非零元素。
尽管只有226个。
警告:路线规划器没有找到路线。试试没有方向的道路。
>在route_planner, 59
在usage_example中47
解析开放地图。
上界:xmin = -73.8573, xmax = -73.8337, ymin = 40.7788, ymax = 40.7974
节点数量:2098
方式:95
没有标签的方式。
没有标签的方式。
没有标签的方式。
没有标签的方式。
没有标签的方式。
没有标签的方式。
没有标签的方式。

还有2个窗口,如下所示:
http://i57.tinypic.com/f4iqlt.png

我做错了什么?我应该得到这样的东西://www.tatmou.com/matlabcentral/fileexchange/screenshots/9670/original.jpg

对吧?

马太福音

Ioannis Filippidis

@kavita:你下载了dependencies.tar,提取并添加到你的matlab路径中了吗?你可以在这里找到:https://github.com/johnyf/openstreetmap/releases

在那里,您将发现重命名的xml2struct_fex28518函数。重命名是为了避免与生物信息学工具箱的名称冲突(不建议从安装中删除该工具箱)。

您看到的原始错误与生物信息学工具箱无关,因为它找不到xml2struct_fex28518,而不是xml2struct。

Matlab路径中的XML2的持久性可能是由于缓存(例如,比较`哈什壳中的`哈希)。或许在重新启动MATLAB之后,它不会再找到XML2STRUCT。在任何情况下,它不是错误的原因。

的故事

亲爱的所有人

我从usage_example开始,但是出现了以下错误

> > usage_example
未定义函数'xml2struct_fex28518'作为输入参数
类型的“字符”。

load_osm_xml错误(第27行)
map_osm = xml2struct_fex28518(文件名);% osm下载
文件

parse_openstreetmap错误(第36行)
map_osm = load_osm_xml (openstreetmap_filename);

USAGE_EXAMPLE中的错误(第28行)
[parsed_osm, osm_xml] =
parse_openstreetmap (openstreetmap_filename);

然后我读了这个页面上的各种评论,然后我尝试了以下方法

1)我提取较小的地图文件www.openstreetmap.org,即使是错误也是一样的。

我输入命令
> >这xml2struct
C:\Program Files\MATLAB\R2013a\toolbox\bioinfo\biodemos\ xml2struct.m

作为一个解决方案,我删除了生物信息文件夹从以下路径
C:\Program Files\MATLAB\R2013a\toolbox\

即使如此,当我输入命令“>> which xml2struct .”时,同样的错误也会出现
它再次显示了相同的结果。如何解决此错误。请建议和帮助我。

树胶

@shiva我也有同样的问题,我在parse-osm的for循环中快速检查修正了它。m:
j = 1: Nnd
如果nnd == 1
ndtemp (j) = str2double (waytemp.nd.Attributes.ref);
其他的
ndtemp(1, j) = str2double(waytemp.nd{j}.Attributes.ref);
结束
结束

如您所见,else部分是第78行所示。

湿婆

首先我要感谢你的包裹。
你能帮我帮助我为什么收到这个错误:
???从非单元格数组对象引用单元格内容。

错误在==> parse_osm>parse_way在78
ndtemp(1, j) = str2double(waytemp.nd{j}.Attributes.ref);

错误在==> parse_osm在37
parsed_osm。方式= parse_way (osm_xml.way);

错误在==> parse_openstreetmap在43
parsed_osm = parse_osm (osm_xml);

错误在==> usage_example在29
[parsed_osm,osm_xml] = parse_openstreetmap(OpenStreetMap_Filename);

谢谢提前

彼得罗

谢谢Ioannis的帮助,

所以我需要放大这个区域然后我可以用matlab分析它,对吧?我有一个巨大的gpx文件,我需要创建几个papermaps。我能用你的函数集做吗?

谢谢

Ioannis Filippidis

只需选择左上角的“导出”,并放大足够的范围,这样就不会在导出面板上显示(在单击“导出”后,会在左侧打开)该区域太大而无法导出。然后点击左边窗格上的蓝色“导出”按钮,就可以下载“。包含您需要的XML数据的osm文件。

彼得罗

你好,我在OpenStreetMap网站上找不到OpenStreetMap XML数据文件。我在哪里可以找到它?

谢谢

Ioannis Filippidis

在python中导入osm图作为networkx图的Gist:
https://gist.github.com/aflaxman/287370/

Ioannis Filippidis

嗨,韦斯,谢谢你的评论。如果我没记错的话,ids应该指向OSM数据库,因此应该是全世界的全局id,而不是连接矩阵中的索引(这是OSM数据库的一个示例)。

w

嗨Ioannis,

伟大的包你在这里,工作完美为我需要!谢谢你花时间上传。

不过我在路线规划上有一些问题。当我从解析的osm文件中取出节点id时,我得到一个大数字,如1151088456,但我得到一个错误消息说源节点索引无效。如果我从连通性矩阵中随机选择一个小数字,我可以让它工作,但我不知道如何将这些位置与现实世界的位置联系起来,直到我运行它,看看它们出现在哪里。

你能告诉我哪里做错了吗?

谢谢提前

Ghufran.

Ioannis Filippidis

请考虑切换到Python。这里有大量的开放地图设施和出色的可视化功能:

https://pypi.python.org/pypi?%3Aaction=search&term=openstreetmap&submit=search

Ioannis Filippidis

嗨Gaurav,

我已经更新了github上的提交(这里,等待审查),以修复可能导致“no osm field”错误的名称隐藏冲突。

@Matthew:
现在包括了restorehold函数(需要重命名)和一个示例映射。osm。

您评论“所选择的XML解析器只适用于非常简单的示例”的理由是什么??

gaurav

嘿,
我一直在尝试用这个分布把印度孟买的达拉维地区转换成数据集。然而,我不能理解如何使用包和哪个是主要文件将调用matlab文件给定。
此外,我尝试使用usage_example。M,但它显示错误:
“引用不存在的字段'osm'。

parse_openstreetmap错误(第42行)
osm_xml = map_osm.osm;

USAGE_EXAMPLE中的错误(第29行)
[parsed_osm, osm_xml] = parse_openstreetmap(openstreetmap_filename);"

我的输入文件的名称与示例- map相同。Osm,并保存在与发行版中所有其他文件相同的目录中。
你的帮助将是非常宝贵的,因为我迫切需要这个工作

Reham

非常感谢您的回复。

Ioannis Filippidis

将osm加载到MATLAB中,用邻接矩阵表示一个有向图。假设速度不变,旅行时间与距离成正比。所以要让它们不同,就需要假设不同类型的道路有不同的速度。我建议根据道路(边)的大小来分配权值,方法是将权值存储在邻接矩阵中。然后在加权图上运行Dijkstra的最短路径算法。

推荐阅读关于Dijkstra算法的维基百科文章,你可以在//www.tatmou.com/matlabcentral/fileexchange/10922-matlabbgl,作为了解有关连接矩阵的更多信息,您可以查看extract_connectivity.m的帮助文本。

Reham

好了,问题解决了。我可以根据从我的地图中生成的(索引)值更改开始和目标节点,它工作了!

现在我需要你的建议,如果我想要最快的路线(基于旅行时间而不是距离)。我该怎么办?我应该将这些数据添加到地图osm文件中吗?所以我必须搜索这些信息/标签。或者这应该被修改成算法权重?我知道这主要是基于距离。我真不知道下一步该做什么!

Reham

你好Ioannis,

很抱歉我之前的评论,我没有在Matlab中设置正确的路径。现在文件运行,但我有这个:
警告:路径为空。这意味着规划者没有找到路径。
>在plot_route的24
在my_example中37

绘制的方式,但最短的路线不是!我应该更改开始和目标节点值吗?

基于什么?我应该从XML文件复制/粘贴节点id吗?知道我已经试过了,但我得到一个错误,节点ID是无效的。

请我需要你的帮助,因为我必须修改所有的代码在最快最短路线,而不是作为我论文的一部分,我需要先解决这些错误和警告,并开始思考修改算法和添加流量或旅行时间信息和开始工作在地图上和算法产生最快的路线。我仍然不知道如何实现它,因为我对Matlab是全新的。但如果你能帮我整理一下你提供的文件我会很感激的。

谢谢,

最好的

Reham

你好,
我要感谢您的提交,它对我的​​大师论文真的有用,但我真的需要你的帮助,在我运行USAGE_EXAMPLE时,我会得到以下错误:

参考不存在的字段'OSM'。

parse_openstreetmap错误(第42行)
osm_xml = map_osm.osm;

USAGE_EXAMPLE中的错误(第29行)
[parsed_osm,osm_xml] = parse_openstreetmap(OpenStreetMap_Filename);

知道我复制了地图在openstreetmap的主目录下的osm文件中,我一行一行地跟踪了代码,并引用了每个函数,以查看它是如何工作的,并试图解决问题,但什么都没有,并在下面的评论中没有发现类似的错误。最后我甚至看不到代码的输出。所以你能帮忙吗?
谢谢提前

马太福音

我想给它5颗星。我建议解决以下问题:
1.usage_example抛出一个错误:在分发版中没有restorehold()函数。
2.所选择的XML解析器不适合任何简单的例子。
3.这个例子不是现成的。为什么不包括一个示例映射。osm文件?

Ioannis Filippidis

嗨Nermeen,

谢谢,我建议不要在任何上下文中解析30GB的文件,MATLAB当然不能处理,但任何其他工具也不能。问题是,你的RAM和虚拟内存不支持这个,除非你有一个非常不寻常的硬件或软件设置。金宝app

所以我建议的是基于文件的操作,在哪里逐步处理输入,同时将结果转储成(可能的大)输出文件。然后您可以从该文件访问它们。

您还可能考虑您的任务是否真的需要对整个国家进行暴力解析,而不是以某种方式在获取信息的源处预先过滤信息(我不知道在这种情况下是否可能这样做,但如果您不需要所有的数据,这是一个值得考虑的选项)。

此工具箱当前不支持PBF格式。金宝app这里已经有一个Python解决方案:
http://blog.lifeeth.in/2011/02/extract-pois-from-osm-pbf.html.
(指的是:http://wiki.openstreetmap.org/wiki/PBF_Format
我建议无论如何都要切换到Python(见下文)。

请随时贡献,顺便说一下,出于人们的兴趣,它可能会在不远的将来迁移到github。

最后,我会建议切换到Python作为您描述的重量GIS任务,因为它更适合以系统为导向的操作,并且您将找到一组更广泛的工具,尽管它需要更多搜索。起点(虽然没有尝试过他们):
http://wiki.openstreetmap.org/wiki/PythonOsmApi
http://stackoverflow.com/questions/11321718/how-can-i-display-osm-tiles-using-python/11325174#11325174
https://ep2013.europython.eu/media/conference/slides/making-use-of-openstreetmap-data-with-python.pdf
http://nzjrs.github.io/osm-gps-map/

Nermeen艾哈迈德

你好,

在我的环境分类项目中,该工具一直有助于帮助。我只是想知道可以解析的OSM文件大小限制。因为我需要解析完整国家的档案;OSM文件最多可达30 GB。还有一种方法可以使用此工具解析PBF文件而不是XML吗?谢谢提前

Ioannis Filippidis

很高兴它证明是有用的。不,我没考虑过处理行政边界。如果你写了一些改进,请考虑发送。

此外,当我发现一些时间这个项目可能会出现在github上,供人们贡献。

Seb的偏见

你好,

这个工具箱很棒。我想知道你是否看到了一种在给定级别的管理边界内的道路网络上提取和执行连接分析的方法。我正在看一个API,但相当新的,所以仍然挣扎......
请务必让我知道如果你做了,再次,一串的感谢!

Preeti高尔

当我试图加载和解析一个osm文件时,我得到了一个错误,我尝试了不同的文件大小:

从非单元格数组对象引用单元格内容。

parse_osm>parse_way错误
ndtemp(1, j) = str2double(waytemp.nd{j}.Attributes.ref);

PARSE_OSM中的错误(第20行)
parsed_osm。方式= parse_way (osm_xml.way);

parse_openstreetmap错误(第43行)
parsed_osm = parse_osm (osm_xml);

OSMExample错误(第29行)
[parsed_osm,osm_xml] = parse_openstreetmap(OpenStreetMap_Filename);

有什么建议?

一举

我有错误吗?引用不存在的字段'osm'。osm_xml = map_osm.osm; ?

matlab文件xml2struct.m
树=
【#文档:零】
theStruct =
名称:“osm”
属性:[1x5 struct]
数据:“
孩子们:[1 x439 struct]

parse_openstreetmap.m.
map_osm =
名称:“osm”
属性:[1x5 struct]
数据:“
孩子们:[1 x439 struct]

文件名称
openstreetmap_filename =“map.osm”;

我不明白误差在哪里,用Matlab 2013a和2009a?

Ioannis Filippidis

你好理查德,

Java虚拟机内存不足,您可以增加内存(取决于系统的限制)。请参阅:
//www.tatmou.com/金宝appsupport/金宝搏官方网站solutions/en/data/1-18I2C/
绘制大量数据时也会出现这种情况。

我建议基于进一步处理的目的,尽量减少您试图导入的地图片段。
否则,即使在增加java堆大小后加载,处理起来仍然很麻烦。

另一个建议可能是分解成碎片并单独加载那些,一个时间提取感兴趣的结构,然后识别不同补丁之间的公共节点。然而,这更涉及,因为它涉及节点的全局(唯一)ID,在OpenStreetMap数据库(和文件)中表示它们。

理查德。

我想要一张北京的街道地图,但是遇到了内存不足的错误:

???Java异常发生:
Java .lang. outofmemoryerror: Java堆空间

错误在==> xmlread在91
parseResult = p.parse(文件名);

错误在==> xml2struct在40
xDoc = xmlread(文件);

错误在==> load_osm_xml在26
map_osm = xml2struct(文件名);下载osm文件

错误在==> parse_openstreetmap在41
map_osm = load_osm_xml (openstreetmap_filename);

错误在==> GeoLife_main在21
[parsed_osm, osm_xml] = parse_openstreetmap('beijing.osm');

北京。osm为75.35 MB

有什么建议?

Ioannis Filippidis

我最近收到的一些反馈表明,xml加载错误可能是由于openstreetmap函数中包含的函数xml2struct与MATLAB生物信息学工具箱中同名的函数之间的名称冲突造成的。

我的生物信息学工具箱版本没有这样的功能,但是它有一些用于xml处理的功能,所以在以前的版本中可能存在xml2struct函数。

生物信息学工具箱函数(当它存在时)可以根据它们在MATLAB路径中的相对位置对软件包中包含的函数进行投影。

请通过键入:
这xml2struct
通过重命名xml2struct,这个问题可能会在将来的某个版本中得到修复,不过一般来说,最好保持文件交换中文件的原始名称,以便更好地跟踪代码并避免重复。

Ioannis Filippidis

你好,法比奥,

您确定xml2struct在您的路径中吗?似乎文件没有正确加载,也许您可以检查返回的结构字段,包含加载的xml。

重现这个问题的最小示例将有助于解决它。

最好的
Ioannis

法比奥·洛佩兹

嗨looannis.

我刚刚开始使用函数包,作为一个想要运行使用示例的开始。以下错误出现时不清楚文件的地理位置或大小:

???引用不存在的字段'osm'。

错误在==> parse_openstreetmap在42
osm_xml = map_osm.osm;

错误在==> usage_example在29
[parsed_osm,osm_xml] = parse_openstreetmap(OpenStreetMap_Filename);
您能知道这个错误的原因吗?

宝拉

嘿Ioannis !
非常感谢你的帮助!现在我还在做一些细节工作为电网的运行开发一个新设备。我想知道整个德国的情况。我直接从openstreetmap主页上得到数据,然后导出它们。但我只能得到德国的一小部分,如果我从这个主页导出数据。你知道另外一个页面吗,在那里我可以一次得到整个德国的数据库?这对我又是一个很大的帮助!
再次谢谢你,宝拉

Ioannis Filippidis

嗨paula,

连接矩阵表示节点之间的连接存在。
在单向道路中,连接的指示,因此连接矩阵不对称。
换句话说,你可以从节点a到节点b,但不是相反的方向。
路径规划器只是在连接矩阵表示的图中进行搜索,以找到从初始节点到最终节点的路径。
有时,当提取连接时,某些道路被认为对称,但实际上它们不是。
出于这个原因,如果第一次尝试失败,假设方向无关紧要可能会更有效。
这要求连通性矩阵是对称的。
usage_example文件的第35-48行描述了这两种方法。

由于道路网络在这个包中是感兴趣的(至少到目前为止),只有道路合格的有效连接。
所以代码只搜索道路连接。

道路可以通过它们的特殊标记来识别,该标记有一个键和一个值,参见
http://wiki.openstreetmap.org/wiki/Key:highway
http://wiki.openstreetmap.org/wiki/Highway_tag_usage
http://wiki.openstreetmap.org/wiki/Highways
查阅有关高速公路的文件。
如果对象有标记,则get_way_tag_key函数获取键及其值。

标签的键被称为“highway”,可以有很多值(那些可能的值是相关的,在extract_connectivity的第39行“road_vals”单元格数组中定义)。

然而,不是高速公路的对象没有一个键名为“highway”的标签。
这在extract_connectivity的第54行中进行了检查。
在本例中,就连通性而言,它们被忽略了。

此外,即使它们具有“highway”键,它们也可能不受关注(例如,在“road_vals”中包含一个值)。
在本例中,它们再次被忽略,请参见extract_connectivity的第59行。

第一个警告意味着该物体不是高速公路。
考虑到前面的因素,可以得出这个对象对道路连接性没有贡献(因为它不是道路)。

这可能是没有找到路线的原因。
由本代码的当前版本生成的连接矩阵没有包含任何关于电源线或电缆的信息。

第二个警告只是路由规划者建议使用对称网络假设,原因如前所述。(例如,万一单向假设不完全成立。例如,当我们只对步行感兴趣而对汽车不感兴趣时,就会发生这种情况。在这种情况下,还需要改变“road_vals”。)

要使用电源网络,您需要从加载的OpenStreetMap XML数据中提取它们的连接。
您可以通过更改函数extract_connectivity来识别键=“power”以及适当的值来执行此操作,请参阅
http://wiki.openstreetmap.org/wiki/wikiproject_power_networks.

提取各种网络是一个好主意,我可能会在我有时间的时候添加这个功能。
如果你朝着这个方向开发一个加法,我很乐意将它添加到当前的分布中。

最好的问候,
Ioannis

宝拉

嘿,Ioannis,
我想为电缆和电线的运行创建一个连接矩阵。现在我试图理解连接矩阵和路由规划器的功能,但我甚至不能创建一个简单的路由。它总是说:
警告:方法没有标签。
>在get_way_tag_key在20
在extract_connectivity在53"
和:
"警告:路线规划者找不到路线。试试没有方向的道路。”

它到底是什么意思,我现在能做什么?

谢谢!

凯瑟琳·霍洛威学院

晶晶王

另外一个评论。
对于路线规划者,它只通过不使有向图对称来区分单向道路与普通道路。但是,它没有考虑到标签“oneway=yes”,可以从原始osm文件提取。我想也许可以利用这个信息。会更有意义。

谢谢,
晶晶

晶晶王

嗨looannis,

我用你的函数来得到上海公路网的连通性矩阵。似乎有几处需要修改。
1.标签"highway"可能并不总是每个元素的第一个标签,所以在函数'get_way_tag_key'中,它应该遍历所有标签,看看是否有"highway"标签。
2.在连接矩阵方面,在我看来,您正在尝试获取仅包含交叉节点的定向图。如果是,则不应启动'node1_index'是第一个节点,而是一个空设置'[]',因为第一个节点不一定属于交叉点节点。

你能帮帮我吗?

谢谢,
晶晶

伴侣

Ioannis Filippidis

你好,凯瑟琳,

谢谢你对这些功能的反馈。我已经发布了一个更新版本,它修复了这个bug并添加了更多的功能。

最好的问候,
Ioannis

凯瑟琳·霍洛威学院

嗨Ioannis,

感谢你花时间发布这篇文章。我正在尝试使用你的函数来绘制意大利热那亚的面积,但我得到了以下错误:

???从非单元格数组对象引用单元格内容。

错误在==> get_way_tag_key在16
关键={1}标签.Attributes.k;

出错在==> plot_way>show_ways at 43
[key, val] = get_way_tag_key(way. value);标记{1,});

错误在==> plot_way在34
Show_ways (ax, bounds, node, way, map_img_filename);

错误在==>热那亚34
plot_way (ax, parsed_osm)

你有什么建议吗?

谢谢,
凯瑟琳

Ioannis Filippidis

继续说:

请考虑更换:

parse_osm > parse_way线59
标记{1,}= waytemp.tag;

:

如果isfield (waytemp,“标记”)
Tag {1, i} = waytemp.tag;
其他的
标签{1,i} = [];
结束

我将发布一个更新,修复这个bug。如果你能发布你从OpenStreetmap导出的导致这个问题的地理区域,这将是有帮助的。(特别是如果你能把。osm文件用电子邮件发给我的话)。

Ioannis Filippidis

你好大卫,

感谢你注意到这个行为。
请考虑更换:
parse_osm > parse_way、线59

如果isfield (waytemp,“标记”)
Tag {1, i} = waytemp.tag;
其他的
标签{1,i} = [];
结束

红色的石头

大卫

嗨Ioannis

我很喜欢你的OpenStreetMap Matlab函数。然而,对于一些osm文件,我得到以下错误:

[parsed_osm] = parse_openstreetmap (openstreetmap / map.osm);
???引用不存在的字段'tag'。

Error in ==> parse_osm>parse_way at 59
标记{1,}= waytemp.tag;

错误在==> parse_osm在14
parsed_osm。方式= parse_way (osm.way);

错误在==> parse_openstreetmap在40
parsed_osm = parse_osm (map_osm.osm);

你知道怎么解决这个问题吗?

问候,
大卫

MATLAB版本兼容性
创建R2012a
与任何版本兼容
平台的兼容性
窗户 macOS Linux

社区宝藏狩猎

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!