| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- <?xml version="1.0" encoding="UTF-8"?>
- <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:xs="http://www.w3.org/2001/XMLSchema"
- xmlns:bp="https://procesy5.pl/biale_plamy-schema.xsd"
- exclude-result-prefixes="xs"
- version="2.0">
-
- <xsl:output indent="yes"/>
- <xsl:strip-space elements="*"/>
-
- <xsl:param name="PE_Price" select="1500"/>
- <xsl:param name="Cable_Price" select="10"/>
-
- <!-- bedziemy od najdluzszej drogi starac sie rozmiescic PE w oparciu o rozmieszczenie klientow oraz odleglosci -->
-
-
-
- <xsl:template match="edge_joins_filled_paths">
-
- <xsl:variable name="edge_joins_filled_paths_len">
- <xsl:for-each select="item">
- <xsl:sort select="number(asText/@len)" order="descending"/>
- <Path>
- <xsl:attribute name="id" select="@id"/>
- <xsl:attribute name="len" select="asText/@len"/>
- <xsl:attribute name="Points_cnt" select="asText/@Points_cnt"/>
- </Path>
- </xsl:for-each>
- </xsl:variable>
-
- <edge_paths_with_PE_controll>
- <xsl:apply-templates select="$edge_joins_filled_paths_len"/>
- </edge_paths_with_PE_controll>
- </xsl:template>
-
-
- <xsl:template match="Path">
-
- <Path>
- <xsl:attribute name="Points_cnt" select="@Points_cnt"/>
- <!--<xsl:variable name="edge_joins_filled_paths" select="collection( 'edge_joins_filled_paths?select=*.xml;recurse=yes')"/>-->
- <xsl:variable name="edge_joins_filled_path" select=" doc(concat('edge_joins_filled_paths/edge_joins_filled_paths.',@id,'.xml'))"/>
- <!--<EdgeWayJoinsPair>
- <xsl:copy-of select="$edge_joins_filled_path"></xsl:copy-of>
- </EdgeWayJoinsPair>-->
-
- <!-- liczmy najwieksza roznice odleglosci miedzy punktami -->
-
-
- <!-- rozmieszczamy prawidlowo PE na danej trasie -->
- <xsl:variable name="EconomicDistanceCut">
- <EconomicDistanceCut>
-
- <xsl:for-each select="$edge_joins_filled_path/edge_joins_filled_paths_xml/asText_XMl/LineString">
- <distance>
- <xsl:attribute name="pos" select="position()"/>
- <xsl:attribute name="not_id" select="@not_id"/>
- <xsl:attribute name="len" select="@len"/>
- <xsl:variable name="Points" select="count(Points)"/>
- <xsl:variable name="Ways" select="count(Ways)"/>
- <xsl:choose>
- <xsl:when test="Points or Ways">
- <xsl:attribute name="point_count" select="$Points + $Ways"/>
- </xsl:when>
- </xsl:choose>
- </distance>
- </xsl:for-each>
- </EconomicDistanceCut>
- </xsl:variable>
- <!--<xsl:copy-of select="$EconomicDistanceCut"/>-->
- <xsl:variable name="EconomicDistanceCut2">
- <EconomicDistanceCut2>
- <xsl:for-each select="$EconomicDistanceCut/EconomicDistanceCut/distance">
- <distance2>
- <xsl:attribute name="distance" select="sum( $EconomicDistanceCut/EconomicDistanceCut/distance[number(@pos )< number(current()/@pos )]/@len)"/>
- <!-- suma do poprzedniego pkt tylko dla tych co maja pkt-->
- <xsl:choose>
- <xsl:when test="@point_count>0">
- <xsl:variable name="max_pos_z_pkt" select="max($EconomicDistanceCut/EconomicDistanceCut/distance[
- number(@pos )< number(current()/@pos ) and number(@point_count)>0
- ]/@pos)"/>
- <xsl:attribute name="max_pos_z_pkt" select="$max_pos_z_pkt"/>
- <xsl:variable name="disttopkt" select="sum( $EconomicDistanceCut/EconomicDistanceCut/distance[
- number(@pos )< number(current()/@pos )
- and number(@pos) >= number($max_pos_z_pkt)
- ]/@len)"/>
- <xsl:attribute name="disttopkt" select="$disttopkt" />
- <xsl:variable name="cost_dist" select="$Cable_Price * $disttopkt * @point_count"/>
- <xsl:attribute name="cost_dist" select="$cost_dist"/>
- <xsl:if test="$cost_dist > $PE_Price">
- <xsl:attribute name="cut_by_pe" select="1"/>
- </xsl:if>
- </xsl:when>
- </xsl:choose>
-
- <xsl:copy-of select="@point_count"/>
- <xsl:copy-of select="@pos"/>
- <xsl:copy-of select="@len"/>
- </distance2>
- </xsl:for-each>
- </EconomicDistanceCut2>
- </xsl:variable>
-
- <xsl:copy-of select="$EconomicDistanceCut2"/>
-
- <PointMatrix>
- <xsl:for-each-group select="$EconomicDistanceCut2/EconomicDistanceCut2/distance2" group-starting-with="@cut_by_pe">
- <PointMatrixGr>
- <xsl:for-each select=" current-group()">
- <PointMatrix_rec>
- <xsl:copy-of select="."></xsl:copy-of>
- </PointMatrix_rec>
- </xsl:for-each>
- </PointMatrixGr>
- </xsl:for-each-group>
- </PointMatrix>
-
-
-
- </Path>
- </xsl:template>
-
-
- </xsl:stylesheet>
|