edge_paths_with_PE_controll.xsl 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  3. xmlns:xs="http://www.w3.org/2001/XMLSchema"
  4. xmlns:bp="https://procesy5.pl/biale_plamy-schema.xsd"
  5. exclude-result-prefixes="xs"
  6. version="2.0">
  7. <xsl:output indent="yes"/>
  8. <xsl:strip-space elements="*"/>
  9. <xsl:param name="PE_Price" select="1500"/>
  10. <xsl:param name="Cable_Price" select="10"/>
  11. <!-- bedziemy od najdluzszej drogi starac sie rozmiescic PE w oparciu o rozmieszczenie klientow oraz odleglosci -->
  12. <xsl:template match="edge_joins_filled_paths">
  13. <xsl:variable name="edge_joins_filled_paths_len">
  14. <xsl:for-each select="item">
  15. <xsl:sort select="number(asText/@len)" order="descending"/>
  16. <Path>
  17. <xsl:attribute name="id" select="@id"/>
  18. <xsl:attribute name="len" select="asText/@len"/>
  19. <xsl:attribute name="Points_cnt" select="asText/@Points_cnt"/>
  20. </Path>
  21. </xsl:for-each>
  22. </xsl:variable>
  23. <edge_paths_with_PE_controll>
  24. <xsl:apply-templates select="$edge_joins_filled_paths_len"/>
  25. </edge_paths_with_PE_controll>
  26. </xsl:template>
  27. <xsl:template match="Path">
  28. <Path>
  29. <xsl:attribute name="Points_cnt" select="@Points_cnt"/>
  30. <!--<xsl:variable name="edge_joins_filled_paths" select="collection( 'edge_joins_filled_paths?select=*.xml;recurse=yes')"/>-->
  31. <xsl:variable name="edge_joins_filled_path" select=" doc(concat('edge_joins_filled_paths/edge_joins_filled_paths.',@id,'.xml'))"/>
  32. <!--<EdgeWayJoinsPair>
  33. <xsl:copy-of select="$edge_joins_filled_path"></xsl:copy-of>
  34. </EdgeWayJoinsPair>-->
  35. <!-- liczmy najwieksza roznice odleglosci miedzy punktami -->
  36. <!-- rozmieszczamy prawidlowo PE na danej trasie -->
  37. <xsl:variable name="EconomicDistanceCut">
  38. <EconomicDistanceCut>
  39. <xsl:for-each select="$edge_joins_filled_path/edge_joins_filled_paths_xml/asText_XMl/LineString">
  40. <distance>
  41. <xsl:attribute name="pos" select="position()"/>
  42. <xsl:attribute name="not_id" select="@not_id"/>
  43. <xsl:attribute name="len" select="@len"/>
  44. <xsl:variable name="Points" select="count(Points)"/>
  45. <xsl:variable name="Ways" select="count(Ways)"/>
  46. <xsl:choose>
  47. <xsl:when test="Points or Ways">
  48. <xsl:attribute name="point_count" select="$Points + $Ways"/>
  49. </xsl:when>
  50. </xsl:choose>
  51. </distance>
  52. </xsl:for-each>
  53. </EconomicDistanceCut>
  54. </xsl:variable>
  55. <!--<xsl:copy-of select="$EconomicDistanceCut"/>-->
  56. <xsl:variable name="EconomicDistanceCut2">
  57. <EconomicDistanceCut2>
  58. <xsl:for-each select="$EconomicDistanceCut/EconomicDistanceCut/distance">
  59. <distance2>
  60. <xsl:attribute name="distance" select="sum( $EconomicDistanceCut/EconomicDistanceCut/distance[number(@pos )&lt; number(current()/@pos )]/@len)"/>
  61. <!-- suma do poprzedniego pkt tylko dla tych co maja pkt-->
  62. <xsl:choose>
  63. <xsl:when test="@point_count&gt;0">
  64. <xsl:variable name="max_pos_z_pkt" select="max($EconomicDistanceCut/EconomicDistanceCut/distance[
  65. number(@pos )&lt; number(current()/@pos ) and number(@point_count)&gt;0
  66. ]/@pos)"/>
  67. <xsl:attribute name="max_pos_z_pkt" select="$max_pos_z_pkt"/>
  68. <xsl:variable name="disttopkt" select="sum( $EconomicDistanceCut/EconomicDistanceCut/distance[
  69. number(@pos )&lt; number(current()/@pos )
  70. and number(@pos) &gt;= number($max_pos_z_pkt)
  71. ]/@len)"/>
  72. <xsl:attribute name="disttopkt" select="$disttopkt" />
  73. <xsl:variable name="cost_dist" select="$Cable_Price * $disttopkt * @point_count"/>
  74. <xsl:attribute name="cost_dist" select="$cost_dist"/>
  75. <xsl:if test="$cost_dist &gt; $PE_Price">
  76. <xsl:attribute name="cut_by_pe" select="1"/>
  77. </xsl:if>
  78. </xsl:when>
  79. </xsl:choose>
  80. <xsl:copy-of select="@point_count"/>
  81. <xsl:copy-of select="@pos"/>
  82. <xsl:copy-of select="@len"/>
  83. </distance2>
  84. </xsl:for-each>
  85. </EconomicDistanceCut2>
  86. </xsl:variable>
  87. <xsl:copy-of select="$EconomicDistanceCut2"/>
  88. <PointMatrix>
  89. <xsl:for-each-group select="$EconomicDistanceCut2/EconomicDistanceCut2/distance2" group-starting-with="@cut_by_pe">
  90. <PointMatrixGr>
  91. <xsl:for-each select=" current-group()">
  92. <PointMatrix_rec>
  93. <xsl:copy-of select="."></xsl:copy-of>
  94. </PointMatrix_rec>
  95. </xsl:for-each>
  96. </PointMatrixGr>
  97. </xsl:for-each-group>
  98. </PointMatrix>
  99. </Path>
  100. </xsl:template>
  101. </xsl:stylesheet>