The spatial precision of the analysis is defined by the current computational region. The user can define this with g.region. Care should be taken to not define a too high resolution for the spatial extent covered. Otherwise the user might be confronted with memory issues.
The first (default) approach is based on v.net.iso. The output of that module is then used to assign isochrone values to all pixels based on the nearest road segment that is within a given distance (max_distance). The -i flag allows to calculate a separate isochrone map for each starting point. For this approach, the input road map currently has to be prepared by adding all nodes (using v.net with 'operation=nodes' and the '-c' flag. For each starting point, the algorithm then finds the closest node on the network and calculates the isochrones from there. This allows to use the same network for many analyses without having to go through the time of adding the starting points at each run. In addition, a cost_column has to be present in the attribute table containing for each line segment the time of traversal in minutes (i.e. length/speed).
The second approach is based on r.cost. It transforms the roads to raster (here cost_column has to point to an attribute column containing speed in km/h), assigning a user chosen offroad_speed to all offroad pixels, calculates time cost from the starting points and then transforms the result into discrete vector polygons based on the time steps chosen. Optionally, the user can chose to keep the a raster output of r.cost (timemap). Current region settings are used to define the maximal extension and the resolution at which the cost map is calculated. The memory option allows to decide how much memory the r.cost module can use (see the r.cost man page for more details). One big advantage of the this second approach is that the road network does not have to be topologically clean in order to get meaningful results.
v.net -c input=roadsmajor operation=nodes output=myroads v.db.addcolumn myroads col="speed int" v.db.addcolumn myroads col="length double precision" v.db.addcolumn myroads col="cost double precision" v.db.update myroads col=speed value=120 where="ROAD_NAME='US-1'" v.db.update myroads col=speed value=90 where="(ROAD_NAME like 'US%' AND ROAD_NAME <> 'US-1') OR ROAD_NAME like 'I-%'" v.db.update myroads col=speed value=50 where="speed is null" v.to.db myroads op=length col=length v.db.update myroads col=cost qcol="(length/(speed*1000))*60" g.region vector=myroads res=50 -a -p echo "634637|224663" | v.in.ascii input=- output=start x=1 y=2 v.isochrones map=myroads cost_column=cost start_points=start isochrones=isochrones_vnetiso time_steps=15,30,60 \ max_distance=1000 method=v.net.iso
v.isochrones map=myroads cost_column=speed start_points=start isochrones=isochrones_rcost time_steps=15,30,60 \ method=r.cost memory=1000
© 2003-2021 GRASS Development Team, GRASS GIS 7.8.6dev Reference Manual