@itwin/map-layers-formats 4.1.0-dev.6 → 4.1.0-dev.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/CHANGELOG.md +49 -1
  2. package/lib/cjs/ArcGisFeature/ArcGisCanvasRenderer.d.ts +17 -0
  3. package/lib/cjs/ArcGisFeature/ArcGisCanvasRenderer.d.ts.map +1 -0
  4. package/lib/cjs/ArcGisFeature/ArcGisCanvasRenderer.js +42 -0
  5. package/lib/cjs/ArcGisFeature/ArcGisCanvasRenderer.js.map +1 -0
  6. package/lib/cjs/ArcGisFeature/ArcGisFeatureFormat.d.ts.map +1 -1
  7. package/lib/cjs/ArcGisFeature/ArcGisFeatureFormat.js +3 -0
  8. package/lib/cjs/ArcGisFeature/ArcGisFeatureFormat.js.map +1 -1
  9. package/lib/cjs/ArcGisFeature/ArcGisFeatureProvider.d.ts +7 -5
  10. package/lib/cjs/ArcGisFeature/ArcGisFeatureProvider.d.ts.map +1 -1
  11. package/lib/cjs/ArcGisFeature/ArcGisFeatureProvider.js +88 -35
  12. package/lib/cjs/ArcGisFeature/ArcGisFeatureProvider.js.map +1 -1
  13. package/lib/cjs/ArcGisFeature/ArcGisFeatureQuery.d.ts +5 -0
  14. package/lib/cjs/ArcGisFeature/ArcGisFeatureQuery.d.ts.map +1 -1
  15. package/lib/cjs/ArcGisFeature/ArcGisFeatureQuery.js +4 -0
  16. package/lib/cjs/ArcGisFeature/ArcGisFeatureQuery.js.map +1 -1
  17. package/lib/cjs/ArcGisFeature/ArcGisFeatureReader.d.ts +15 -6
  18. package/lib/cjs/ArcGisFeature/ArcGisFeatureReader.d.ts.map +1 -1
  19. package/lib/cjs/ArcGisFeature/ArcGisFeatureReader.js +6 -4
  20. package/lib/cjs/ArcGisFeature/ArcGisFeatureReader.js.map +1 -1
  21. package/lib/cjs/ArcGisFeature/ArcGisJsonFeatureReader.d.ts +13 -0
  22. package/lib/cjs/ArcGisFeature/ArcGisJsonFeatureReader.d.ts.map +1 -0
  23. package/lib/cjs/ArcGisFeature/{ArcGisFeatureJSON.js → ArcGisJsonFeatureReader.js} +36 -58
  24. package/lib/cjs/ArcGisFeature/ArcGisJsonFeatureReader.js.map +1 -0
  25. package/lib/cjs/ArcGisFeature/{ArcGisFeaturePBF.d.ts → ArcGisPbfFeatureReader.d.ts} +6 -7
  26. package/lib/cjs/ArcGisFeature/ArcGisPbfFeatureReader.d.ts.map +1 -0
  27. package/lib/cjs/ArcGisFeature/{ArcGisFeaturePBF.js → ArcGisPbfFeatureReader.js} +46 -32
  28. package/lib/cjs/ArcGisFeature/ArcGisPbfFeatureReader.js.map +1 -0
  29. package/lib/cjs/ArcGisFeature/ArcGisSymbologyRenderer.js +4 -4
  30. package/lib/cjs/ArcGisFeature/ArcGisSymbologyRenderer.js.map +1 -1
  31. package/lib/cjs/Tools/MapFeatureInfoDecorator.d.ts +34 -0
  32. package/lib/cjs/Tools/MapFeatureInfoDecorator.d.ts.map +1 -0
  33. package/lib/cjs/Tools/MapFeatureInfoDecorator.js +281 -0
  34. package/lib/cjs/Tools/MapFeatureInfoDecorator.js.map +1 -0
  35. package/lib/cjs/Tools/MapFeatureInfoTool.d.ts +38 -0
  36. package/lib/cjs/Tools/MapFeatureInfoTool.d.ts.map +1 -0
  37. package/lib/cjs/Tools/MapFeatureInfoTool.js +113 -0
  38. package/lib/cjs/Tools/MapFeatureInfoTool.js.map +1 -0
  39. package/lib/cjs/map-layers-formats.d.ts +1 -0
  40. package/lib/cjs/map-layers-formats.d.ts.map +1 -1
  41. package/lib/cjs/map-layers-formats.js +1 -0
  42. package/lib/cjs/map-layers-formats.js.map +1 -1
  43. package/lib/cjs/mapLayersFormats.d.ts +12 -1
  44. package/lib/cjs/mapLayersFormats.d.ts.map +1 -1
  45. package/lib/cjs/mapLayersFormats.js +11 -1
  46. package/lib/cjs/mapLayersFormats.js.map +1 -1
  47. package/lib/esm/ArcGisFeature/ArcGisCanvasRenderer.d.ts +17 -0
  48. package/lib/esm/ArcGisFeature/ArcGisCanvasRenderer.d.ts.map +1 -0
  49. package/lib/esm/ArcGisFeature/ArcGisCanvasRenderer.js +38 -0
  50. package/lib/esm/ArcGisFeature/ArcGisCanvasRenderer.js.map +1 -0
  51. package/lib/esm/ArcGisFeature/ArcGisFeatureFormat.d.ts.map +1 -1
  52. package/lib/esm/ArcGisFeature/ArcGisFeatureFormat.js +4 -1
  53. package/lib/esm/ArcGisFeature/ArcGisFeatureFormat.js.map +1 -1
  54. package/lib/esm/ArcGisFeature/ArcGisFeatureProvider.d.ts +7 -5
  55. package/lib/esm/ArcGisFeature/ArcGisFeatureProvider.d.ts.map +1 -1
  56. package/lib/esm/ArcGisFeature/ArcGisFeatureProvider.js +89 -36
  57. package/lib/esm/ArcGisFeature/ArcGisFeatureProvider.js.map +1 -1
  58. package/lib/esm/ArcGisFeature/ArcGisFeatureQuery.d.ts +5 -0
  59. package/lib/esm/ArcGisFeature/ArcGisFeatureQuery.d.ts.map +1 -1
  60. package/lib/esm/ArcGisFeature/ArcGisFeatureQuery.js +4 -0
  61. package/lib/esm/ArcGisFeature/ArcGisFeatureQuery.js.map +1 -1
  62. package/lib/esm/ArcGisFeature/ArcGisFeatureReader.d.ts +15 -6
  63. package/lib/esm/ArcGisFeature/ArcGisFeatureReader.d.ts.map +1 -1
  64. package/lib/esm/ArcGisFeature/ArcGisFeatureReader.js +4 -2
  65. package/lib/esm/ArcGisFeature/ArcGisFeatureReader.js.map +1 -1
  66. package/lib/esm/ArcGisFeature/ArcGisJsonFeatureReader.d.ts +13 -0
  67. package/lib/esm/ArcGisFeature/ArcGisJsonFeatureReader.d.ts.map +1 -0
  68. package/lib/esm/ArcGisFeature/ArcGisJsonFeatureReader.js +107 -0
  69. package/lib/esm/ArcGisFeature/ArcGisJsonFeatureReader.js.map +1 -0
  70. package/lib/esm/ArcGisFeature/{ArcGisFeaturePBF.d.ts → ArcGisPbfFeatureReader.d.ts} +6 -7
  71. package/lib/esm/ArcGisFeature/ArcGisPbfFeatureReader.d.ts.map +1 -0
  72. package/lib/esm/ArcGisFeature/{ArcGisFeaturePBF.js → ArcGisPbfFeatureReader.js} +44 -30
  73. package/lib/esm/ArcGisFeature/ArcGisPbfFeatureReader.js.map +1 -0
  74. package/lib/esm/ArcGisFeature/ArcGisSymbologyRenderer.js +4 -4
  75. package/lib/esm/ArcGisFeature/ArcGisSymbologyRenderer.js.map +1 -1
  76. package/lib/esm/Tools/MapFeatureInfoDecorator.d.ts +34 -0
  77. package/lib/esm/Tools/MapFeatureInfoDecorator.d.ts.map +1 -0
  78. package/lib/esm/Tools/MapFeatureInfoDecorator.js +277 -0
  79. package/lib/esm/Tools/MapFeatureInfoDecorator.js.map +1 -0
  80. package/lib/esm/Tools/MapFeatureInfoTool.d.ts +38 -0
  81. package/lib/esm/Tools/MapFeatureInfoTool.d.ts.map +1 -0
  82. package/lib/esm/Tools/MapFeatureInfoTool.js +110 -0
  83. package/lib/esm/Tools/MapFeatureInfoTool.js.map +1 -0
  84. package/lib/esm/map-layers-formats.d.ts +1 -0
  85. package/lib/esm/map-layers-formats.d.ts.map +1 -1
  86. package/lib/esm/map-layers-formats.js +1 -0
  87. package/lib/esm/map-layers-formats.js.map +1 -1
  88. package/lib/esm/mapLayersFormats.d.ts +12 -1
  89. package/lib/esm/mapLayersFormats.d.ts.map +1 -1
  90. package/lib/esm/mapLayersFormats.js +13 -2
  91. package/lib/esm/mapLayersFormats.js.map +1 -1
  92. package/lib/public/locales/en/mapLayersFormats.json +12 -0
  93. package/package.json +18 -15
  94. package/.nycrc +0 -10
  95. package/.rush/temp/operation/build/all.log +0 -3
  96. package/.rush/temp/operation/build/state.json +0 -3
  97. package/.rush/temp/operation/cover/all.log +0 -98
  98. package/.rush/temp/operation/cover/state.json +0 -3
  99. package/.rush/temp/operation/docs/all.log +0 -30
  100. package/.rush/temp/operation/docs/state.json +0 -3
  101. package/.rush/temp/package-deps_build.json +0 -36
  102. package/.rush/temp/package-deps_cover.json +0 -36
  103. package/.rush/temp/package-deps_docs.json +0 -36
  104. package/.rush/temp/shrinkwrap-deps.json +0 -505
  105. package/CHANGELOG.json +0 -119
  106. package/config/rush-project.json +0 -6
  107. package/lib/cjs/ArcGisFeature/ArcGisFeatureJSON.d.ts +0 -15
  108. package/lib/cjs/ArcGisFeature/ArcGisFeatureJSON.d.ts.map +0 -1
  109. package/lib/cjs/ArcGisFeature/ArcGisFeatureJSON.js.map +0 -1
  110. package/lib/cjs/ArcGisFeature/ArcGisFeaturePBF.d.ts.map +0 -1
  111. package/lib/cjs/ArcGisFeature/ArcGisFeaturePBF.js.map +0 -1
  112. package/lib/cjs/ArcGisFeature/ArcGisFeatureRenderer.d.ts +0 -33
  113. package/lib/cjs/ArcGisFeature/ArcGisFeatureRenderer.d.ts.map +0 -1
  114. package/lib/cjs/ArcGisFeature/ArcGisFeatureRenderer.js +0 -143
  115. package/lib/cjs/ArcGisFeature/ArcGisFeatureRenderer.js.map +0 -1
  116. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureFeatureFormats.test.d.ts +0 -2
  117. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureFeatureFormats.test.d.ts.map +0 -1
  118. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureFeatureFormats.test.js +0 -35
  119. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureFeatureFormats.test.js.map +0 -1
  120. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureJSON.test.d.ts +0 -2
  121. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureJSON.test.d.ts.map +0 -1
  122. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureJSON.test.js +0 -162
  123. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureJSON.test.js.map +0 -1
  124. package/lib/cjs/test/ArcGisFeature/ArcGisFeaturePBF.test.d.ts +0 -2
  125. package/lib/cjs/test/ArcGisFeature/ArcGisFeaturePBF.test.d.ts.map +0 -1
  126. package/lib/cjs/test/ArcGisFeature/ArcGisFeaturePBF.test.js +0 -168
  127. package/lib/cjs/test/ArcGisFeature/ArcGisFeaturePBF.test.js.map +0 -1
  128. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureProvider.test.d.ts +0 -2
  129. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureProvider.test.d.ts.map +0 -1
  130. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureProvider.test.js +0 -680
  131. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureProvider.test.js.map +0 -1
  132. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureQuery.test.d.ts +0 -2
  133. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureQuery.test.d.ts.map +0 -1
  134. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureQuery.test.js +0 -104
  135. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureQuery.test.js.map +0 -1
  136. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureRenderer.test.d.ts +0 -2
  137. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureRenderer.test.d.ts.map +0 -1
  138. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureRenderer.test.js +0 -215
  139. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureRenderer.test.js.map +0 -1
  140. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureResponse.test.d.ts +0 -2
  141. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureResponse.test.d.ts.map +0 -1
  142. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureResponse.test.js +0 -95
  143. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureResponse.test.js.map +0 -1
  144. package/lib/cjs/test/ArcGisFeature/ArcGisSymbologyRenderer.test.d.ts +0 -2
  145. package/lib/cjs/test/ArcGisFeature/ArcGisSymbologyRenderer.test.d.ts.map +0 -1
  146. package/lib/cjs/test/ArcGisFeature/ArcGisSymbologyRenderer.test.js +0 -60
  147. package/lib/cjs/test/ArcGisFeature/ArcGisSymbologyRenderer.test.js.map +0 -1
  148. package/lib/cjs/test/ArcGisFeature/Mocks.d.ts +0 -7
  149. package/lib/cjs/test/ArcGisFeature/Mocks.d.ts.map +0 -1
  150. package/lib/cjs/test/ArcGisFeature/Mocks.js +0 -19
  151. package/lib/cjs/test/ArcGisFeature/Mocks.js.map +0 -1
  152. package/lib/cjs/test/ArcGisFeature/NewYorkDataset.d.ts +0 -56
  153. package/lib/cjs/test/ArcGisFeature/NewYorkDataset.d.ts.map +0 -1
  154. package/lib/cjs/test/ArcGisFeature/NewYorkDataset.js +0 -420
  155. package/lib/cjs/test/ArcGisFeature/NewYorkDataset.js.map +0 -1
  156. package/lib/cjs/test/ArcGisFeature/PhillyLandmarksDataset.d.ts +0 -1043
  157. package/lib/cjs/test/ArcGisFeature/PhillyLandmarksDataset.d.ts.map +0 -1
  158. package/lib/cjs/test/ArcGisFeature/PhillyLandmarksDataset.js +0 -427
  159. package/lib/cjs/test/ArcGisFeature/PhillyLandmarksDataset.js.map +0 -1
  160. package/lib/cjs/test/coverage/.nyc_output/abd3af4c-9bb0-47fb-a670-3c609e62305c.json +0 -1
  161. package/lib/cjs/test/coverage/.nyc_output/b444582a-0db5-4b2b-949d-8c71645890c8.json +0 -1
  162. package/lib/cjs/test/coverage/.nyc_output/processinfo/abd3af4c-9bb0-47fb-a670-3c609e62305c.json +0 -1
  163. package/lib/cjs/test/coverage/.nyc_output/processinfo/b444582a-0db5-4b2b-949d-8c71645890c8.json +0 -1
  164. package/lib/cjs/test/coverage/.nyc_output/processinfo/index.json +0 -1
  165. package/lib/cjs/test/coverage/cobertura-coverage.xml +0 -1169
  166. package/lib/cjs/test/coverage/lcov-report/base.css +0 -224
  167. package/lib/cjs/test/coverage/lcov-report/block-navigation.js +0 -87
  168. package/lib/cjs/test/coverage/lcov-report/favicon.png +0 -0
  169. package/lib/cjs/test/coverage/lcov-report/index.html +0 -131
  170. package/lib/cjs/test/coverage/lcov-report/prettify.css +0 -1
  171. package/lib/cjs/test/coverage/lcov-report/prettify.js +0 -2
  172. package/lib/cjs/test/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  173. package/lib/cjs/test/coverage/lcov-report/sorter.js +0 -196
  174. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureFormat.ts.html +0 -133
  175. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureJSON.ts.html +0 -550
  176. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeaturePBF.ts.html +0 -730
  177. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureProvider.ts.html +0 -1546
  178. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureQuery.ts.html +0 -763
  179. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureReader.ts.html +0 -223
  180. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureRenderer.ts.html +0 -598
  181. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureResponse.ts.html +0 -301
  182. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisSymbologyRenderer.ts.html +0 -832
  183. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/index.html +0 -236
  184. package/lib/cjs/test/coverage/lcov-report/src/index.html +0 -131
  185. package/lib/cjs/test/coverage/lcov-report/src/map-layers-formats.ts.html +0 -130
  186. package/lib/cjs/test/coverage/lcov-report/src/mapLayersFormats.ts.html +0 -163
  187. package/lib/cjs/test/coverage/lcov.info +0 -1358
  188. package/lib/cjs/tsconfig.tsbuildinfo +0 -1
  189. package/lib/esm/ArcGisFeature/ArcGisFeatureJSON.d.ts +0 -15
  190. package/lib/esm/ArcGisFeature/ArcGisFeatureJSON.d.ts.map +0 -1
  191. package/lib/esm/ArcGisFeature/ArcGisFeatureJSON.js +0 -129
  192. package/lib/esm/ArcGisFeature/ArcGisFeatureJSON.js.map +0 -1
  193. package/lib/esm/ArcGisFeature/ArcGisFeaturePBF.d.ts.map +0 -1
  194. package/lib/esm/ArcGisFeature/ArcGisFeaturePBF.js.map +0 -1
  195. package/lib/esm/ArcGisFeature/ArcGisFeatureRenderer.d.ts +0 -33
  196. package/lib/esm/ArcGisFeature/ArcGisFeatureRenderer.d.ts.map +0 -1
  197. package/lib/esm/ArcGisFeature/ArcGisFeatureRenderer.js +0 -139
  198. package/lib/esm/ArcGisFeature/ArcGisFeatureRenderer.js.map +0 -1
  199. package/lib/esm/test/ArcGisFeature/ArcGisFeatureFeatureFormats.test.d.ts +0 -2
  200. package/lib/esm/test/ArcGisFeature/ArcGisFeatureFeatureFormats.test.d.ts.map +0 -1
  201. package/lib/esm/test/ArcGisFeature/ArcGisFeatureFeatureFormats.test.js +0 -33
  202. package/lib/esm/test/ArcGisFeature/ArcGisFeatureFeatureFormats.test.js.map +0 -1
  203. package/lib/esm/test/ArcGisFeature/ArcGisFeatureJSON.test.d.ts +0 -2
  204. package/lib/esm/test/ArcGisFeature/ArcGisFeatureJSON.test.d.ts.map +0 -1
  205. package/lib/esm/test/ArcGisFeature/ArcGisFeatureJSON.test.js +0 -160
  206. package/lib/esm/test/ArcGisFeature/ArcGisFeatureJSON.test.js.map +0 -1
  207. package/lib/esm/test/ArcGisFeature/ArcGisFeaturePBF.test.d.ts +0 -2
  208. package/lib/esm/test/ArcGisFeature/ArcGisFeaturePBF.test.d.ts.map +0 -1
  209. package/lib/esm/test/ArcGisFeature/ArcGisFeaturePBF.test.js +0 -166
  210. package/lib/esm/test/ArcGisFeature/ArcGisFeaturePBF.test.js.map +0 -1
  211. package/lib/esm/test/ArcGisFeature/ArcGisFeatureProvider.test.d.ts +0 -2
  212. package/lib/esm/test/ArcGisFeature/ArcGisFeatureProvider.test.d.ts.map +0 -1
  213. package/lib/esm/test/ArcGisFeature/ArcGisFeatureProvider.test.js +0 -678
  214. package/lib/esm/test/ArcGisFeature/ArcGisFeatureProvider.test.js.map +0 -1
  215. package/lib/esm/test/ArcGisFeature/ArcGisFeatureQuery.test.d.ts +0 -2
  216. package/lib/esm/test/ArcGisFeature/ArcGisFeatureQuery.test.d.ts.map +0 -1
  217. package/lib/esm/test/ArcGisFeature/ArcGisFeatureQuery.test.js +0 -102
  218. package/lib/esm/test/ArcGisFeature/ArcGisFeatureQuery.test.js.map +0 -1
  219. package/lib/esm/test/ArcGisFeature/ArcGisFeatureRenderer.test.d.ts +0 -2
  220. package/lib/esm/test/ArcGisFeature/ArcGisFeatureRenderer.test.d.ts.map +0 -1
  221. package/lib/esm/test/ArcGisFeature/ArcGisFeatureRenderer.test.js +0 -213
  222. package/lib/esm/test/ArcGisFeature/ArcGisFeatureRenderer.test.js.map +0 -1
  223. package/lib/esm/test/ArcGisFeature/ArcGisFeatureResponse.test.d.ts +0 -2
  224. package/lib/esm/test/ArcGisFeature/ArcGisFeatureResponse.test.d.ts.map +0 -1
  225. package/lib/esm/test/ArcGisFeature/ArcGisFeatureResponse.test.js +0 -93
  226. package/lib/esm/test/ArcGisFeature/ArcGisFeatureResponse.test.js.map +0 -1
  227. package/lib/esm/test/ArcGisFeature/ArcGisSymbologyRenderer.test.d.ts +0 -2
  228. package/lib/esm/test/ArcGisFeature/ArcGisSymbologyRenderer.test.d.ts.map +0 -1
  229. package/lib/esm/test/ArcGisFeature/ArcGisSymbologyRenderer.test.js +0 -58
  230. package/lib/esm/test/ArcGisFeature/ArcGisSymbologyRenderer.test.js.map +0 -1
  231. package/lib/esm/test/ArcGisFeature/Mocks.d.ts +0 -7
  232. package/lib/esm/test/ArcGisFeature/Mocks.d.ts.map +0 -1
  233. package/lib/esm/test/ArcGisFeature/Mocks.js +0 -16
  234. package/lib/esm/test/ArcGisFeature/Mocks.js.map +0 -1
  235. package/lib/esm/test/ArcGisFeature/NewYorkDataset.d.ts +0 -56
  236. package/lib/esm/test/ArcGisFeature/NewYorkDataset.d.ts.map +0 -1
  237. package/lib/esm/test/ArcGisFeature/NewYorkDataset.js +0 -417
  238. package/lib/esm/test/ArcGisFeature/NewYorkDataset.js.map +0 -1
  239. package/lib/esm/test/ArcGisFeature/PhillyLandmarksDataset.d.ts +0 -1043
  240. package/lib/esm/test/ArcGisFeature/PhillyLandmarksDataset.d.ts.map +0 -1
  241. package/lib/esm/test/ArcGisFeature/PhillyLandmarksDataset.js +0 -424
  242. package/lib/esm/test/ArcGisFeature/PhillyLandmarksDataset.js.map +0 -1
  243. package/lib/esm/tsconfig.tsbuildinfo +0 -1
  244. package/lib/test/junit_results.xml +0 -159
  245. package/map-layers-formats.build.log +0 -30
  246. package/src/ArcGisFeature/ArcGisFeatureFormat.ts +0 -16
  247. package/src/ArcGisFeature/ArcGisFeatureJSON.ts +0 -155
  248. package/src/ArcGisFeature/ArcGisFeaturePBF.ts +0 -215
  249. package/src/ArcGisFeature/ArcGisFeatureProvider.ts +0 -487
  250. package/src/ArcGisFeature/ArcGisFeatureQuery.ts +0 -226
  251. package/src/ArcGisFeature/ArcGisFeatureReader.ts +0 -46
  252. package/src/ArcGisFeature/ArcGisFeatureRenderer.ts +0 -171
  253. package/src/ArcGisFeature/ArcGisFeatureResponse.ts +0 -72
  254. package/src/ArcGisFeature/ArcGisSymbologyRenderer.ts +0 -249
  255. package/src/ArcGisFeature/esriPBuffer.gen.ts +0 -2612
  256. package/src/map-layers-formats.ts +0 -15
  257. package/src/mapLayersFormats.ts +0 -26
  258. package/src/test/ArcGisFeature/ArcGisFeatureFeatureFormats.test.ts +0 -46
  259. package/src/test/ArcGisFeature/ArcGisFeatureJSON.test.ts +0 -202
  260. package/src/test/ArcGisFeature/ArcGisFeaturePBF.test.ts +0 -227
  261. package/src/test/ArcGisFeature/ArcGisFeatureProvider.test.ts +0 -805
  262. package/src/test/ArcGisFeature/ArcGisFeatureQuery.test.ts +0 -117
  263. package/src/test/ArcGisFeature/ArcGisFeatureRenderer.test.ts +0 -296
  264. package/src/test/ArcGisFeature/ArcGisFeatureResponse.test.ts +0 -109
  265. package/src/test/ArcGisFeature/ArcGisSymbologyRenderer.test.ts +0 -77
  266. package/src/test/ArcGisFeature/Mocks.ts +0 -19
  267. package/src/test/ArcGisFeature/NewYorkDataset.ts +0 -423
  268. package/src/test/ArcGisFeature/PhillyLandmarksDataset.ts +0 -455
  269. package/tsconfig.json +0 -20
@@ -0,0 +1,277 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ /* eslint-disable no-console */
6
+ import { Base64EncodedString, ColorDef } from "@itwin/core-common";
7
+ import { GraphicType, IModelApp, MapTileTreeReference, Marker, MarkerSet, TileGeometryCollector, TileUser } from "@itwin/core-frontend";
8
+ import { ConvexClipPlaneSet, GrowableXYZArray, Point2d, Point3d, PolyfaceQuery, Range3d, SweepLineStringToFacetsOptions, Vector3d } from "@itwin/core-geometry";
9
+ /** A TileGeometryCollector that restricts collection to tiles that overlap a line string.
10
+ /* @internal
11
+ */
12
+ class DrapeLineStringCollector extends TileGeometryCollector {
13
+ constructor(user, chordTolerance, range, transform, _points) {
14
+ super({ user, chordTolerance, range, transform });
15
+ this._points = _points;
16
+ }
17
+ collectTile(tile) {
18
+ let status = super.collectTile(tile);
19
+ if ("reject" !== status && !this.rangeOverlapsLineString(tile.range))
20
+ status = "reject";
21
+ return status;
22
+ }
23
+ rangeOverlapsLineString(range) {
24
+ let inside = false;
25
+ const clipper = ConvexClipPlaneSet.createRange3dPlanes(range, true, true, true, true, false, false);
26
+ if (this._options.transform)
27
+ clipper.transformInPlace(this._options.transform);
28
+ for (let i = 0; i < this._points.length - 1 && !inside; i++)
29
+ inside = clipper.announceClippedSegmentIntervals(0, 1, this._points.getPoint3dAtUncheckedPointIndex(i), this._points.getPoint3dAtUncheckedPointIndex(i + 1));
30
+ return inside;
31
+ }
32
+ }
33
+ /** @internal */
34
+ class TerrainDraper {
35
+ constructor(viewport, treeRef) {
36
+ this.viewport = viewport;
37
+ this.treeRef = treeRef;
38
+ this.tileUserId = TileUser.generateId();
39
+ IModelApp.tileAdmin.registerUser(this);
40
+ }
41
+ dispose() {
42
+ IModelApp.tileAdmin.forgetUser(this);
43
+ }
44
+ get iModel() { return this.viewport.iModel; }
45
+ onRequestStateChanged() {
46
+ this.viewport.invalidateDecorations();
47
+ }
48
+ discloseTileTrees(trees) {
49
+ trees.disclose(this.treeRef);
50
+ }
51
+ drapeLineString(outStrings, inPoints, tolerance, maxDistance = 1.0E5) {
52
+ const tree = this.treeRef.treeOwner.load();
53
+ if (!tree)
54
+ return "loading";
55
+ const range = Range3d.createNull();
56
+ range.extendArray(inPoints);
57
+ range.extendZOnly(-maxDistance); // Expand - but not so much that we get opposite side of globe.
58
+ range.extendZOnly(maxDistance);
59
+ const collector = new DrapeLineStringCollector(this, tolerance, range, tree.iModelTransform, inPoints);
60
+ this.treeRef.collectTileGeometry(collector);
61
+ collector.requestMissingTiles();
62
+ if (collector.isAllGeometryLoaded && collector.polyfaces.length > 0) {
63
+ for (const polyface of collector.polyfaces)
64
+ outStrings.push(...PolyfaceQuery.sweepLineStringToFacets(inPoints, polyface, SweepLineStringToFacetsOptions.create(Vector3d.unitZ(), undefined, true, true, false, false)));
65
+ return "complete";
66
+ }
67
+ return "loading";
68
+ }
69
+ }
70
+ /** @internal */
71
+ class PinMarker extends Marker {
72
+ constructor(worldLocation, size, image) {
73
+ super(worldLocation, size);
74
+ this.image = image;
75
+ this.imageOffset = new Point3d(0, Math.floor(size.y * .5));
76
+ }
77
+ }
78
+ /** @internal */
79
+ class PinMarkerCluster extends Marker {
80
+ /** Create a new cluster marker */
81
+ constructor(location, size, cluster, image) {
82
+ super(location, size);
83
+ this.title = IModelApp.localization.getLocalizedString("mapLayersFormats:Messages.MapFeatureInfoDecorator.clusterZoomIn", { nbInstances: cluster.markers.length });
84
+ this.imageOffset = new Point3d(0, size.y * 0.5);
85
+ this.label = cluster.markers.length.toLocaleString();
86
+ this.labelColor = "black";
87
+ this.labelFont = "bold 14px sans-serif";
88
+ if (image)
89
+ this.setImage(image);
90
+ }
91
+ /** Show the cluster as a white circle with an outline */
92
+ drawFunc(ctx) {
93
+ ctx.beginPath();
94
+ ctx.strokeStyle = "#372528";
95
+ ctx.fillStyle = "white";
96
+ ctx.lineWidth = 5;
97
+ ctx.arc(0, 0, this.size.x * 0.5, 0, Math.PI * 2);
98
+ ctx.fill();
99
+ ctx.stroke();
100
+ }
101
+ onMouseButton(_ev) { return true; } // Don't allow clicks to be sent to active tool...
102
+ }
103
+ /** @internal */
104
+ class PinMarkerSet extends MarkerSet {
105
+ getClusterMarker(cluster) {
106
+ // No image passed to the cluster, we prefer to have the circle only
107
+ return new PinMarkerCluster(cluster.getClusterLocation(), cluster.markers[0].size, cluster, undefined);
108
+ }
109
+ }
110
+ /** @internal */
111
+ export class MapFeatureInfoDecorator {
112
+ get highlightColor() { return this._highlightColor; }
113
+ set highlightColor(color) {
114
+ this.updateMarkerImage();
115
+ this._highlightColor = color;
116
+ }
117
+ get defaultMarkerIconSvgXml() { return `<svg class="indicator" viewBox="0 0 22 22" width="22" height="22" xmlns="http://www.w3.org/2000/svg"><path d="m11 0a7.44506 7.44506 0 0 0 -7.5 7.2875c0 1.65 1.132 4.2625 3.25477 8.1125 1.55652 2.75 4.24523 6.6 4.24523 6.6s2.68865-3.9875 4.24528-6.7375c2.12272-3.85 3.25472-6.4625 3.25472-8.1125a7.4215 7.4215 0 0 0 -7.5-7.15z" fill="black"/><path d="m11 1.01715a6.46476 6.46476 0 0 0 -6.48285 6.27033c0 1.72619 1.67181 4.97973 3.12836 7.62139.97564 1.7237 2.42828 3.92176 3.34118 5.27161.91413-1.39148 2.385-3.673 3.37336-5.41907 1.451-2.63171 3.1228-5.88525 3.1228-7.61139a6.39982 6.39982 0 0 0 -6.48285-6.13287zm.00183 8.98285a3 3 0 1 1 3-3 3 3 0 0 1 -3 3z" fill="${this.highlightColor.toRgbString()}"/></svg>`; }
118
+ constructor() {
119
+ this.useCachedDecorations = true;
120
+ this.disableTerrainDraper = true;
121
+ this.markerSize = new Point2d(32, 32);
122
+ this.lineWidth = 3;
123
+ this._highlightColor = ColorDef.from(0, 255, 255, 127);
124
+ this._drapePoints = new GrowableXYZArray();
125
+ this._scratchPoints = new GrowableXYZArray();
126
+ this._drapePointsStates = [];
127
+ this._allGeomDraped = false;
128
+ this._markerSet = new PinMarkerSet();
129
+ this._graphicType = GraphicType.WorldOverlay;
130
+ this.setState = (state) => {
131
+ this._drapedStrings = undefined;
132
+ this._allGeomDraped = false;
133
+ this._state = state;
134
+ IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);
135
+ this._drapePoints.clear();
136
+ this._drapePointsStates = [];
137
+ if (!this.disableTerrainDraper && this._state.mapInfo?.layerInfos && state.hit.viewport.displayStyle.displayTerrain) {
138
+ if (state.hit?.modelId) {
139
+ const drapeTreeRef = this.getGeometryTreeRef(state.hit.viewport);
140
+ if (drapeTreeRef) {
141
+ this._draper = new TerrainDraper(state.hit.viewport, drapeTreeRef);
142
+ return;
143
+ }
144
+ }
145
+ }
146
+ if (this._draper) {
147
+ // Dispose draper every time?
148
+ this._draper.dispose();
149
+ this._draper = undefined;
150
+ }
151
+ };
152
+ this._markerImage = new Image();
153
+ this.updateMarkerImage();
154
+ }
155
+ updateMarkerImage() {
156
+ const base64 = Base64EncodedString.encode(this.defaultMarkerIconSvgXml);
157
+ this._markerImage.src = `data:image/svg+xml;base64,${base64}`;
158
+ }
159
+ _computeChordTolerance(viewport, applyAspectRatioSkew, computeRange) {
160
+ let pixelSize = 1;
161
+ // Compute the horizontal distance in meters between two adjacent pixels at the center of the geometry.
162
+ pixelSize = viewport.getPixelSizeAtPoint(computeRange().center);
163
+ pixelSize = viewport.target.adjustPixelSizeForLOD(pixelSize);
164
+ // Aspect ratio skew > 1.0 stretches the view in Y. In that case use the smaller vertical pixel distance for our stroke tolerance.
165
+ const skew = applyAspectRatioSkew ? viewport.view.getAspectRatioSkew() : 0;
166
+ if (skew > 1)
167
+ pixelSize /= skew;
168
+ return pixelSize * 0.25;
169
+ }
170
+ getGeometryTreeRef(vp) {
171
+ let treeRef;
172
+ if (vp.backgroundMapSettings.applyTerrain) {
173
+ vp.forEachMapTreeRef((ref) => {
174
+ if (!treeRef && ref instanceof MapTileTreeReference) {
175
+ treeRef = ref.createGeometryTreeReference();
176
+ }
177
+ });
178
+ }
179
+ return treeRef;
180
+ }
181
+ renderGraphics(context) {
182
+ this._markerSet.markers.clear();
183
+ if (this._state?.mapInfo?.layerInfos === undefined) {
184
+ return undefined;
185
+ }
186
+ const builder = context.createGraphicBuilder(this._graphicType);
187
+ if (this._draper) {
188
+ if (this._drapePoints.length === 0 && this._state.mapInfo.layerInfos) {
189
+ for (const layerInfo of this._state.mapInfo.layerInfos) {
190
+ if (layerInfo.subLayerInfos) {
191
+ for (const subLayerInfo of layerInfo.subLayerInfos) {
192
+ for (const feature of subLayerInfo.features) {
193
+ if (feature.geometries) {
194
+ for (const geom of feature.geometries) {
195
+ if (geom.graphic.type === "linestring") {
196
+ this._drapePointsStates.push({ count: geom.graphic.points.length, collectorState: "loading" });
197
+ this._drapePoints.pushAll(geom.graphic.points);
198
+ }
199
+ }
200
+ }
201
+ }
202
+ }
203
+ }
204
+ }
205
+ }
206
+ if (!this._allGeomDraped) {
207
+ let hasMissingLineStrings = false;
208
+ let drapePointsOffset = 0;
209
+ for (const state of this._drapePointsStates) {
210
+ if (state.collectorState === "loading") {
211
+ this._scratchPoints.clear();
212
+ this._scratchPoints.resize(state.count);
213
+ let dstIdx = 0;
214
+ for (let srcIdx = drapePointsOffset; srcIdx < drapePointsOffset + state.count; srcIdx++) {
215
+ this._scratchPoints.transferFromGrowableXYZArray(dstIdx++, this._drapePoints, srcIdx);
216
+ }
217
+ const drapeRange = Range3d.createNull();
218
+ drapeRange.extendArray(this._scratchPoints);
219
+ const drapedStrings = [];
220
+ const tolerance = this._computeChordTolerance(context.viewport, true, () => drapeRange) * 10; // 10 pixels
221
+ if ("loading" === this._draper.drapeLineString(drapedStrings, this._scratchPoints, tolerance)) {
222
+ hasMissingLineStrings = true;
223
+ }
224
+ else {
225
+ this.addDrapedStrings(drapedStrings);
226
+ state.collectorState = "complete";
227
+ }
228
+ }
229
+ drapePointsOffset += state.count;
230
+ }
231
+ this._allGeomDraped = !hasMissingLineStrings;
232
+ }
233
+ if (this._drapedStrings) {
234
+ builder.setSymbology(this.highlightColor, this.highlightColor, this.lineWidth);
235
+ this._drapedStrings.forEach((line) => builder.addLineString(line.points));
236
+ }
237
+ }
238
+ else {
239
+ builder.setSymbology(this.highlightColor, this.highlightColor, this.lineWidth);
240
+ for (const layerInfo of this._state.mapInfo.layerInfos) {
241
+ if (layerInfo.subLayerInfos && !(layerInfo.subLayerInfos instanceof HTMLElement)) {
242
+ for (const subLayerInfo of layerInfo.subLayerInfos) {
243
+ for (const feature of subLayerInfo.features) {
244
+ if (feature.geometries) {
245
+ for (const geom of feature.geometries) {
246
+ if (geom.graphic.type === "pointstring") {
247
+ for (const point of geom.graphic.points)
248
+ this._markerSet.markers.add(new PinMarker(point, this.markerSize, this._markerImage));
249
+ }
250
+ else {
251
+ builder.addPrimitive(geom.graphic);
252
+ }
253
+ }
254
+ }
255
+ }
256
+ }
257
+ }
258
+ }
259
+ }
260
+ return builder.finish();
261
+ }
262
+ addDrapedStrings(drapedStrings) {
263
+ if (!this._drapedStrings) {
264
+ this._drapedStrings = [];
265
+ }
266
+ for (const ds of drapedStrings)
267
+ this._drapedStrings.push(ds);
268
+ }
269
+ decorate(context) {
270
+ const graphics = this.renderGraphics(context);
271
+ if (graphics)
272
+ context.addDecoration(this._graphicType, graphics);
273
+ this._markerSet.addDecoration(context);
274
+ return;
275
+ }
276
+ }
277
+ //# sourceMappingURL=MapFeatureInfoDecorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapFeatureInfoDecorator.js","sourceRoot":"","sources":["../../../src/Tools/MapFeatureInfoDecorator.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,+BAA+B;AAC/B,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAEsB,WAAW,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAe,SAAS,EACjG,qBAAqB,EAAqB,QAAQ,EAAY,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAkB,gBAAgB,EAAgB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,8BAA8B,EAAa,QAAQ,EAAiB,MAAM,sBAAsB,CAAC;AAGxN;;EAEE;AACF,MAAM,wBAAyB,SAAQ,qBAAqB;IAC1D,YAAY,IAAc,EAAE,cAAsB,EAAE,KAAc,EAAE,SAAoB,EAAU,OAAyB;QACzH,KAAK,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAD8C,YAAO,GAAP,OAAO,CAAkB;IAE3H,CAAC;IAEe,WAAW,CAAC,IAAU;QACpC,IAAI,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,QAAQ,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;YAClE,MAAM,GAAG,QAAQ,CAAC;QAEpB,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,uBAAuB,CAAC,KAAc;QAC5C,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,MAAM,OAAO,GAAG,kBAAkB,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACpG,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS;YACzB,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;YACzD,MAAM,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE/J,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED,gBAAgB;AAChB,MAAM,aAAa;IAGjB,YAAmC,QAAkB,EAAkB,OAAkC;QAAtE,aAAQ,GAAR,QAAQ,CAAU;QAAkB,YAAO,GAAP,OAAO,CAA2B;QACvG,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;QACxC,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAEM,OAAO;QACZ,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,IAAW,MAAM,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAE7C,qBAAqB;QAC1B,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC;IACxC,CAAC;IAEM,iBAAiB,CAAC,KAA2B;QAClD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAEM,eAAe,CAAC,UAA4B,EAAE,QAA0B,EAAE,SAAiB,EAAE,WAAW,GAAG,KAAK;QACrH,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,IAAI;YACP,OAAO,SAAS,CAAC;QAEnB,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QACnC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,KAAK,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,CAAC,CAAE,+DAA+D;QACjG,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAE/B,MAAM,SAAS,GAAG,IAAI,wBAAwB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QACvG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC5C,SAAS,CAAC,mBAAmB,EAAE,CAAC;QAEhC,IAAI,SAAS,CAAC,mBAAmB,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACnE,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,SAAS;gBACxC,UAAU,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,EACzE,8BAA8B,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YACnG,OAAO,UAAU,CAAC;SACnB;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAED,gBAAgB;AAChB,MAAM,SAAU,SAAQ,MAAM;IAC5B,YAAmB,aAAqB,EAAE,IAAW,EAAE,KAAkB;QACvE,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;CACF;AAED,gBAAgB;AAChB,MAAM,gBAAiB,SAAQ,MAAM;IACnC,kCAAkC;IAClC,YAAY,QAAgB,EAAE,IAAW,EAAE,OAA2B,EAAE,KAAqD;QAC3H,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEtB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,iEAAiE,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,EAAC,CAAC,CAAC;QAElK,IAAI,CAAC,WAAW,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QACrD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,sBAAsB,CAAC;QAExC,IAAI,KAAK;YACP,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,yDAAyD;IACzC,QAAQ,CAAC,GAA6B;QACpD,GAAG,CAAC,SAAS,EAAE,CAAC;QAChB,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC;QAC5B,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC;QACxB,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;QAClB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACjD,GAAG,CAAC,IAAI,EAAE,CAAC;QACX,GAAG,CAAC,MAAM,EAAE,CAAC;IACf,CAAC;IAEe,aAAa,CAAC,GAAkB,IAAa,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,kDAAkD;CAC/H;AAED,gBAAgB;AAChB,MAAM,YAAa,SAAQ,SAAoB;IACnC,gBAAgB,CAAC,OAA2B;QACpD,oEAAoE;QACpE,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACzG,CAAC;CACF;AAQD,gBAAgB;AAChB,MAAM,OAAO,uBAAuB;IAQlC,IAAW,cAAc,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,CAAA,CAAC;IAC3D,IAAW,cAAc,CAAC,KAAe;QACvC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAC/B,CAAC;IAED,IAAW,uBAAuB,KAAK,OAAO,6pBAA6pB,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;IAgB1vB;QA5BgB,yBAAoB,GAAG,IAAI,CAAC;QAC5B,yBAAoB,GAAG,IAAI,CAAC;QACrC,eAAU,GAAG,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACjC,cAAS,GAAI,CAAC,CAAC;QACd,oBAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAUlD,iBAAY,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACtC,mBAAc,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAExC,uBAAkB,GAAsB,EAAE,CAAC;QAE3C,mBAAc,GAAG,KAAK,CAAC;QAGvB,eAAU,GAAG,IAAI,YAAY,EAAE,CAAC;QAIvB,iBAAY,GAAG,WAAW,CAAC,YAAY,CAAC;QAyBlD,aAAQ,GAAG,CAAC,KAA6B,EAAE,EAAE;YAElD,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YAChC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAE5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,SAAS,CAAC,WAAW,CAAC,mCAAmC,CAAC,IAAI,CAAC,CAAC;YAEhE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;YAE7B,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,EAAE;gBAEnH,IAAI,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE;oBACtB,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACjE,IAAI,YAAY,EAAE;wBAChB,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;wBACnE,OAAO;qBACR;iBACF;aACF;YAED,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,6BAA6B;gBAC7B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACvB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;aAC1B;QACH,CAAC,CAAC;QAjDA,IAAI,CAAC,YAAY,GAAG,IAAI,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEO,iBAAiB;QACvB,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACxE,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,6BAA6B,MAAM,EAAE,CAAC;IAChE,CAAC;IAEO,sBAAsB,CAAC,QAAkB,EAAE,oBAA6B,EAAE,YAA2B;QAC3G,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,uGAAuG;QACvG,SAAS,GAAG,QAAQ,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC;QAChE,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAE7D,kIAAkI;QAClI,MAAM,IAAI,GAAG,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,IAAI,IAAI,GAAG,CAAC;YACV,SAAS,IAAI,IAAI,CAAC;QACpB,OAAO,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IA+BO,kBAAkB,CAAC,EAAY;QACrC,IAAI,OAA8C,CAAC;QACnD,IAAI,EAAE,CAAC,qBAAqB,CAAC,YAAY,EAAE;YACzC,EAAE,CAAC,iBAAiB,CAAC,CAAC,GAAsB,EAAE,EAAE;gBAC9C,IAAI,CAAC,OAAO,IAAI,GAAG,YAAY,oBAAoB,EAAE;oBACnD,OAAO,GAAG,GAAG,CAAC,2BAA2B,EAAE,CAAC;iBAC7C;YACH,CAAC,CAAC,CAAC;SACJ;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAES,cAAc,CAAC,OAAwB;QAC/C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAEhC,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,KAAK,SAAS,EAAE;YAClD,OAAO,SAAS,CAAC;SAClB;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEhE,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE;gBAEpE,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE;oBACtD,IAAI,SAAS,CAAC,aAAa,EAAE;wBAC3B,KAAK,MAAM,YAAY,IAAI,SAAS,CAAC,aAAa,EAAE;4BAClD,KAAK,MAAM,OAAO,IAAI,YAAY,CAAC,QAAQ,EAAE;gCAC3C,IAAI,OAAO,CAAC,UAAU,EAAE;oCACtB,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE;wCACrC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE;4CACtC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;4CAC/F,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;yCAChD;qCACF;iCACF;6BACF;yBACF;qBAEF;iBACF;aACF;YAED,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBAExB,IAAI,qBAAqB,GAAG,KAAK,CAAC;gBAClC,IAAI,iBAAiB,GAAG,CAAC,CAAC;gBAC1B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,kBAAkB,EAAE;oBAE3C,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,EAAE;wBACtC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;wBAC5B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBAExC,IAAI,MAAM,GAAG,CAAC,CAAC;wBACf,KAAK,IAAI,MAAM,GAAG,iBAAiB,EAAE,MAAM,GAAG,iBAAiB,GAAG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;4BACvF,IAAI,CAAC,cAAc,CAAC,4BAA4B,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;yBACvF;wBAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;wBACxC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;wBAC5C,MAAM,aAAa,GAAmB,EAAE,CAAC;wBACzC,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAE,YAAY;wBAC3G,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,EAAE;4BAC7F,qBAAqB,GAAG,IAAI,CAAC;yBAC9B;6BAAM;4BACL,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;4BACrC,KAAK,CAAC,cAAc,GAAG,UAAU,CAAC;yBACnC;qBACF;oBACD,iBAAiB,IAAI,KAAK,CAAC,KAAK,CAAC;iBAClC;gBACD,IAAI,CAAC,cAAc,GAAG,CAAC,qBAAqB,CAAC;aAC9C;YAED,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC/E,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;aAC3E;SAEF;aAAM;YACL,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/E,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE;gBACtD,IAAI,SAAS,CAAC,aAAa,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,YAAY,WAAW,CAAC,EAAE;oBAChF,KAAK,MAAM,YAAY,IAAI,SAAS,CAAC,aAAa,EAAE;wBAClD,KAAK,MAAM,OAAO,IAAI,YAAY,CAAC,QAAQ,EAAE;4BAC3C,IAAI,OAAO,CAAC,UAAU,EAAE;gCACtB,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE;oCACrC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE;wCACvC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;4CACrC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;qCACzF;yCAAM;wCACL,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;qCACpC;iCAEF;6BACF;yBACF;qBACF;iBAEF;aAEF;SACF;QAED,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;IAC1B,CAAC;IAEM,gBAAgB,CAAC,aAA6B;QACnD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;SAC1B;QACD,KAAK,MAAM,EAAE,IAAI,aAAa;YAC5B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAEM,QAAQ,CAAC,OAAwB;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,QAAQ;YACV,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAErD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;CAEF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable no-console */\r\nimport { Base64EncodedString, ColorDef } from \"@itwin/core-common\";\r\nimport {\r\n BeButtonEvent, Cluster, CollectTileStatus, DecorateContext, Decorator, DisclosedTileTreeSet,\r\n GeometryTileTreeReference, GraphicType, IModelApp, MapTileTreeReference, Marker, MarkerImage, MarkerSet,\r\n Tile, TileGeometryCollector, TileTreeReference, TileUser, Viewport } from \"@itwin/core-frontend\";\r\nimport { ConvexClipPlaneSet, CurvePrimitive, GrowableXYZArray, LineString3d, Point2d, Point3d, PolyfaceQuery, Range3d, SweepLineStringToFacetsOptions, Transform, Vector3d, XAndY, XYAndZ } from \"@itwin/core-geometry\";\r\nimport { MapFeatureInfoToolData } from \"./MapFeatureInfoTool\";\r\n\r\n/** A TileGeometryCollector that restricts collection to tiles that overlap a line string.\r\n/* @internal\r\n*/\r\nclass DrapeLineStringCollector extends TileGeometryCollector {\r\n constructor(user: TileUser, chordTolerance: number, range: Range3d, transform: Transform, private _points: GrowableXYZArray) {\r\n super({ user, chordTolerance, range, transform });\r\n }\r\n\r\n public override collectTile(tile: Tile): CollectTileStatus {\r\n let status = super.collectTile(tile);\r\n if (\"reject\" !== status && !this.rangeOverlapsLineString(tile.range))\r\n status = \"reject\";\r\n\r\n return status;\r\n }\r\n\r\n private rangeOverlapsLineString(range: Range3d) {\r\n let inside = false;\r\n const clipper = ConvexClipPlaneSet.createRange3dPlanes(range, true, true, true, true, false, false);\r\n if (this._options.transform)\r\n clipper.transformInPlace(this._options.transform);\r\n\r\n for (let i = 0; i < this._points.length - 1 && !inside; i++)\r\n inside = clipper.announceClippedSegmentIntervals(0, 1, this._points.getPoint3dAtUncheckedPointIndex(i), this._points.getPoint3dAtUncheckedPointIndex(i + 1));\r\n\r\n return inside;\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass TerrainDraper implements TileUser {\r\n public readonly tileUserId: number;\r\n\r\n public constructor(public readonly viewport: Viewport, public readonly treeRef: GeometryTileTreeReference) {\r\n this.tileUserId = TileUser.generateId();\r\n IModelApp.tileAdmin.registerUser(this);\r\n }\r\n\r\n public dispose(): void {\r\n IModelApp.tileAdmin.forgetUser(this);\r\n }\r\n\r\n public get iModel() { return this.viewport.iModel; }\r\n\r\n public onRequestStateChanged() {\r\n this.viewport.invalidateDecorations();\r\n }\r\n\r\n public discloseTileTrees(trees: DisclosedTileTreeSet) {\r\n trees.disclose(this.treeRef);\r\n }\r\n\r\n public drapeLineString(outStrings: CurvePrimitive[], inPoints: GrowableXYZArray, tolerance: number, maxDistance = 1.0E5): \"loading\" | \"complete\" {\r\n const tree = this.treeRef.treeOwner.load();\r\n if (!tree)\r\n return \"loading\";\r\n\r\n const range = Range3d.createNull();\r\n range.extendArray(inPoints);\r\n range.extendZOnly(-maxDistance); // Expand - but not so much that we get opposite side of globe.\r\n range.extendZOnly(maxDistance);\r\n\r\n const collector = new DrapeLineStringCollector(this, tolerance, range, tree.iModelTransform, inPoints);\r\n this.treeRef.collectTileGeometry(collector);\r\n collector.requestMissingTiles();\r\n\r\n if (collector.isAllGeometryLoaded && collector.polyfaces.length > 0) {\r\n for (const polyface of collector.polyfaces)\r\n outStrings.push(...PolyfaceQuery.sweepLineStringToFacets(inPoints, polyface,\r\n SweepLineStringToFacetsOptions.create(Vector3d.unitZ(), undefined, true, true, false, false)));\r\n return \"complete\";\r\n }\r\n\r\n return \"loading\";\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass PinMarker extends Marker {\r\n public constructor(worldLocation: XYAndZ, size: XAndY, image: MarkerImage) {\r\n super(worldLocation, size);\r\n this.image = image;\r\n this.imageOffset = new Point3d(0, Math.floor(size.y * .5));\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass PinMarkerCluster extends Marker {\r\n /** Create a new cluster marker */\r\n constructor(location: XYAndZ, size: XAndY, cluster: Cluster<PinMarker>, image: MarkerImage | Promise<MarkerImage> | undefined) {\r\n super(location, size);\r\n\r\n this.title = IModelApp.localization.getLocalizedString(\"mapLayersFormats:Messages.MapFeatureInfoDecorator.clusterZoomIn\", { nbInstances: cluster.markers.length});\r\n\r\n this.imageOffset = new Point3d(0, size.y * 0.5);\r\n this.label = cluster.markers.length.toLocaleString();\r\n this.labelColor = \"black\";\r\n this.labelFont = \"bold 14px sans-serif\";\r\n\r\n if (image)\r\n this.setImage(image);\r\n }\r\n\r\n /** Show the cluster as a white circle with an outline */\r\n public override drawFunc(ctx: CanvasRenderingContext2D): void {\r\n ctx.beginPath();\r\n ctx.strokeStyle = \"#372528\";\r\n ctx.fillStyle = \"white\";\r\n ctx.lineWidth = 5;\r\n ctx.arc(0, 0, this.size.x * 0.5, 0, Math.PI * 2);\r\n ctx.fill();\r\n ctx.stroke();\r\n }\r\n\r\n public override onMouseButton(_ev: BeButtonEvent): boolean { return true; } // Don't allow clicks to be sent to active tool...\r\n}\r\n\r\n/** @internal */\r\nclass PinMarkerSet extends MarkerSet<PinMarker> {\r\n protected getClusterMarker(cluster: Cluster<PinMarker>): Marker {\r\n // No image passed to the cluster, we prefer to have the circle only\r\n return new PinMarkerCluster(cluster.getClusterLocation(), cluster.markers[0].size, cluster, undefined);\r\n }\r\n}\r\n\r\n/** @internal */\r\ninterface DrapePointState {\r\n count: number;\r\n collectorState: string;\r\n}\r\n\r\n/** @internal */\r\nexport class MapFeatureInfoDecorator implements Decorator {\r\n\r\n public readonly useCachedDecorations = true;\r\n public readonly disableTerrainDraper = true;\r\n public markerSize = new Point2d(32, 32);\r\n public lineWidth = 3;\r\n private _highlightColor = ColorDef.from(0, 255, 255, 127);\r\n\r\n public get highlightColor() { return this._highlightColor;}\r\n public set highlightColor(color: ColorDef) {\r\n this.updateMarkerImage();\r\n this._highlightColor = color;\r\n }\r\n\r\n public get defaultMarkerIconSvgXml() { return `<svg class=\"indicator\" viewBox=\"0 0 22 22\" width=\"22\" height=\"22\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m11 0a7.44506 7.44506 0 0 0 -7.5 7.2875c0 1.65 1.132 4.2625 3.25477 8.1125 1.55652 2.75 4.24523 6.6 4.24523 6.6s2.68865-3.9875 4.24528-6.7375c2.12272-3.85 3.25472-6.4625 3.25472-8.1125a7.4215 7.4215 0 0 0 -7.5-7.15z\" fill=\"black\"/><path d=\"m11 1.01715a6.46476 6.46476 0 0 0 -6.48285 6.27033c0 1.72619 1.67181 4.97973 3.12836 7.62139.97564 1.7237 2.42828 3.92176 3.34118 5.27161.91413-1.39148 2.385-3.673 3.37336-5.41907 1.451-2.63171 3.1228-5.88525 3.1228-7.61139a6.39982 6.39982 0 0 0 -6.48285-6.13287zm.00183 8.98285a3 3 0 1 1 3-3 3 3 0 0 1 -3 3z\" fill=\"${this.highlightColor.toRgbString()}\"/></svg>`; }\r\n\r\n private _drapePoints = new GrowableXYZArray();\r\n private _scratchPoints = new GrowableXYZArray();\r\n\r\n private _drapePointsStates: DrapePointState[] = [];\r\n private _drapedStrings?: LineString3d[];\r\n private _allGeomDraped = false;\r\n private _draper?: TerrainDraper;\r\n private _markerImage: HTMLImageElement;\r\n private _markerSet = new PinMarkerSet();\r\n\r\n private _state: MapFeatureInfoToolData | undefined;\r\n\r\n private readonly _graphicType = GraphicType.WorldOverlay;\r\n\r\n public constructor() {\r\n this._markerImage = new Image();\r\n this.updateMarkerImage();\r\n }\r\n\r\n private updateMarkerImage() {\r\n const base64 = Base64EncodedString.encode(this.defaultMarkerIconSvgXml);\r\n this._markerImage.src = `data:image/svg+xml;base64,${base64}`;\r\n }\r\n\r\n private _computeChordTolerance(viewport: Viewport, applyAspectRatioSkew: boolean, computeRange: () => Range3d) {\r\n let pixelSize = 1;\r\n // Compute the horizontal distance in meters between two adjacent pixels at the center of the geometry.\r\n pixelSize = viewport.getPixelSizeAtPoint(computeRange().center);\r\n pixelSize = viewport.target.adjustPixelSizeForLOD(pixelSize);\r\n\r\n // Aspect ratio skew > 1.0 stretches the view in Y. In that case use the smaller vertical pixel distance for our stroke tolerance.\r\n const skew = applyAspectRatioSkew ? viewport.view.getAspectRatioSkew() : 0;\r\n if (skew > 1)\r\n pixelSize /= skew;\r\n return pixelSize * 0.25;\r\n }\r\n\r\n public setState = (state: MapFeatureInfoToolData) => {\r\n\r\n this._drapedStrings = undefined;\r\n this._allGeomDraped = false;\r\n\r\n this._state = state;\r\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\r\n\r\n this._drapePoints.clear();\r\n this._drapePointsStates = [];\r\n\r\n if (!this.disableTerrainDraper && this._state.mapInfo?.layerInfos && state.hit.viewport.displayStyle.displayTerrain) {\r\n\r\n if (state.hit?.modelId) {\r\n const drapeTreeRef = this.getGeometryTreeRef(state.hit.viewport);\r\n if (drapeTreeRef) {\r\n this._draper = new TerrainDraper(state.hit.viewport, drapeTreeRef);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (this._draper) {\r\n // Dispose draper every time?\r\n this._draper.dispose();\r\n this._draper = undefined;\r\n }\r\n };\r\n\r\n private getGeometryTreeRef(vp: Viewport): GeometryTileTreeReference | undefined {\r\n let treeRef: GeometryTileTreeReference | undefined;\r\n if (vp.backgroundMapSettings.applyTerrain) {\r\n vp.forEachMapTreeRef((ref: TileTreeReference) => {\r\n if (!treeRef && ref instanceof MapTileTreeReference) {\r\n treeRef = ref.createGeometryTreeReference();\r\n }\r\n });\r\n }\r\n\r\n return treeRef;\r\n }\r\n\r\n protected renderGraphics(context: DecorateContext) {\r\n this._markerSet.markers.clear();\r\n\r\n if (this._state?.mapInfo?.layerInfos === undefined) {\r\n return undefined;\r\n }\r\n\r\n const builder = context.createGraphicBuilder(this._graphicType);\r\n\r\n if (this._draper) {\r\n if (this._drapePoints.length === 0 && this._state.mapInfo.layerInfos) {\r\n\r\n for (const layerInfo of this._state.mapInfo.layerInfos) {\r\n if (layerInfo.subLayerInfos) {\r\n for (const subLayerInfo of layerInfo.subLayerInfos) {\r\n for (const feature of subLayerInfo.features) {\r\n if (feature.geometries) {\r\n for (const geom of feature.geometries) {\r\n if (geom.graphic.type === \"linestring\") {\r\n this._drapePointsStates.push({ count: geom.graphic.points.length, collectorState: \"loading\" });\r\n this._drapePoints.pushAll(geom.graphic.points);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n if (!this._allGeomDraped) {\r\n\r\n let hasMissingLineStrings = false;\r\n let drapePointsOffset = 0;\r\n for (const state of this._drapePointsStates) {\r\n\r\n if (state.collectorState === \"loading\") {\r\n this._scratchPoints.clear();\r\n this._scratchPoints.resize(state.count);\r\n\r\n let dstIdx = 0;\r\n for (let srcIdx = drapePointsOffset; srcIdx < drapePointsOffset + state.count; srcIdx++) {\r\n this._scratchPoints.transferFromGrowableXYZArray(dstIdx++, this._drapePoints, srcIdx);\r\n }\r\n\r\n const drapeRange = Range3d.createNull();\r\n drapeRange.extendArray(this._scratchPoints);\r\n const drapedStrings: LineString3d[] = [];\r\n const tolerance = this._computeChordTolerance(context.viewport, true, () => drapeRange) * 10; // 10 pixels\r\n if (\"loading\" === this._draper.drapeLineString(drapedStrings, this._scratchPoints, tolerance)) {\r\n hasMissingLineStrings = true;\r\n } else {\r\n this.addDrapedStrings(drapedStrings);\r\n state.collectorState = \"complete\";\r\n }\r\n }\r\n drapePointsOffset += state.count;\r\n }\r\n this._allGeomDraped = !hasMissingLineStrings;\r\n }\r\n\r\n if (this._drapedStrings) {\r\n builder.setSymbology(this.highlightColor, this.highlightColor, this.lineWidth);\r\n this._drapedStrings.forEach((line) => builder.addLineString(line.points));\r\n }\r\n\r\n } else {\r\n builder.setSymbology(this.highlightColor, this.highlightColor, this.lineWidth);\r\n for (const layerInfo of this._state.mapInfo.layerInfos) {\r\n if (layerInfo.subLayerInfos && !(layerInfo.subLayerInfos instanceof HTMLElement)) {\r\n for (const subLayerInfo of layerInfo.subLayerInfos) {\r\n for (const feature of subLayerInfo.features) {\r\n if (feature.geometries) {\r\n for (const geom of feature.geometries) {\r\n if (geom.graphic.type === \"pointstring\") {\r\n for (const point of geom.graphic.points)\r\n this._markerSet.markers.add(new PinMarker(point, this.markerSize, this._markerImage));\r\n } else {\r\n builder.addPrimitive(geom.graphic);\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n }\r\n }\r\n\r\n return builder.finish();\r\n }\r\n\r\n public addDrapedStrings(drapedStrings: LineString3d[]) {\r\n if (!this._drapedStrings) {\r\n this._drapedStrings = [];\r\n }\r\n for (const ds of drapedStrings)\r\n this._drapedStrings.push(ds);\r\n }\r\n\r\n public decorate(context: DecorateContext): void {\r\n const graphics = this.renderGraphics(context);\r\n if (graphics)\r\n context.addDecoration(this._graphicType, graphics);\r\n\r\n this._markerSet.addDecoration(context);\r\n return;\r\n }\r\n\r\n}\r\n"]}
@@ -0,0 +1,38 @@
1
+ /** @packageDocumentation
2
+ * @module MapLayersFormats
3
+ */
4
+ import { BeButtonEvent, EventHandled, HitDetail, LocateFilterStatus, LocateResponse, MapFeatureInfo, PrimitiveTool } from "@itwin/core-frontend";
5
+ import { BeEvent } from "@itwin/core-bentley";
6
+ /** Data provided every time [[MapFeatureInfoTool]] retrieve feature information.
7
+ * @see [[MapFeatureInfoToolData]]
8
+ * @beta
9
+ */
10
+ export interface MapFeatureInfoToolData {
11
+ hit: HitDetail;
12
+ mapInfo?: MapFeatureInfo;
13
+ }
14
+ /** Tools that allow extracting feature information from map-layers.
15
+ * Simulate feature highlight by drawing overlay decorations. It also
16
+ * fire an event that provide further feature information meant to be displayed in a UI / Widget.
17
+ * @see [[MapFeatureInfoToolData]]
18
+ * @beta
19
+ */
20
+ export declare class MapFeatureInfoTool extends PrimitiveTool {
21
+ readonly onInfoReady: BeEvent<(data: MapFeatureInfoToolData) => void>;
22
+ static toolId: string;
23
+ static iconSpec: string;
24
+ private _decorator;
25
+ private _layerSettingsCache;
26
+ private readonly _detachListeners;
27
+ requireWriteableTarget(): boolean;
28
+ onPostInstall(): Promise<void>;
29
+ onCleanup(): Promise<void>;
30
+ /** @internal */
31
+ private getMapLayerInfoFromHit;
32
+ getToolTip(hit: HitDetail): Promise<HTMLElement | string>;
33
+ filterHit(hit: HitDetail, _out?: LocateResponse): Promise<LocateFilterStatus>;
34
+ onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled>;
35
+ onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled>;
36
+ onRestartTool(): Promise<void>;
37
+ }
38
+ //# sourceMappingURL=MapFeatureInfoTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapFeatureInfoTool.d.ts","sourceRoot":"","sources":["../../../src/Tools/MapFeatureInfoTool.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EACL,aAAa,EACb,YAAY,EACZ,SAAS,EAET,kBAAkB,EAClB,cAAc,EACd,cAAc,EAEd,aAAa,EACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAI9C;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,SAAS,CAAC;IACf,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,SAAgB,WAAW,iBAAsB,sBAAsB,KAAK,IAAI,EAAI;IAEpF,OAAuB,MAAM,SAAwB;IACrD,OAAuB,QAAQ,SAAc;IAE7C,OAAO,CAAC,UAAU,CAA0D;IAC5E,OAAO,CAAC,mBAAmB,CAAiD;IAC5E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAsB;IAEvC,sBAAsB,IAAI,OAAO;IAI3B,aAAa;IAuBb,SAAS;IAO/B,gBAAgB;IAChB,OAAO,CAAC,sBAAsB;IAaR,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC;IASzD,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAI7E,gBAAgB,CACpC,EAAE,EAAE,aAAa,GAChB,OAAO,CAAC,YAAY,CAAC;IA4BF,eAAe,CACnC,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,YAAY,CAAC;IAMF,aAAa;CAKpC"}
@@ -0,0 +1,110 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ /** @packageDocumentation
6
+ * @module MapLayersFormats
7
+ */
8
+ import { EventHandled, IModelApp, LocateFilterStatus, LocateResponse, PrimitiveTool, } from "@itwin/core-frontend";
9
+ import { BeEvent } from "@itwin/core-bentley";
10
+ import { ImageMapLayerSettings } from "@itwin/core-common";
11
+ import { MapFeatureInfoDecorator } from "./MapFeatureInfoDecorator";
12
+ /** Tools that allow extracting feature information from map-layers.
13
+ * Simulate feature highlight by drawing overlay decorations. It also
14
+ * fire an event that provide further feature information meant to be displayed in a UI / Widget.
15
+ * @see [[MapFeatureInfoToolData]]
16
+ * @beta
17
+ */
18
+ class MapFeatureInfoTool extends PrimitiveTool {
19
+ constructor() {
20
+ super(...arguments);
21
+ this.onInfoReady = new BeEvent();
22
+ this._decorator = new MapFeatureInfoDecorator();
23
+ this._layerSettingsCache = new Map();
24
+ this._detachListeners = [];
25
+ }
26
+ requireWriteableTarget() {
27
+ return false;
28
+ }
29
+ async onPostInstall() {
30
+ await super.onPostInstall();
31
+ this.initLocateElements();
32
+ IModelApp.locateManager.options.allowDecorations = true;
33
+ this._layerSettingsCache.clear();
34
+ // Listen of display style configuration changes, that we don't have to restart the tool to be up to date.
35
+ const vp = this.targetView;
36
+ if (vp) {
37
+ this._detachListeners.push(vp.onChangeView.addListener((_vp, _previous) => {
38
+ this._layerSettingsCache.clear();
39
+ }));
40
+ this._detachListeners.push(vp.displayStyle.settings.onMapImageryChanged.addListener((_newImagery) => {
41
+ this._layerSettingsCache.clear();
42
+ }));
43
+ }
44
+ IModelApp.viewManager.addDecorator(this._decorator);
45
+ }
46
+ async onCleanup() {
47
+ this._detachListeners.forEach((f) => f());
48
+ this._detachListeners.length = 0;
49
+ IModelApp.viewManager.dropDecorator(this._decorator);
50
+ }
51
+ /** @internal */
52
+ getMapLayerInfoFromHit(hit) {
53
+ let mapLayerFromHit = [];
54
+ const fromCache = this._layerSettingsCache.get(hit.sourceId);
55
+ if (fromCache) {
56
+ mapLayerFromHit = fromCache;
57
+ }
58
+ else if (this.targetView) {
59
+ mapLayerFromHit = this.targetView?.mapLayerFromHit(hit).filter(((info) => info.settings instanceof ImageMapLayerSettings && info.provider?.supportsMapFeatureInfo));
60
+ this._layerSettingsCache.set(hit.sourceId, mapLayerFromHit);
61
+ }
62
+ return mapLayerFromHit;
63
+ }
64
+ async getToolTip(hit) {
65
+ const infos = this.getMapLayerInfoFromHit(hit);
66
+ if (infos.length > 0) {
67
+ const names = infos.map((info) => info.settings.name);
68
+ return `Layer${names.length > 1 ? "s" : ""}: ${names.join(", ")}`;
69
+ }
70
+ return "";
71
+ }
72
+ async filterHit(hit, _out) {
73
+ return this.getMapLayerInfoFromHit(hit).length > 0 ? LocateFilterStatus.Accept : LocateFilterStatus.Reject;
74
+ }
75
+ async onDataButtonDown(ev) {
76
+ const hit = await IModelApp.locateManager.doLocate(new LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);
77
+ if (hit !== undefined) {
78
+ let mapInfo;
79
+ if (this.getMapLayerInfoFromHit(hit).length > 0) {
80
+ IModelApp.toolAdmin.setCursor("wait");
81
+ try {
82
+ mapInfo = await hit.viewport.getMapFeatureInfo(hit);
83
+ if (mapInfo) {
84
+ this._decorator.setState({ hit, mapInfo });
85
+ }
86
+ }
87
+ finally {
88
+ IModelApp.toolAdmin.setCursor(undefined);
89
+ }
90
+ }
91
+ this.onInfoReady.raiseEvent({ hit, mapInfo });
92
+ return EventHandled.Yes;
93
+ }
94
+ return EventHandled.No;
95
+ }
96
+ async onResetButtonUp(_ev) {
97
+ /* Common reset behavior for primitive tools is calling onReinitialize to restart or exitTool to terminate. */
98
+ await this.onReinitialize();
99
+ return EventHandled.No;
100
+ }
101
+ async onRestartTool() {
102
+ const tool = new MapFeatureInfoTool();
103
+ if (!(await tool.run()))
104
+ return this.exitTool();
105
+ }
106
+ }
107
+ MapFeatureInfoTool.toolId = "MapFeatureInfoTool";
108
+ MapFeatureInfoTool.iconSpec = "icon-map";
109
+ export { MapFeatureInfoTool };
110
+ //# sourceMappingURL=MapFeatureInfoTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapFeatureInfoTool.js","sourceRoot":"","sources":["../../../src/Tools/MapFeatureInfoTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module MapLayersFormats\r\n */\r\n\r\nimport {\r\n BeButtonEvent,\r\n EventHandled,\r\n HitDetail,\r\n IModelApp,\r\n LocateFilterStatus,\r\n LocateResponse,\r\n MapFeatureInfo,\r\n MapLayerInfoFromTileTree,\r\n PrimitiveTool,\r\n} from \"@itwin/core-frontend\";\r\nimport { BeEvent } from \"@itwin/core-bentley\";\r\nimport { ImageMapLayerSettings } from \"@itwin/core-common\";\r\nimport { MapFeatureInfoDecorator } from \"./MapFeatureInfoDecorator\";\r\n\r\n/** Data provided every time [[MapFeatureInfoTool]] retrieve feature information.\r\n * @see [[MapFeatureInfoToolData]]\r\n * @beta\r\n */\r\nexport interface MapFeatureInfoToolData {\r\n hit: HitDetail;\r\n mapInfo?: MapFeatureInfo;\r\n}\r\n\r\n/** Tools that allow extracting feature information from map-layers.\r\n * Simulate feature highlight by drawing overlay decorations. It also\r\n * fire an event that provide further feature information meant to be displayed in a UI / Widget.\r\n * @see [[MapFeatureInfoToolData]]\r\n * @beta\r\n */\r\nexport class MapFeatureInfoTool extends PrimitiveTool {\r\n public readonly onInfoReady = new BeEvent<(data: MapFeatureInfoToolData) => void>();\r\n\r\n public static override toolId = \"MapFeatureInfoTool\";\r\n public static override iconSpec = \"icon-map\";\r\n\r\n private _decorator: MapFeatureInfoDecorator = new MapFeatureInfoDecorator();\r\n private _layerSettingsCache = new Map<string, MapLayerInfoFromTileTree[]>();\r\n private readonly _detachListeners: VoidFunction[] = [];\r\n\r\n public override requireWriteableTarget(): boolean {\r\n return false;\r\n }\r\n\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.initLocateElements();\r\n IModelApp.locateManager.options.allowDecorations = true;\r\n\r\n this._layerSettingsCache.clear();\r\n\r\n // Listen of display style configuration changes, that we don't have to restart the tool to be up to date.\r\n const vp = this.targetView;\r\n if (vp) {\r\n\r\n this._detachListeners.push(vp.onChangeView.addListener((_vp, _previous) => {\r\n this._layerSettingsCache.clear();\r\n }));\r\n\r\n this._detachListeners.push(vp.displayStyle.settings.onMapImageryChanged.addListener((_newImagery: any) => {\r\n this._layerSettingsCache.clear();\r\n }));\r\n }\r\n\r\n IModelApp.viewManager.addDecorator(this._decorator);\r\n }\r\n\r\n public override async onCleanup() {\r\n this._detachListeners.forEach((f) => f());\r\n this._detachListeners.length = 0;\r\n\r\n IModelApp.viewManager.dropDecorator(this._decorator);\r\n }\r\n\r\n /** @internal */\r\n private getMapLayerInfoFromHit(hit: HitDetail) {\r\n let mapLayerFromHit: MapLayerInfoFromTileTree[] = [];\r\n const fromCache = this._layerSettingsCache.get(hit.sourceId);\r\n if (fromCache) {\r\n mapLayerFromHit = fromCache;\r\n } else if (this.targetView) {\r\n mapLayerFromHit = this.targetView?.mapLayerFromHit(hit).filter(((info) => info.settings instanceof ImageMapLayerSettings && info.provider?.supportsMapFeatureInfo));\r\n this._layerSettingsCache.set(hit.sourceId, mapLayerFromHit);\r\n }\r\n\r\n return mapLayerFromHit;\r\n }\r\n\r\n public override async getToolTip(hit: HitDetail): Promise<HTMLElement | string> {\r\n const infos = this.getMapLayerInfoFromHit(hit);\r\n if (infos.length > 0) {\r\n const names = infos.map((info) => info.settings.name);\r\n return `Layer${names.length > 1 ? \"s\" : \"\"}: ${names.join(\", \")}`;\r\n }\r\n return \"\";\r\n }\r\n\r\n public override async filterHit(hit: HitDetail, _out?: LocateResponse): Promise<LocateFilterStatus> {\r\n return this.getMapLayerInfoFromHit(hit).length > 0 ? LocateFilterStatus.Accept : LocateFilterStatus.Reject;\r\n }\r\n\r\n public override async onDataButtonDown(\r\n ev: BeButtonEvent\r\n ): Promise<EventHandled> {\r\n const hit = await IModelApp.locateManager.doLocate(\r\n new LocateResponse(),\r\n true,\r\n ev.point,\r\n ev.viewport,\r\n ev.inputSource\r\n );\r\n if (hit !== undefined) {\r\n let mapInfo: MapFeatureInfo | undefined;\r\n if (this.getMapLayerInfoFromHit(hit).length > 0) {\r\n IModelApp.toolAdmin.setCursor(\"wait\");\r\n try {\r\n mapInfo = await hit.viewport.getMapFeatureInfo(hit);\r\n if (mapInfo) {\r\n this._decorator.setState({ hit, mapInfo });\r\n }\r\n } finally {\r\n IModelApp.toolAdmin.setCursor(undefined);\r\n }\r\n }\r\n\r\n this.onInfoReady.raiseEvent({ hit, mapInfo });\r\n return EventHandled.Yes;\r\n }\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onResetButtonUp(\r\n _ev: BeButtonEvent\r\n ): Promise<EventHandled> {\r\n /* Common reset behavior for primitive tools is calling onReinitialize to restart or exitTool to terminate. */\r\n await this.onReinitialize();\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onRestartTool() {\r\n const tool = new MapFeatureInfoTool();\r\n if (!(await tool.run()))\r\n return this.exitTool();\r\n }\r\n}\r\n"]}
@@ -1,5 +1,6 @@
1
1
  export * from "./mapLayersFormats";
2
2
  export * from "./ArcGisFeature/ArcGisFeatureProvider";
3
+ export * from "./Tools/MapFeatureInfoTool";
3
4
  /** @docs-package-description
4
5
  * This package provides support for additional map layer formats that are not included in the @itwin/core-frontend package.
5
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"map-layers-formats.d.ts","sourceRoot":"","sources":["../../src/map-layers-formats.ts"],"names":[],"mappings":"AAKA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uCAAuC,CAAC;AAEtD;;GAEG;AAEH;;GAEG"}
1
+ {"version":3,"file":"map-layers-formats.d.ts","sourceRoot":"","sources":["../../src/map-layers-formats.ts"],"names":[],"mappings":"AAKA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uCAAuC,CAAC;AACtD,cAAc,4BAA4B,CAAC;AAE3C;;GAEG;AAEH;;GAEG"}
@@ -4,6 +4,7 @@
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  export * from "./mapLayersFormats";
6
6
  export * from "./ArcGisFeature/ArcGisFeatureProvider";
7
+ export * from "./Tools/MapFeatureInfoTool";
7
8
  /** @docs-package-description
8
9
  * This package provides support for additional map layer formats that are not included in the @itwin/core-frontend package.
9
10
  */
@@ -1 +1 @@
1
- {"version":3,"file":"map-layers-formats.js","sourceRoot":"","sources":["../../src/map-layers-formats.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,cAAc,oBAAoB,CAAC;AACnC,cAAc,uCAAuC,CAAC;AAEtD;;GAEG;AAEH;;GAEG","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nexport * from \"./mapLayersFormats\";\r\nexport * from \"./ArcGisFeature/ArcGisFeatureProvider\";\r\n\r\n/** @docs-package-description\r\n * This package provides support for additional map layer formats that are not included in the @itwin/core-frontend package.\r\n */\r\n\r\n/** @docs-group-description MapLayersFormats\r\n * APIs for working with the map layer formats provided by this package.\r\n */\r\n"]}
1
+ {"version":3,"file":"map-layers-formats.js","sourceRoot":"","sources":["../../src/map-layers-formats.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,cAAc,oBAAoB,CAAC;AACnC,cAAc,uCAAuC,CAAC;AACtD,cAAc,4BAA4B,CAAC;AAE3C;;GAEG;AAEH;;GAEG","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nexport * from \"./mapLayersFormats\";\r\nexport * from \"./ArcGisFeature/ArcGisFeatureProvider\";\r\nexport * from \"./Tools/MapFeatureInfoTool\";\r\n\r\n/** @docs-package-description\r\n * This package provides support for additional map layer formats that are not included in the @itwin/core-frontend package.\r\n */\r\n\r\n/** @docs-group-description MapLayersFormats\r\n * APIs for working with the map layer formats provided by this package.\r\n */\r\n"]}
@@ -1,11 +1,22 @@
1
+ import { Localization } from "@itwin/core-common";
2
+ /** Configuration options.
3
+ * @beta
4
+ */
5
+ export interface MapLayersFormatsConfig {
6
+ localization?: Localization;
7
+ }
1
8
  /** The primary API for the `@itwin/map-layers-formats` package. It allows the package's features to be [[initialize]]d.
2
9
  * @beta
3
10
  */
4
11
  export declare class MapLayersFormats {
12
+ private static _defaultNs;
13
+ static localization: Localization;
5
14
  /** Registers the [MapLayerFormat]($frontend)s provided by this package for use with [IModelApp]($frontend).
6
15
  * Typically, an application will call `MapLayersFormats.initialize` immediately after [IModelApp.startup]($frontend).
7
16
  * This function has no effect if called **before** [IModelApp.startup]($frontend) or **after** [IModelApp.shutdown]($frontend).
8
17
  */
9
- static initialize(): void;
18
+ static initialize(config?: MapLayersFormatsConfig): Promise<void>;
19
+ /** The internationalization service namespace. */
20
+ static get localizationNamespace(): string;
10
21
  }
11
22
  //# sourceMappingURL=mapLayersFormats.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mapLayersFormats.d.ts","sourceRoot":"","sources":["../../src/mapLayersFormats.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,qBAAa,gBAAgB;IAC3B;;;OAGG;WACW,UAAU;CAKzB"}
1
+ {"version":3,"file":"mapLayersFormats.d.ts","sourceRoot":"","sources":["../../src/mapLayersFormats.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAE3B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAsB;IAC/C,OAAc,YAAY,EAAE,YAAY,CAAC;IAEzC;;;OAGG;WACiB,UAAU,CAAC,MAAM,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAc9E,kDAAkD;IAClD,WAAkB,qBAAqB,IAAI,MAAM,CAEhD;CAEF"}
@@ -8,18 +8,29 @@
8
8
  import { assert } from "@itwin/core-bentley";
9
9
  import { IModelApp } from "@itwin/core-frontend";
10
10
  import { ArcGisFeatureMapLayerFormat } from "./ArcGisFeature/ArcGisFeatureFormat";
11
+ import { MapFeatureInfoTool } from "./Tools/MapFeatureInfoTool";
11
12
  /** The primary API for the `@itwin/map-layers-formats` package. It allows the package's features to be [[initialize]]d.
12
13
  * @beta
13
14
  */
14
- export class MapLayersFormats {
15
+ class MapLayersFormats {
15
16
  /** Registers the [MapLayerFormat]($frontend)s provided by this package for use with [IModelApp]($frontend).
16
17
  * Typically, an application will call `MapLayersFormats.initialize` immediately after [IModelApp.startup]($frontend).
17
18
  * This function has no effect if called **before** [IModelApp.startup]($frontend) or **after** [IModelApp.shutdown]($frontend).
18
19
  */
19
- static initialize() {
20
+ static async initialize(config) {
20
21
  assert(IModelApp.initialized, "MapLayersFormats.initialize must be called after IModelApp.startup and before IModelApp.shutdown");
21
22
  if (IModelApp.initialized)
22
23
  IModelApp.mapLayerFormatRegistry.register(ArcGisFeatureMapLayerFormat);
24
+ // register namespace containing localized strings for this package
25
+ MapLayersFormats.localization = config?.localization ?? IModelApp.localization;
26
+ await MapLayersFormats.localization.registerNamespace(MapLayersFormats.localizationNamespace);
27
+ MapFeatureInfoTool.register(MapLayersFormats.localizationNamespace);
28
+ }
29
+ /** The internationalization service namespace. */
30
+ static get localizationNamespace() {
31
+ return MapLayersFormats._defaultNs;
23
32
  }
24
33
  }
34
+ MapLayersFormats._defaultNs = "mapLayersFormats";
35
+ export { MapLayersFormats };
25
36
  //# sourceMappingURL=mapLayersFormats.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mapLayersFormats.js","sourceRoot":"","sources":["../../src/mapLayersFormats.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAElF;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAC3B;;;OAGG;IACI,MAAM,CAAC,UAAU;QACtB,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,kGAAkG,CAAC,CAAC;QAClI,IAAI,SAAS,CAAC,WAAW;YACvB,SAAS,CAAC,sBAAsB,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC;IAC3E,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module MapLayersFormats\r\n */\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { IModelApp } from \"@itwin/core-frontend\";\r\nimport { ArcGisFeatureMapLayerFormat } from \"./ArcGisFeature/ArcGisFeatureFormat\";\r\n\r\n/** The primary API for the `@itwin/map-layers-formats` package. It allows the package's features to be [[initialize]]d.\r\n * @beta\r\n */\r\nexport class MapLayersFormats {\r\n /** Registers the [MapLayerFormat]($frontend)s provided by this package for use with [IModelApp]($frontend).\r\n * Typically, an application will call `MapLayersFormats.initialize` immediately after [IModelApp.startup]($frontend).\r\n * This function has no effect if called **before** [IModelApp.startup]($frontend) or **after** [IModelApp.shutdown]($frontend).\r\n */\r\n public static initialize() {\r\n assert(IModelApp.initialized, \"MapLayersFormats.initialize must be called after IModelApp.startup and before IModelApp.shutdown\");\r\n if (IModelApp.initialized)\r\n IModelApp.mapLayerFormatRegistry.register(ArcGisFeatureMapLayerFormat);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"mapLayersFormats.js","sourceRoot":"","sources":["../../src/mapLayersFormats.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAUhE;;GAEG;AACH,MAAa,gBAAgB;IAK3B;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAA+B;QAC5D,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,kGAAkG,CAAC,CAAC;QAClI,IAAI,SAAS,CAAC,WAAW;YACvB,SAAS,CAAC,sBAAsB,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC;QAEzE,mEAAmE;QACnE,gBAAgB,CAAC,YAAY,GAAG,MAAM,EAAE,YAAY,IAAI,SAAS,CAAC,YAAY,CAAC;QAC/E,MAAM,gBAAgB,CAAC,YAAY,CAAC,iBAAiB,CACnD,gBAAgB,CAAC,qBAAqB,CACvC,CAAC;QAEF,kBAAkB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;IACtE,CAAC;IAED,kDAAkD;IAC3C,MAAM,KAAK,qBAAqB;QACrC,OAAO,gBAAgB,CAAC,UAAU,CAAC;IACrC,CAAC;;AAxBc,2BAAU,GAAG,kBAAkB,CAAC;SAFpC,gBAAgB","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module MapLayersFormats\r\n */\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { IModelApp } from \"@itwin/core-frontend\";\r\nimport { ArcGisFeatureMapLayerFormat } from \"./ArcGisFeature/ArcGisFeatureFormat\";\r\nimport { MapFeatureInfoTool } from \"./Tools/MapFeatureInfoTool\";\r\nimport { Localization } from \"@itwin/core-common\";\r\n\r\n/** Configuration options.\r\n * @beta\r\n */\r\nexport interface MapLayersFormatsConfig {\r\n localization?: Localization;\r\n}\r\n\r\n/** The primary API for the `@itwin/map-layers-formats` package. It allows the package's features to be [[initialize]]d.\r\n * @beta\r\n */\r\nexport class MapLayersFormats {\r\n\r\n private static _defaultNs = \"mapLayersFormats\";\r\n public static localization: Localization;\r\n\r\n /** Registers the [MapLayerFormat]($frontend)s provided by this package for use with [IModelApp]($frontend).\r\n * Typically, an application will call `MapLayersFormats.initialize` immediately after [IModelApp.startup]($frontend).\r\n * This function has no effect if called **before** [IModelApp.startup]($frontend) or **after** [IModelApp.shutdown]($frontend).\r\n */\r\n public static async initialize(config?: MapLayersFormatsConfig): Promise<void> {\r\n assert(IModelApp.initialized, \"MapLayersFormats.initialize must be called after IModelApp.startup and before IModelApp.shutdown\");\r\n if (IModelApp.initialized)\r\n IModelApp.mapLayerFormatRegistry.register(ArcGisFeatureMapLayerFormat);\r\n\r\n // register namespace containing localized strings for this package\r\n MapLayersFormats.localization = config?.localization ?? IModelApp.localization;\r\n await MapLayersFormats.localization.registerNamespace(\r\n MapLayersFormats.localizationNamespace\r\n );\r\n\r\n MapFeatureInfoTool.register(MapLayersFormats.localizationNamespace);\r\n }\r\n\r\n /** The internationalization service namespace. */\r\n public static get localizationNamespace(): string {\r\n return MapLayersFormats._defaultNs;\r\n }\r\n\r\n}\r\n"]}
@@ -0,0 +1,12 @@
1
+ {
2
+ "tools": {
3
+ "MapFeatureInfoTool": {
4
+ "keyin": "mlt map feature info"
5
+ }
6
+ },
7
+ "Messages": {
8
+ "MapFeatureInfoDecorator": {
9
+ "clusterZoomIn": "{{nbInstances}} instances found. Zoom in for more granularity."
10
+ }
11
+ }
12
+ }