-
-
Notifications
You must be signed in to change notification settings - Fork 3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
60353b1
commit 4b462f5
Showing
3 changed files
with
364 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
|
||
|
||
############################################################# | ||
# sources | ||
|
||
SET(QGIS_NETWORK_ANALYSIS_SRCS | ||
qgsgraph.cpp | ||
) | ||
|
||
INCLUDE_DIRECTORIES(BEFORE raster) | ||
|
||
SET(QGIS_ANALYSIS_MOC_HDRS | ||
) | ||
|
||
QT4_WRAP_CPP(QGIS_NETWORK_ANALYSIS_MOC_SRCS ${QGIS_ANALYSIS_MOC_HDRS}) | ||
|
||
|
||
INCLUDE_DIRECTORIES( | ||
${CMAKE_CURRENT_SOURCE_DIR} | ||
${CMAKE_CURRENT_SOURCE_DIR}../../core/ | ||
interpolation | ||
${PROJ_INCLUDE_DIR} | ||
${GEOS_INCLUDE_DIR} | ||
${GDAL_INCLUDE_DIR} | ||
) | ||
|
||
|
||
############################################################# | ||
# qgis_analysis library | ||
|
||
ADD_LIBRARY(qgis_networkanalysis SHARED ${QGIS_NETWORK_ANALYSIS_SRCS} ${QGIS_NETWORK_ANALYSIS_MOC_SRCS} ) | ||
|
||
ADD_DEPENDENCIES(qgis_networkanalysis qgis_core) | ||
|
||
SET_TARGET_PROPERTIES(qgis_networkanalysis PROPERTIES VERSION ${COMPLETE_VERSION} SOVERSION ${COMPLETE_VERSION}) | ||
|
||
TARGET_LINK_LIBRARIES(qgis_networkanalysis | ||
qgis_core | ||
) | ||
|
||
IF (APPLE) | ||
SET_TARGET_PROPERTIES(qgis_networkanalysis PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE ) | ||
ENDIF (APPLE) | ||
|
||
INSTALL(TARGETS qgis_networkanalysis | ||
RUNTIME DESTINATION ${QGIS_BIN_DIR} | ||
LIBRARY DESTINATION ${QGIS_LIB_DIR} | ||
ARCHIVE DESTINATION ${QGIS_LIB_DIR}) | ||
|
||
|
||
# Added by Tim to install headers | ||
|
||
SET(QGIS_NETWORK_ANALYSIS_HDRS | ||
qgsgraph.h ) | ||
|
||
INSTALL(CODE "MESSAGE(\"Installing NETWORK ANALYSIS headers...\")") | ||
INSTALL(FILES ${QGIS_NETWORK_ANALYSIS_HDRS} ${QGIS_NETWORK_ANALYSIS_MOC_HDRS} DESTINATION ${QGIS_INCLUDE_DIR}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,129 @@ | ||
/*************************************************************************** | ||
* Copyright (C) 2011 by Sergey Yakushev * | ||
* yakushevs <at >list.ru * | ||
* * | ||
* * | ||
* This program is free software; you can redistribute it and/or modify * | ||
* it under the terms of the GNU General Public License as published by * | ||
* the Free Software Foundation; either version 2 of the License, or * | ||
* (at your option) any later version. * | ||
***************************************************************************/ | ||
|
||
/** | ||
* \file qgsgraph.cpp | ||
* \brief implementation QgsGraph, QgsGraphVertex, QgsGraphEdge | ||
*/ | ||
|
||
#include "qgsgraph.h" | ||
|
||
QgsGraph::QgsGraph() | ||
{ | ||
} | ||
|
||
|
||
QgsGraph::~QgsGraph() | ||
{ | ||
|
||
} | ||
|
||
int QgsGraph::addVertex( const QgsPoint& pt ) | ||
{ | ||
mGraphVertexes.append( QgsGraphVertex( pt ) ); | ||
return mGraphVertexes.size()-1; | ||
} | ||
|
||
int QgsGraph::addEdge( int outVertexIdx, int inVertexIdx, const QVector< QVariant >& properties ) | ||
{ | ||
QgsGraphEdge e; | ||
|
||
e.mProperties = properties; | ||
e.mOut = outVertexIdx; | ||
e.mIn = inVertexIdx; | ||
mGraphEdges.push_back( e ); | ||
int edgeIdx = mGraphEdges.size()-1; | ||
|
||
mGraphVertexes[ outVertexIdx ].mOutEdges.push_back( edgeIdx ); | ||
mGraphVertexes[ inVertexIdx ].mInEdges.push_back( edgeIdx ); | ||
|
||
return mGraphEdges.size()-1; | ||
} | ||
|
||
const QgsGraphVertex& QgsGraph::vertex( int idx ) const | ||
{ | ||
return mGraphVertexes[ idx ]; | ||
} | ||
|
||
const QgsGraphEdge& QgsGraph::edge( int idx ) const | ||
{ | ||
return mGraphEdges[ idx ]; | ||
} | ||
|
||
|
||
int QgsGraph::vertexCount() const | ||
{ | ||
return mGraphVertexes.size(); | ||
} | ||
|
||
int QgsGraph::edgeCount() const | ||
{ | ||
return mGraphEdges.size(); | ||
} | ||
|
||
int QgsGraph::findVertex( const QgsPoint& pt ) const | ||
{ | ||
int i = 0; | ||
for ( i = 0; i < mGraphVertexes.size(); ++i ) | ||
{ | ||
if ( mGraphVertexes[ i ].point() == pt ) | ||
{ | ||
return i; | ||
} | ||
} | ||
return -1; | ||
} | ||
|
||
QgsGraphEdge::QgsGraphEdge() | ||
{ | ||
|
||
} | ||
|
||
QVariant QgsGraphEdge::property(int i) const | ||
{ | ||
return mProperties[ i ]; | ||
} | ||
|
||
QVector< QVariant > QgsGraphEdge::properties() const | ||
{ | ||
return mProperties; | ||
} | ||
|
||
int QgsGraphEdge::in() const | ||
{ | ||
return mIn; | ||
} | ||
|
||
int QgsGraphEdge::out() const | ||
{ | ||
return mOut; | ||
} | ||
|
||
QgsGraphVertex::QgsGraphVertex( const QgsPoint& point ) | ||
: mCoordinate( point ) | ||
{ | ||
|
||
} | ||
|
||
QgsGraphEdgeList QgsGraphVertex::outEdges() const | ||
{ | ||
return mOutEdges; | ||
} | ||
|
||
QgsGraphEdgeList QgsGraphVertex::inEdges() const | ||
{ | ||
return mInEdges; | ||
} | ||
|
||
QgsPoint QgsGraphVertex::point() const | ||
{ | ||
return mCoordinate; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,178 @@ | ||
/*************************************************************************** | ||
graph.h | ||
-------------------------------------- | ||
Date : 2011-04-01 | ||
Copyright : (C) 2010 by Yakushev Sergey | ||
Email : YakushevS <at> list.ru | ||
**************************************************************************** | ||
* * | ||
* This program is free software; you can redistribute it and/or modify * | ||
* it under the terms of the GNU General Public License as published by * | ||
* the Free Software Foundation; either version 2 of the License, or * | ||
* (at your option) any later version. * | ||
* * | ||
***************************************************************************/ | ||
|
||
/* | ||
* | ||
* \file qgsgraph.h | ||
* Этот файл описывает встроенные в QGIS классы описывающие математический граф. Вершина графа идентифицируется своими географическими координатами, никакие дополнительные свойства ей не могут быть присвоены. Количество свойств графа определяется разработчиком и не ограничено, например длина и время движения по дуге. Граф может быть направленным, иметь инцедентные ребра и петли. | ||
* | ||
*/ | ||
|
||
#ifndef QGSGRAPHH | ||
#define QGSGRAPHH | ||
|
||
// QT4 includes | ||
#include <QList> | ||
#include <QVector> | ||
#include <QVariant> | ||
|
||
// QGIS includes | ||
#include "qgspoint.h" | ||
|
||
class QgsGraphVertex; | ||
|
||
/** | ||
* \ingroup analysis | ||
* \class QgsGraphEdge | ||
* \brief This class implement a graph edge | ||
*/ | ||
class ANALYSIS_EXPORT QgsGraphEdge | ||
{ | ||
public: | ||
QgsGraphEdge(); | ||
|
||
/** | ||
* return property value | ||
* @param propertyIndex property index | ||
*/ | ||
QVariant property(int propertyIndex ) const; | ||
|
||
/** | ||
* get array of proertyes | ||
*/ | ||
QVector< QVariant > properties() const; | ||
|
||
/** | ||
* return index of outgoing vertex | ||
*/ | ||
int out() const; | ||
|
||
/** | ||
* return index of incoming vertex | ||
*/ | ||
int in() const; | ||
|
||
private: | ||
|
||
QVector< QVariant > mProperties; | ||
|
||
int mOut; | ||
int mIn; | ||
|
||
friend class QgsGraph; | ||
}; | ||
|
||
|
||
typedef QList< int > QgsGraphEdgeList; | ||
|
||
/** | ||
* \ingroup analysis | ||
* \class QgsGraphVertex | ||
* \brief This class implement a graph vertex | ||
*/ | ||
class ANALYSIS_EXPORT QgsGraphVertex | ||
{ | ||
public: | ||
/** | ||
* default constructor. It need for QT's container, e.g. QVector | ||
*/ | ||
QgsGraphVertex() {} | ||
|
||
/** | ||
* This constructor initializes QgsGraphVertex object and associates a vertex with a point | ||
*/ | ||
|
||
QgsGraphVertex( const QgsPoint& point ); | ||
|
||
/** | ||
* return outgoing edges | ||
*/ | ||
QgsGraphEdgeList outEdges() const; | ||
|
||
/** | ||
* return incoming edges | ||
*/ | ||
QgsGraphEdgeList inEdges() const; | ||
|
||
/** | ||
* return vertex point | ||
*/ | ||
QgsPoint point() const; | ||
|
||
private: | ||
QgsPoint mCoordinate; | ||
QgsGraphEdgeList mOutEdges; | ||
QgsGraphEdgeList mInEdges; | ||
|
||
friend class QgsGraph; | ||
}; | ||
|
||
/** | ||
* \ingroup analysis | ||
* \class QgsGraph | ||
* \brief Mathematics graph representation | ||
*/ | ||
|
||
class ANALYSIS_EXPORT QgsGraph | ||
{ | ||
public: | ||
QgsGraph(); | ||
|
||
~QgsGraph(); | ||
|
||
// begin graph constructing methods | ||
/** | ||
* add vertex to a grap | ||
*/ | ||
int addVertex( const QgsPoint& pt ); | ||
|
||
/** | ||
* add edge to a graph | ||
*/ | ||
int addEdge( int outVertexIdx, int inVertexIdx, const QVector< QVariant >& properties ); | ||
|
||
/** | ||
* retrun vertex count | ||
*/ | ||
int vertexCount() const; | ||
|
||
/** | ||
* return vertex at index | ||
*/ | ||
const QgsGraphVertex& vertex( int idx ) const; | ||
|
||
/** | ||
* retrun edge count | ||
*/ | ||
int edgeCount() const; | ||
|
||
/** | ||
* retrun edge at index | ||
*/ | ||
const QgsGraphEdge& edge( int idx ) const; | ||
|
||
/** | ||
* find vertex by point | ||
* \return vertex index | ||
*/ | ||
int findVertex( const QgsPoint& pt ) const; | ||
|
||
private: | ||
QVector<QgsGraphVertex> mGraphVertexes; | ||
|
||
QVector<QgsGraphEdge> mGraphEdges; | ||
}; | ||
|
||
#endif //QGSGRAPHH |