Coder Social home page Coder Social logo

aequilibrae / aequilibrae Goto Github PK

View Code? Open in Web Editor NEW
149.0 149.0 38.0 42.26 MB

aequilibrae - Python package for transportation modeling

Home Page: https://www.aequilibrae.com

License: Other

Python 84.62% Batchfile 0.02% QML 3.24% Shell 0.10% Cython 12.02%

aequilibrae's Introduction

AequilibraE

Downloads

Documentation

unit tests

Code coverage

Linux builds

MacOS buils

Windows builds

QAequilibraE artifacts

AequilibraE is a fully-featured Open-Source transportation modeling package and the first comprehensive package of its kind for the Python ecosystem, and is released under an extremely permissive and business-friendly license.

It is developed as general-purpose modeling software and imposes very little underlying structure on models built upon it. This flexibility also extends to the ability of using all its core algorithms without an actual AequilibraE model by simply building very simple memory objects from Pandas DataFrames, and NumPY arrays, making it the perfect candidate for use-cases where transport is one component of a bigger and more general planning or otherwise analytical modeling pipeline.

Different than in traditional packages, AequilibraE's network is stored in SQLite/Spatialite, a widely supported open format, and its editing capabilities are built into its data layer through a series of spatial database triggers, which allows network editing to be done on Any GIS package supporting SpatiaLite, through a dedicated Python API or directly from an SQL console while maintaining full geographical consistency between links and nodes, as well as data integrity and consistency with other model tables.

AequilibraE provides full support for OMX matrices, which can be used as input for any AequilibraE procedure, and makes its outputs, particularly skim matrices readily available to other modeling activities.

AequilibraE includes multi-class user-equilibrium assignment with full support for class-specific networks, value-of-time and generalized cost functions, and includes a range of equilibration algorithms, including MSA, the traditional Frank-Wolfe as well as the state-of-the-art Bi-conjugate Frank-Wolfe.

AequilibraE's support for public transport includes a GTFS importer that can map-match routes into the model network and an optimized version of the traditional "Optimal-Strategies" transit assignment, and full support in the data model for other schedule-based assignments to be implemented in the future.

State-of-the-art computational performance and full multi-threading can be expected from all key algorithms in AequilibraE, from cache-optimized IPF, to path-computation based on sophisticated data structures and cascading network loading, which all ensure that AequilibraE performs at par with the best commercial packages current available on the market.

AequilibraE has also a Graphical Interface for the popular GIS package QGIS, which gives access to most AequilibraE procedures and includes a wide range of visualization tools, such as flow maps, desire and delaunay lines, scenario comparison, matrix visualization, etc. This GUI, called QAequilibraE, is currently available in English, French and Portuguese and more languages are continuously being added, which is another substantial point of difference from commercial packages.

Finally, AequilibraE is developed 100% in the open and incorporates software-development best practices for testing and documentation. AequilibraE's testing includes all major operating systems (Windows, Linux and MacOS) and all currently supported versions of Python. AequilibraE is also supported on ARM-based cloud computation nodes, making cloud deployments substantially less expensive.

Comprehensive documentation

AequilibraE documentation built with Sphinx

What is available only in QGIS

Some common resources for transportation modeling are inherently visual, and therefore they make more sense if available within a GIS platform. For that reason, many resources are available only from AequilibraE's QGIS plugin, which uses AequilibraE as its computational workhorse and also provides GUIs for most of AequilibraE's tools. Said tool is developed independently and a little delayed with relationship to the Python package, and more details can be found in its GitHub repository.

aequilibrae's People

Contributors

alexdawn avatar art-ev avatar barisdemirdelen avatar daniloebbinghaus avatar elfjes avatar jake-moss avatar jamiecook avatar janzill avatar pedrocamargo avatar r-akemii avatar ssmith55 avatar ttalex avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aequilibrae's Issues

assignment result doesn't contain od_flows

I use the AequilibraE package in metro planning, the assignment result doesn't contain station-pair flows, I have to use networkx to get what i want, so, can you fix it?

Tracing back the origins or destinations from a given link or node

I have a question in relation to the functionality of Aequilibrae. Once a traffic assignment has been set, is it possible to trace back the origins or destinations from a given link or node?

For example, as a result of the assignment, there are 100 vehicles that flow on Link A. Can I determine what are the origins of those 100 vehicles on Link A ? Can it be mapped?

This might show potential improvements to the transport network or services. If say 30% of vehicles on Link A arrive from a cluster of origins, one might suggest investigating potential public transport route that will take a share of those trips.

Test badging

Replace test badges with the new ones (from GitHub Actions).

Error in example notebook

Running the example notebook:

# If we want to compute the path for a different destination and same origin, we can just do this
# It is way faster when you have large networks
res.update_trace(graph, 4)

yields the error:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-13-4316a704b916> in <module>
      1 # If we want to compute the path for a different destination and same origin, we can just do this
      2 # It is way faster when you have large networks
----> 3 res.update_trace(graph, 4)

TypeError: update_trace() takes 2 positional arguments but 3 were given

Fix

At some-point the method has been changed to pass the graph argument via the calling res object so the code: res.update_trace(4) has the right signature

Modes field consistency

The modes field in the nodes layer is not kept consistent with the modes field in the LINKS table.

The idea here is that we would have a string with all modes of all links connected to a certain node (no directionality considerations) at all times (no repetitions).

The core of the query is the following

Select GROUP_CONCAT(mode_id, '') from modes where instr((select GROUP_CONCAT(modes, '') from links where links.a_node = 12), mode_id) > 0

Select GROUP_CONCAT(mode_id, '') from modes where instr((select GROUP_CONCAT(modes, '') from links where links.a_node = 12), mode_id) > 0

The number 12 is just an example, obviously

API for retrieval and clearing of log

Purpose of use
Project enhancement

Is your feature request related to a problem? Please describe.
Access to the log file is only possible manually now

Describe the solution you'd like
API could look like

log = my_proj.log
log.retrieve('a certain text') -> returns list with all entries for the logfile (a parameter to be used as filter would be nice)
log.clear() -> Resets the logging file to empty

OSM-generated networks don;t have their triggers in place

Bug found when importing a network for SE Queenslan. The code fails when trying to add triggers. Seems to be a path issue

from aequilibrae import Project

p = Project()
p.new('D:/proj.sqlite')
p.network.create_from_osm(west=152.132865, south=-28.444447,
east=153.440936, north=-27.049161)

p.conn.close()

Traceback (most recent call last):
File "C:/Users/pedro/AppData/Roaming/JetBrains/PyCharm2020.1/scratches/aequilibrae/osm.py", line 6, in
east=153.440936, north=-27.049161)
File "C:\Users\pedro.virtualenvs\PolarisNetwork-uPiGa4Oy\lib\site-packages\aequilibrae\project\network\network.py", line 188, in create_from_osm
self.add_triggers()
File "C:\Users\pedro.virtualenvs\PolarisNetwork-uPiGa4Oy\lib\site-packages\aequilibrae\project\network\network.py", line 350, in add_triggers
self.__add_network_triggers()
File "C:\Users\pedro.virtualenvs\PolarisNetwork-uPiGa4Oy\lib\site-packages\aequilibrae\project\network\network.py", line 357, in __add_network_triggers
self.__add_trigger_from_file(qry_file)
File "C:\Users\pedro.virtualenvs\PolarisNetwork-uPiGa4Oy\lib\site-packages\aequilibrae\project\network\network.py", line 367, in __add_trigger_from_file
sql_file = open(qry_file, "r")
FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\pedro\.virtualenvs\PolarisNetwork-uPiGa4Oy\lib\site-packages\aequilibrae\project\network\database_triggers\network_triggers.sql'

Missing metadata table

Missing table to store description of all fields in all tables

Pre-populate

  • from link types table
  • from modes table
  • from links table
  • from nodes table

API

  • When adding field
  • When deleting field
  • Edit existing description

Get assigment stats as panda records

Store the assignment stats that are currently being logged within the TrafficAssignment class for later reference as a method or attribute so it is possible to report and graph the assignment.

cannot import name 'clock' from 'time'

I am running QGIS 3.10 on manjaro linux with python 3.8. After installing the plugin I get a error while opening it saying

ImportError: cannot import name 'clock' from 'time' (unknown location)

Here are the details:

Couldn't load plugin 'AequilibraE' due to an error when calling its classFactory() method

ImportError: cannot import name 'clock' from 'time' (unknown location)
Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/qgis/utils.py", line 334, in _startPlugin
plugins[packageName] = package.classFactory(iface)
File "/home/lin/.local/share/QGIS/QGIS3/profiles/default/python/plugins/AequilibraE/init.py", line 32, in classFactory
from .AequilibraEMenu import AequilibraEMenu
File "/usr/lib/python3.8/site-packages/qgis/utils.py", line 744, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "/home/lin/.local/share/QGIS/QGIS3/profiles/default/python/plugins/AequilibraE/AequilibraEMenu.py", line 52, in
from .distribution_procedures import DistributionModelsDialog
File "/usr/lib/python3.8/site-packages/qgis/utils.py", line 744, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "/home/lin/.local/share/QGIS/QGIS3/profiles/default/python/plugins/AequilibraE/distribution_procedures/init.py", line 21, in
from .distribution_models_dialog import DistributionModelsDialog
File "/usr/lib/python3.8/site-packages/qgis/utils.py", line 744, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "/home/lin/.local/share/QGIS/QGIS3/profiles/default/python/plugins/AequilibraE/distribution_procedures/distribution_models_dialog.py", line 37, in
from aequilibrae.distribution import SyntheticGravityModel
File "/usr/lib/python3.8/site-packages/qgis/utils.py", line 744, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "/home/lin/.local/share/QGIS/QGIS3/profiles/default/python/plugins/AequilibraE/aequilibrae/aequilibrae/distribution/init.py", line 15, in
from .ipf import Ipf
File "/usr/lib/python3.8/site-packages/qgis/utils.py", line 744, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "/home/lin/.local/share/QGIS/QGIS3/profiles/default/python/plugins/AequilibraE/aequilibrae/aequilibrae/distribution/ipf.py", line 23, in
from time import clock
ImportError: cannot import name 'clock' from 'time' (unknown location)

Python version: 3.8.1 (default, Jan 22 2020, 06:38:00) [GCC 9.2.0]
QGIS version: 3.10.1-A Coruña A Coruña, exported

Python Path:
/home/lin/.local/share/QGIS/QGIS3/profiles/default/python/plugins/AequilibraE/aequilibrae
/home/lin/.local/share/QGIS/QGIS3/profiles/default/python/plugins/AequilibraE/aequilibrae
/home/lin/.local/share/QGIS/QGIS3/profiles/default/python/plugins/networks
/usr/share/qgis/python
/home/lin/.local/share/QGIS/QGIS3/profiles/default/python
/home/lin/.local/share/QGIS/QGIS3/profiles/default/python/plugins
/usr/share/qgis/python/plugins
/usr/lib/python38.zip
/usr/lib/python3.8
/usr/lib/python3.8/lib-dynload
/home/lin/.local/lib/python3.8/site-packages
/usr/lib/python3.8/site-packages
/home/lin/.local/share/QGIS/QGIS3/profiles/default/python
/home/lin/Desktop

After my research it seems time.clock() was deprecated in python3.3 and finally removed in python3.8.
Maybe consider switching to other timing methods

BPR is using unlimited number of cores

The BPR prange does not include the number of cores it should be using. This will cause an unwanted spike in CPU usage whenever the user decides to use less CPU cores than available in the machine

Got KeyError when set the BPR function parameters

Hi there,

I am trying the traffic assignment according to the documentation (8.5.4. Assigning traffic on TNTP instances) using aequilibrae version 0.6.1

When I run this code:

assig.set_vdf_parameters({'alpha': 0.15, 'beta':4.0})

A KeyError raised:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-111-759b5d860529> in <module>
----> 1 assig.set_vdf_parameters({'alpha': 0.15, 'beta':4.0})

~/opt/anaconda3/envs/data/lib/python3.7/site-packages/aequilibrae/paths/traffic_assignment.py in set_vdf_parameters(self, par)
    143                 else:
    144                     array = np.zeros(self.classes[0].graph.graph.shape[0], np.float64)
--> 145                     array.fill(self.vdf_parameters[p])
    146                 pars.append(array)
    147 

KeyError: 0.15

I have no idea how to fix it. Is there a bug inside the traffic_assignment.py?

Thank you.

Project does not have a consistent link_types table

  • Add table creation to project

The table needs to exist to ensure that only valid link types are used.

  • Database trigger would ensure consistency with link tables

  • Database trigger would ensure that the nodes table is also always up-to-date

  • Trigger testing

API to manipulate the link_types is needed.

  • Adding new link types

  • Removing existing link_types

  • Editing existing link_types

  • Editing the description of the attributes for the link_types

  • Making connectors and default link_types permanent fixtures of the model (triggers & documentation)

Multi-threading optimization

OpenMP's overhead has not been taken into consideration.
Tests made with the 9750H and 4790K processors for the BPR computation points to a substantial advantage of using only half of the CPUs available across the board.

For large networks (where this actually matters), there is apparently no much gain once you go above the number of physical cores, but the only relevant thing here is the loss in performance when going from half the threads (physical CPUs) to half the threads plus one.

image

image

image

image

image

image

Use BLOB to store binary matrices within database

Despite the guidance suggesting this:

Along with the Sqlite file that is the base for the AequilibraE project, other data such as documentation and binary matrices (OMX or AEM) do not fit nicely into a database structure, and therefore are stored in the file system in parallel with the Sqlite Project in a folder with the same name.

A table with filename and the files as BLOBs would work as storing matrix data within the sqlite database, additional tags and labels can be used to describe the matrix metadata

Both 'cfw', 'bfw' and get stuck with zero step size

With version 0.6.3

Both Both 'cfw', 'bfw' and get stuck with zero step size while MSA and Frank-Wolfe options work. The log for BFW is shown below:

2020-04-01 11:49:53,085;aequilibrae;INFO ; bfw Assignment STATS
2020-04-01 11:49:53,089;aequilibrae;INFO ; Iteration, RelativeGap, stepsize
2020-04-01 11:49:53,089;aequilibrae;INFO ; Iteration, RelativeGap, stepsize
2020-04-01 11:49:53,207;aequilibrae;INFO ; 1,inf,1.0
2020-04-01 11:49:53,207;aequilibrae;INFO ; 1,inf,1.0
2020-04-01 11:49:53,325;aequilibrae;INFO ; 2,0.01813536336911382,0.2561015932062774
2020-04-01 11:49:53,325;aequilibrae;INFO ; 2,0.01813536336911382,0.2561015932062774
2020-04-01 11:49:53,441;aequilibrae;INFO ; 3,0.005430047866020795,0.0
2020-04-01 11:49:53,441;aequilibrae;INFO ; 3,0.005430047866020795,0.0
2020-04-01 11:49:53,561;aequilibrae;INFO ; 4,0.005430047866020795,0.0
2020-04-01 11:49:53,561;aequilibrae;INFO ; 4,0.005430047866020795,0.0
2020-04-01 11:49:53,676;aequilibrae;INFO ; 5,0.005430047866020795,0.0
2020-04-01 11:49:53,676;aequilibrae;INFO ; 5,0.005430047866020795,0.0
2020-04-01 11:49:53,794;aequilibrae;INFO ; 6,0.005430047866020795,0.0
2020-04-01 11:49:53,794;aequilibrae;INFO ; 6,0.005430047866020795,0.0
....

and so on until it hits the max iteration count.
The graph and demand was constructed using the Anaheim model and the assignment code copying the Sioux Falls example. I've checked the graph.network field names are correct.

graph.set_graph('time') # let's say we want to minimize time
graph.set_skimming(['time', 'distance']) # And will skim time and distance
graph.set_blocked_centroid_flows(True)

demand = aem
# demand.load(os.path.join(data_folder, 'Anaheim_trips.omx'))
demand.computational_view(['matrix']) # We will only assign one user class stored as 'matrix' inside the OMX file

assig = TrafficAssignment()

# Creates the assignment class
assigclass = TrafficClass(graph, demand)


# The first thing to do is to add at list of traffic classes to be assigned
assig.set_classes([assigclass])

assig.set_vdf("BPR")  # This is not case-sensitive # Then we set the volume delay function

assig.set_vdf_parameters({"alpha": "b", "beta": "power"}) # And its parameters

assig.set_capacity_field("capacity") # The capacity and free flow travel times as they exist in the graph
assig.set_time_field("time")

# And the algorithm we want to use to assign
# ['all-or-nothing', 'msa', 'frank-wolfe', 'cfw', 'bfw']
assig.set_algorithm('bfw')  #Biconjugate Frank-Wolfe

# since I haven't checked the parameters file, let's make sure convergence criteria is good
assig.max_iter = 50
assig.rgap_target = 0.00005

assig.execute() # we then execute the assignment

Parameter write_back error

I'm trying to get the example project to run in docker and conda to make use of jupyter notebooks, running the cell:

import aequilibrae
from os.path import join
from aequilibrae import Parameters

p = Parameters()
p.parameters['system']['logging_directory'] =  fldr
p.write_back()

I'm getting the following error:

---------------------------------------------------------------------------
PermissionError                           Traceback (most recent call last)
<ipython-input-14-aff623fa8871> in <module>
      5 p = Parameters()
      6 p.parameters['system']['logging_directory'] =  fldr
----> 7 p.write_back()

/opt/conda/lib/python3.7/site-packages/aequilibrae/parameters.py in write_back(self)
     39     def write_back(self):
     40         """Writes the parameters back to file"""
---> 41         stream = open(self.file, "w")
     42         yaml.dump(self.parameters, stream, default_flow_style=False)
     43         stream.close()

PermissionError: [Errno 13] Permission denied: '/opt/conda/lib/python3.7/site-packages/aequilibrae/parameters.yml'

As far as I can tell the library is trying to rewrite itself which sounds a little dubious to me given Idempotency is always desirable. Is there a way of storing/reading the parameters elsewhere?

Steps to reproduce

make the dockerfile:

FROM jupyter/scipy-notebook

USER root

RUN pip install aequilibrae
RUN pip install openmatrix
RUN apt-get update && apt-get -y upgrade
RUN apt-get install -y sqlite3 libsqlite3-dev libsqlite3-mod-spatialite

and run it with the bash command:

docker build --rm -t jupyter/aequilibrae .
docker run -p 8888:8888 -v "$PWD":/home/jovyan/work jupyter/aequilibrae start.sh jupyter notebook --NotebookApp.token=''

with the docker container now running jupyter navigate to http://localhost:8888 and try running the top snippet of python

Parameters files is not being checked

There is no consistency checking for the parameters file as it stands right now.
Things to check:

  • All components are there
  • Are there repeated entries in arrays (e.g. link types per mode for OSM import)

Skims are wrong

It seems that when we generate skims for more than one field (say blended distance and final travel time), we are getting the labels as we want, but all the values for one of them only

Writing additional fields to assignment results

Purpose of use
Software enhancement

Is your feature request related to a problem? Please describe.
Current assignment results only contain link flows per class, and adding additional fields would be trivial

Describe the solution you'd like
Fields to be added are:

  • VoC (per direction)
  • Congested travel time (per direction)

More detailed logging for OSM data download

Purpose of use
OSM Downloading is very slow, so having more informative logging would be very helpful. Two main items are:

  • How many files to download and where do we stand
  • How many links still need to be added to the network

Is your feature request related to a problem? Please describe.
OSM Downloading is very slow

Describe the solution you'd like
Better logging

Link directions for path computation

Purpose of use
For map-matching PT routes for input in Polaris

Is your feature request related to a problem? Please describe.
IOn order to cut a link, it helps to know if we should be cutting it from A to a point, or from a point to B

Describe the solution you'd like
We should have a class member for path results with the direction (-1 or 1) for all the links along a path between two nodes

Modes are not enforced in the model file

It is possible to insert any value in the modes field in the links table, as it is not linked to the modes table.
Need to create a trigger that checks if the value entered in the links table exists in the modes table and refused it in case it doesn't.

Because the modes field is just a concatenation of all modes (one letter per mode), we need to check if each and every letter exist for modes in the modes table.

Missing about table

Missing table to hold metadata for the project

Minimum information is:
Project ID (uuid in hexadecimal)
AequilibraE version
Author
Project name
Project description
Scenario name
Scenario description

  • Table creation with project
  • API for Table creation on projects that do not have it
  • Tests
  • Documentation

Not possible to create graphs when no centroids are available in the model

2020-04-17T11:37:50 WARNING Traceback (most recent call last):
File "C:/Users/pedro/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\AequilibraE-GUI\paths_procedures\show_shortest_path_dialog.py", line 92, in prepare_graph_and_network
self.project.network.build_graphs()
File "C:\Users\pedro\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins\AequilibraE-GUI\aequilibrae\aequilibrae\project\network\network.py", line 257, in build_graphs
g.prepare_graph(centroids)
File "C:\Users\pedro\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins\AequilibraE-GUI\aequilibrae\aequilibrae\paths\graph.py", line 226, in prepare_graph
raise ValueError("Centroids need to be an array of integers 64 bits")
ValueError: Centroids need to be an array of integers 64 bits

Desire Line "Zone or Node Layer" drop down

desirelinetoolbox

No layers show up in Desire Line Toolbox window dropdown for "Zone or Node Layer". I've tried having an ID field in multiple formats (float, text, integer, double) to see if it wants to IDs in a specific field type, but the dropdown remains blank and doesn't drop down.

Graph property for block_centroid_flows is not being saved correctly to disk

Purpose of use
Polaris

Describe the bug
Graph property for block_centroid_flows is not being saved correctly to disk, results in different graphs from saving and loading

To Reproduce

  • Create a network where all the nodes are centroids (do NOT use graph.set_blocked_centroid_flows(False))
  • Attempt to compute a path between any two nodes (results in error)
  • Now save the graph to disk
  • Create a new graph instance
  • Load graph from disk
  • Compute the same path as above (works well)

Expected behavior
A message to the user that computing a path in such a network makes no sense

Error message/stack trace

Working with file on D:/Argonne/GTFS/CHICAGO/chicago2018-Supply.sqlite
Running connectivity tests

Process finished with exit code -1073741819 (0xC0000005)

Desktop (please complete the following information):

  • OS: Windows 10 64 bits
  • Python version: 3.7.4
  • Version: 0.6.5

No API to edit the modes table

There is no API to edit the modes table. Minimum API should include:

  • View modes
  • Add mode
  • Edit mode information
  • Adding mode to the network links based on link types and modes already existing
  • Edit extra attributes for the modes table (possible single class for all the extra Greek letters attributes?)

Synthetic gravity model calibration fails when using OMX inputs

Computation fails hard, and there are a few issues:

  • Impedance matrix gets copied into a new array, but copying OMX files is implemented in a too lazy of a way
  • Gravity application procedure does not leverage computational_view, attempting to access the dictionary of matrices

Tests missing

  • Non-sequential centroid IDs
  • Empty values in matrices being assigned
  • Conversion of matrix from integer to float for assignment

Create Node Layer not working

I have a line shapefile representing my roadway network loaded into QGIS 3.6. I have selected that layer as my network layer in AequilibraE under the Network Preparation dialog. I then clicked the "Create node layer" option, entered a node layer name and node numbering start, then clicked "Run!". The dialog then sticks at 0% saying "Duplicating line layer".

capture

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.