RectangleGeometryLibrary-264bd135.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. /* This file is automatically rebuilt by the Cesium build process. */
  2. define(['exports', './when-e6985d2a', './Check-24cae389', './Math-392d0035', './Cartesian2-a5d6dde9', './Transforms-81680c41', './GeometryAttribute-6d403cd9'], function (exports, when, Check, _Math, Cartesian2, Transforms, GeometryAttribute) { 'use strict';
  3. var cos = Math.cos;
  4. var sin = Math.sin;
  5. var sqrt = Math.sqrt;
  6. /**
  7. * @private
  8. */
  9. var RectangleGeometryLibrary = {};
  10. /**
  11. * @private
  12. */
  13. RectangleGeometryLibrary.computePosition = function (
  14. computedOptions,
  15. ellipsoid,
  16. computeST,
  17. row,
  18. col,
  19. position,
  20. st
  21. ) {
  22. var radiiSquared = ellipsoid.radiiSquared;
  23. var nwCorner = computedOptions.nwCorner;
  24. var rectangle = computedOptions.boundingRectangle;
  25. var stLatitude =
  26. nwCorner.latitude -
  27. computedOptions.granYCos * row +
  28. col * computedOptions.granXSin;
  29. var cosLatitude = cos(stLatitude);
  30. var nZ = sin(stLatitude);
  31. var kZ = radiiSquared.z * nZ;
  32. var stLongitude =
  33. nwCorner.longitude +
  34. row * computedOptions.granYSin +
  35. col * computedOptions.granXCos;
  36. var nX = cosLatitude * cos(stLongitude);
  37. var nY = cosLatitude * sin(stLongitude);
  38. var kX = radiiSquared.x * nX;
  39. var kY = radiiSquared.y * nY;
  40. var gamma = sqrt(kX * nX + kY * nY + kZ * nZ);
  41. position.x = kX / gamma;
  42. position.y = kY / gamma;
  43. position.z = kZ / gamma;
  44. if (computeST) {
  45. var stNwCorner = computedOptions.stNwCorner;
  46. if (when.defined(stNwCorner)) {
  47. stLatitude =
  48. stNwCorner.latitude -
  49. computedOptions.stGranYCos * row +
  50. col * computedOptions.stGranXSin;
  51. stLongitude =
  52. stNwCorner.longitude +
  53. row * computedOptions.stGranYSin +
  54. col * computedOptions.stGranXCos;
  55. st.x = (stLongitude - computedOptions.stWest) * computedOptions.lonScalar;
  56. st.y = (stLatitude - computedOptions.stSouth) * computedOptions.latScalar;
  57. } else {
  58. st.x = (stLongitude - rectangle.west) * computedOptions.lonScalar;
  59. st.y = (stLatitude - rectangle.south) * computedOptions.latScalar;
  60. }
  61. }
  62. };
  63. var rotationMatrixScratch = new GeometryAttribute.Matrix2();
  64. var nwCartesian = new Cartesian2.Cartesian3();
  65. var centerScratch = new Cartesian2.Cartographic();
  66. var centerCartesian = new Cartesian2.Cartesian3();
  67. var proj = new Transforms.GeographicProjection();
  68. function getRotationOptions(
  69. nwCorner,
  70. rotation,
  71. granularityX,
  72. granularityY,
  73. center,
  74. width,
  75. height
  76. ) {
  77. var cosRotation = Math.cos(rotation);
  78. var granYCos = granularityY * cosRotation;
  79. var granXCos = granularityX * cosRotation;
  80. var sinRotation = Math.sin(rotation);
  81. var granYSin = granularityY * sinRotation;
  82. var granXSin = granularityX * sinRotation;
  83. nwCartesian = proj.project(nwCorner, nwCartesian);
  84. nwCartesian = Cartesian2.Cartesian3.subtract(nwCartesian, centerCartesian, nwCartesian);
  85. var rotationMatrix = GeometryAttribute.Matrix2.fromRotation(rotation, rotationMatrixScratch);
  86. nwCartesian = GeometryAttribute.Matrix2.multiplyByVector(
  87. rotationMatrix,
  88. nwCartesian,
  89. nwCartesian
  90. );
  91. nwCartesian = Cartesian2.Cartesian3.add(nwCartesian, centerCartesian, nwCartesian);
  92. nwCorner = proj.unproject(nwCartesian, nwCorner);
  93. width -= 1;
  94. height -= 1;
  95. var latitude = nwCorner.latitude;
  96. var latitude0 = latitude + width * granXSin;
  97. var latitude1 = latitude - granYCos * height;
  98. var latitude2 = latitude - granYCos * height + width * granXSin;
  99. var north = Math.max(latitude, latitude0, latitude1, latitude2);
  100. var south = Math.min(latitude, latitude0, latitude1, latitude2);
  101. var longitude = nwCorner.longitude;
  102. var longitude0 = longitude + width * granXCos;
  103. var longitude1 = longitude + height * granYSin;
  104. var longitude2 = longitude + height * granYSin + width * granXCos;
  105. var east = Math.max(longitude, longitude0, longitude1, longitude2);
  106. var west = Math.min(longitude, longitude0, longitude1, longitude2);
  107. return {
  108. north: north,
  109. south: south,
  110. east: east,
  111. west: west,
  112. granYCos: granYCos,
  113. granYSin: granYSin,
  114. granXCos: granXCos,
  115. granXSin: granXSin,
  116. nwCorner: nwCorner,
  117. };
  118. }
  119. /**
  120. * @private
  121. */
  122. RectangleGeometryLibrary.computeOptions = function (
  123. rectangle,
  124. granularity,
  125. rotation,
  126. stRotation,
  127. boundingRectangleScratch,
  128. nwCornerResult,
  129. stNwCornerResult
  130. ) {
  131. var east = rectangle.east;
  132. var west = rectangle.west;
  133. var north = rectangle.north;
  134. var south = rectangle.south;
  135. var northCap = false;
  136. var southCap = false;
  137. if (north === _Math.CesiumMath.PI_OVER_TWO) {
  138. northCap = true;
  139. }
  140. if (south === -_Math.CesiumMath.PI_OVER_TWO) {
  141. southCap = true;
  142. }
  143. var width;
  144. var height;
  145. var granularityX;
  146. var granularityY;
  147. var dx;
  148. var dy = north - south;
  149. if (west > east) {
  150. dx = _Math.CesiumMath.TWO_PI - west + east;
  151. } else {
  152. dx = east - west;
  153. }
  154. width = Math.ceil(dx / granularity) + 1;
  155. height = Math.ceil(dy / granularity) + 1;
  156. granularityX = dx / (width - 1);
  157. granularityY = dy / (height - 1);
  158. var nwCorner = Cartesian2.Rectangle.northwest(rectangle, nwCornerResult);
  159. var center = Cartesian2.Rectangle.center(rectangle, centerScratch);
  160. if (rotation !== 0 || stRotation !== 0) {
  161. if (center.longitude < nwCorner.longitude) {
  162. center.longitude += _Math.CesiumMath.TWO_PI;
  163. }
  164. centerCartesian = proj.project(center, centerCartesian);
  165. }
  166. var granYCos = granularityY;
  167. var granXCos = granularityX;
  168. var granYSin = 0.0;
  169. var granXSin = 0.0;
  170. var boundingRectangle = Cartesian2.Rectangle.clone(rectangle, boundingRectangleScratch);
  171. var computedOptions = {
  172. granYCos: granYCos,
  173. granYSin: granYSin,
  174. granXCos: granXCos,
  175. granXSin: granXSin,
  176. nwCorner: nwCorner,
  177. boundingRectangle: boundingRectangle,
  178. width: width,
  179. height: height,
  180. northCap: northCap,
  181. southCap: southCap,
  182. };
  183. if (rotation !== 0) {
  184. var rotationOptions = getRotationOptions(
  185. nwCorner,
  186. rotation,
  187. granularityX,
  188. granularityY,
  189. center,
  190. width,
  191. height
  192. );
  193. north = rotationOptions.north;
  194. south = rotationOptions.south;
  195. east = rotationOptions.east;
  196. west = rotationOptions.west;
  197. //>>includeStart('debug', pragmas.debug);
  198. if (
  199. north < -_Math.CesiumMath.PI_OVER_TWO ||
  200. north > _Math.CesiumMath.PI_OVER_TWO ||
  201. south < -_Math.CesiumMath.PI_OVER_TWO ||
  202. south > _Math.CesiumMath.PI_OVER_TWO
  203. ) {
  204. throw new Check.DeveloperError(
  205. "Rotated rectangle is invalid. It crosses over either the north or south pole."
  206. );
  207. }
  208. //>>includeEnd('debug')
  209. computedOptions.granYCos = rotationOptions.granYCos;
  210. computedOptions.granYSin = rotationOptions.granYSin;
  211. computedOptions.granXCos = rotationOptions.granXCos;
  212. computedOptions.granXSin = rotationOptions.granXSin;
  213. boundingRectangle.north = north;
  214. boundingRectangle.south = south;
  215. boundingRectangle.east = east;
  216. boundingRectangle.west = west;
  217. }
  218. if (stRotation !== 0) {
  219. rotation = rotation - stRotation;
  220. var stNwCorner = Cartesian2.Rectangle.northwest(boundingRectangle, stNwCornerResult);
  221. var stRotationOptions = getRotationOptions(
  222. stNwCorner,
  223. rotation,
  224. granularityX,
  225. granularityY,
  226. center,
  227. width,
  228. height
  229. );
  230. computedOptions.stGranYCos = stRotationOptions.granYCos;
  231. computedOptions.stGranXCos = stRotationOptions.granXCos;
  232. computedOptions.stGranYSin = stRotationOptions.granYSin;
  233. computedOptions.stGranXSin = stRotationOptions.granXSin;
  234. computedOptions.stNwCorner = stNwCorner;
  235. computedOptions.stWest = stRotationOptions.west;
  236. computedOptions.stSouth = stRotationOptions.south;
  237. }
  238. return computedOptions;
  239. };
  240. exports.RectangleGeometryLibrary = RectangleGeometryLibrary;
  241. });