out of memory at line(OSM获取城市路网 runtime error- Query ran out of memory in “recurse” at line 11. It would need at least 96 MB of RAM to continue 解决方法[亲测有效])

发布时间:2025-12-10 19:34:41 浏览次数:1

OSM获取城市路网 runtime error: Query ran out of memory in “recurse” at line 11. It would need at least 96 MB of RAM to continue 解决方法[亲测有效]-out of memory at line:2

OSM获取城市路网 runtime error: Query ran out of memory in “recurse” at line 11. It would need at least 96 MB of RAM to continue 解决方法[亲测有效]OSM获取城市路网,转换为MATSim路网文件一、OSM获取城市路网参考资料1:https://blog.csdn.net/symoriaty/article/details/103946796参考资料2:https://zhuanlan.zhihu.com/p/157849066Step1

OSM获取城市路网,转换为MATSim路网文件

一、OSM获取城市路网

参考资料1:https://blog.csdn.net/symoriaty/article/details/103946796

参考资料2:https://zhuanlan.zhihu.com/p/157849066

Step1.获取所需城市ID

https://www.overpass-api.de/query_form.html

<osm-script><query type="relation"><has-kv k="boundary" v="administrative"/><has-kv k="name:zh" v="重庆市"/></query><print/></osm-script>

【正版授权,激活自己账号】:Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

得到interpreter文件,打开得到重庆市ID:913069

Step2.根据城市ID下载路网数据

<osm-script timeout="1800" element-limit="100000000">  <union>    <area-query ref="3600913069"/>    <recurse type="node-relation" into="rels"/>    <recurse type="node-way"/>    <recurse type="way-relation"/>  </union>  <union>    <item/>    <recurse type="way-node"/>  </union>  <print mode="body"/></osm-script>

不同的城市将area-query ref=”3600913069″中的数值改为3600000000+ID

有的城市会出现运行错误:runtime error: Query ran out of memory in “recurse”

runtime error: Query ran out of memory in "recurse" at line 11. It would need at least 96 MB of RAM to continue.

将element-limit调大即可解决,如改为element-limit=”500000000″

二、OSM路网文件转换为MATSim所需路网文件

参考资料:https://blog.csdn.net/Afinezyboy666/article/details/79356789?spm=1001.2014.3001.5501

OsmToNetworkUtil.java

package MyCode;import org.matsim.api.core.v01.Scenario;import org.matsim.core.config.Config;import org.matsim.core.config.ConfigUtils;import org.matsim.core.network.io.NetworkWriter;import org.matsim.core.scenario.ScenarioUtils;import org.matsim.core.utils.geometry.CoordinateTransformation;import org.matsim.core.utils.io.OsmNetworkReader;import org.matsim.core.network.algorithms.NetworkCleaner;import java.io.UncheckedIOException;import MyCode.WGS84toMercator;public class OsmToNetworkUtil {    public static void main(String[] args){        Config config = ConfigUtils.createConfig();        Scenario scenario = ScenarioUtils.loadScenario(config);        CoordinateTransformation trans = new WGS84toMercator();        OsmNetworkReader osmReader = new OsmNetworkReader(scenario.getNetwork(), trans);        String dir = "/Users/frank/Downloads/";          // 请在这个文件夹中放入你的地图文件        String osmFile = "cq.osm";          // 输入文件        String networkFile = "cq.xml";    // 输出文件        try{            osmReader.parse(dir+osmFile);            new NetworkCleaner().run(scenario.getNetwork());            new NetworkWriter(scenario.getNetwork()).write(dir+networkFile);            System.out.println("Done writing!");            System.out.println("Please find network file in "+dir+networkFile);        }        catch(UncheckedIOException e){            e.toString();        }    }}

其中,输入文件为第一步下载所得路网文件直接重命名为xxx.osm

WGS84toMercator.java

package MyCode;import org.matsim.api.core.v01.Coord;import org.matsim.core.utils.geometry.CoordinateTransformation;public class WGS84toMercator implements CoordinateTransformation {    @Override    public Coord transform(Coord coord) {        double x = coord.getX() *20037508.342789/180;        double y = Math.log(Math.tan((90+coord.getY())*Math.PI/360))/(Math.PI/180);        y = y *20037508.34789/180;        return new Coord(x, y);    }}
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477