PolygonsViewController.m 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. /*
  2. * Copyright 2016 Google Inc. All rights reserved.
  3. *
  4. *
  5. * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
  6. * file except in compliance with the License. You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software distributed under
  11. * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
  12. * ANY KIND, either express or implied. See the License for the specific language governing
  13. * permissions and limitations under the License.
  14. */
  15. #import "GoogleMapsDemos/Samples/PolygonsViewController.h"
  16. #import <GoogleMaps/GoogleMaps.h>
  17. @implementation PolygonsViewController
  18. - (void)viewDidLoad {
  19. [super viewDidLoad];
  20. GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:39.13006
  21. longitude:-77.508545
  22. zoom:4];
  23. GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
  24. mapView.delegate = self; // needed for didTapOverlay delegate method
  25. self.view = mapView;
  26. }
  27. - (void)viewDidAppear:(BOOL)animated {
  28. [super viewDidAppear:animated];
  29. // Create renderer related objects after view appears, so a renderer will be available;
  30. // otherwise, behavior is undefined (may result in null ptr derefs).
  31. GMSMapView *mapView = (GMSMapView *)self.view;
  32. // Create the first polygon.
  33. GMSPolygon *polygon = [[GMSPolygon alloc] init];
  34. polygon.path = [self pathOfNewYorkState];
  35. polygon.holes = @[ [self pathOfNewYorkStateHole] ];
  36. polygon.title = @"New York";
  37. polygon.fillColor = [UIColor colorWithRed:0.25 green:0 blue:0 alpha:0.2f];
  38. polygon.strokeColor = [UIColor blackColor];
  39. polygon.strokeWidth = 2;
  40. polygon.tappable = YES;
  41. polygon.map = mapView;
  42. // Copy the existing polygon and its settings and use it as a base for the
  43. // second polygon.
  44. polygon = [polygon copy];
  45. polygon.title = @"North Carolina";
  46. polygon.path = [self pathOfNorthCarolina];
  47. polygon.fillColor = [UIColor colorWithRed:0 green:0.25 blue:0 alpha:0.5];
  48. polygon.map = mapView;
  49. }
  50. - (void)mapView:(GMSMapView *)mapView didTapOverlay:(GMSOverlay *)overlay {
  51. // When a polygon is tapped, randomly change its fill color to a new hue.
  52. if ([overlay isKindOfClass:[GMSPolygon class]]) {
  53. GMSPolygon *polygon = (GMSPolygon *)overlay;
  54. CGFloat hue = (((float)arc4random()/0x100000000)*1.0f);
  55. polygon.fillColor =
  56. [UIColor colorWithHue:hue saturation:1 brightness:1 alpha:0.5];
  57. }
  58. }
  59. - (GMSPath *)pathOfNewYorkState {
  60. GMSMutablePath *path = [GMSMutablePath path];
  61. [path addLatitude:42.5142 longitude:-79.7624];
  62. [path addLatitude:42.7783 longitude:-79.0672];
  63. [path addLatitude:42.8508 longitude:-78.9313];
  64. [path addLatitude:42.9061 longitude:-78.9024];
  65. [path addLatitude:42.9554 longitude:-78.9313];
  66. [path addLatitude:42.9584 longitude:-78.9656];
  67. [path addLatitude:42.9886 longitude:-79.0219];
  68. [path addLatitude:43.0568 longitude:-79.0027];
  69. [path addLatitude:43.0769 longitude:-79.0727];
  70. [path addLatitude:43.1220 longitude:-79.0713];
  71. [path addLatitude:43.1441 longitude:-79.0302];
  72. [path addLatitude:43.1801 longitude:-79.0576];
  73. [path addLatitude:43.2482 longitude:-79.0604];
  74. [path addLatitude:43.2812 longitude:-79.0837];
  75. [path addLatitude:43.4509 longitude:-79.2004];
  76. [path addLatitude:43.6311 longitude:-78.6909];
  77. [path addLatitude:43.6321 longitude:-76.7958];
  78. [path addLatitude:43.9987 longitude:-76.4978];
  79. [path addLatitude:44.0965 longitude:-76.4388];
  80. [path addLatitude:44.1349 longitude:-76.3536];
  81. [path addLatitude:44.1989 longitude:-76.3124];
  82. [path addLatitude:44.2049 longitude:-76.2437];
  83. [path addLatitude:44.2413 longitude:-76.1655];
  84. [path addLatitude:44.2973 longitude:-76.1353];
  85. [path addLatitude:44.3327 longitude:-76.0474];
  86. [path addLatitude:44.3553 longitude:-75.9856];
  87. [path addLatitude:44.3749 longitude:-75.9196];
  88. [path addLatitude:44.3994 longitude:-75.8730];
  89. [path addLatitude:44.4308 longitude:-75.8221];
  90. [path addLatitude:44.4740 longitude:-75.8098];
  91. [path addLatitude:44.5425 longitude:-75.7288];
  92. [path addLatitude:44.6647 longitude:-75.5585];
  93. [path addLatitude:44.7672 longitude:-75.4088];
  94. [path addLatitude:44.8101 longitude:-75.3442];
  95. [path addLatitude:44.8383 longitude:-75.3058];
  96. [path addLatitude:44.8676 longitude:-75.2399];
  97. [path addLatitude:44.9211 longitude:-75.1204];
  98. [path addLatitude:44.9609 longitude:-74.9995];
  99. [path addLatitude:44.9803 longitude:-74.9899];
  100. [path addLatitude:44.9852 longitude:-74.9103];
  101. [path addLatitude:45.0017 longitude:-74.8856];
  102. [path addLatitude:45.0153 longitude:-74.8306];
  103. [path addLatitude:45.0046 longitude:-74.7633];
  104. [path addLatitude:45.0027 longitude:-74.7070];
  105. [path addLatitude:45.0007 longitude:-74.5642];
  106. [path addLatitude:44.9920 longitude:-74.1467];
  107. [path addLatitude:45.0037 longitude:-73.7306];
  108. [path addLatitude:45.0085 longitude:-73.4203];
  109. [path addLatitude:45.0109 longitude:-73.3430];
  110. [path addLatitude:44.9874 longitude:-73.3547];
  111. [path addLatitude:44.9648 longitude:-73.3379];
  112. [path addLatitude:44.9160 longitude:-73.3396];
  113. [path addLatitude:44.8354 longitude:-73.3739];
  114. [path addLatitude:44.8013 longitude:-73.3324];
  115. [path addLatitude:44.7419 longitude:-73.3667];
  116. [path addLatitude:44.6139 longitude:-73.3873];
  117. [path addLatitude:44.5787 longitude:-73.3736];
  118. [path addLatitude:44.4916 longitude:-73.3049];
  119. [path addLatitude:44.4289 longitude:-73.2953];
  120. [path addLatitude:44.3513 longitude:-73.3365];
  121. [path addLatitude:44.2757 longitude:-73.3118];
  122. [path addLatitude:44.1980 longitude:-73.3818];
  123. [path addLatitude:44.1142 longitude:-73.4079];
  124. [path addLatitude:44.0511 longitude:-73.4367];
  125. [path addLatitude:44.0165 longitude:-73.4065];
  126. [path addLatitude:43.9375 longitude:-73.4079];
  127. [path addLatitude:43.8771 longitude:-73.3749];
  128. [path addLatitude:43.8167 longitude:-73.3914];
  129. [path addLatitude:43.7790 longitude:-73.3557];
  130. [path addLatitude:43.6460 longitude:-73.4244];
  131. [path addLatitude:43.5893 longitude:-73.4340];
  132. [path addLatitude:43.5655 longitude:-73.3969];
  133. [path addLatitude:43.6112 longitude:-73.3818];
  134. [path addLatitude:43.6271 longitude:-73.3049];
  135. [path addLatitude:43.5764 longitude:-73.3063];
  136. [path addLatitude:43.5675 longitude:-73.2582];
  137. [path addLatitude:43.5227 longitude:-73.2445];
  138. [path addLatitude:43.2582 longitude:-73.2582];
  139. [path addLatitude:42.9715 longitude:-73.2733];
  140. [path addLatitude:42.8004 longitude:-73.2898];
  141. [path addLatitude:42.7460 longitude:-73.2664];
  142. [path addLatitude:42.4630 longitude:-73.3708];
  143. [path addLatitude:42.0840 longitude:-73.5095];
  144. [path addLatitude:42.0218 longitude:-73.4903];
  145. [path addLatitude:41.8808 longitude:-73.4999];
  146. [path addLatitude:41.2953 longitude:-73.5535];
  147. [path addLatitude:41.2128 longitude:-73.4834];
  148. [path addLatitude:41.1011 longitude:-73.7275];
  149. [path addLatitude:41.0237 longitude:-73.6644];
  150. [path addLatitude:40.9851 longitude:-73.6578];
  151. [path addLatitude:40.9509 longitude:-73.6132];
  152. [path addLatitude:41.1869 longitude:-72.4823];
  153. [path addLatitude:41.2551 longitude:-72.0950];
  154. [path addLatitude:41.3005 longitude:-71.9714];
  155. [path addLatitude:41.3108 longitude:-71.9193];
  156. [path addLatitude:41.1838 longitude:-71.7915];
  157. [path addLatitude:41.1249 longitude:-71.7929];
  158. [path addLatitude:41.0462 longitude:-71.7517];
  159. [path addLatitude:40.6306 longitude:-72.9465];
  160. [path addLatitude:40.5368 longitude:-73.4628];
  161. [path addLatitude:40.4887 longitude:-73.8885];
  162. [path addLatitude:40.5232 longitude:-73.9490];
  163. [path addLatitude:40.4772 longitude:-74.2271];
  164. [path addLatitude:40.4861 longitude:-74.2532];
  165. [path addLatitude:40.6468 longitude:-74.1866];
  166. [path addLatitude:40.6556 longitude:-74.0547];
  167. [path addLatitude:40.7618 longitude:-74.0156];
  168. [path addLatitude:40.8699 longitude:-73.9421];
  169. [path addLatitude:40.9980 longitude:-73.8934];
  170. [path addLatitude:41.0343 longitude:-73.9854];
  171. [path addLatitude:41.3268 longitude:-74.6274];
  172. [path addLatitude:41.3583 longitude:-74.7084];
  173. [path addLatitude:41.3811 longitude:-74.7101];
  174. [path addLatitude:41.4386 longitude:-74.8265];
  175. [path addLatitude:41.5075 longitude:-74.9913];
  176. [path addLatitude:41.6000 longitude:-75.0668];
  177. [path addLatitude:41.6719 longitude:-75.0366];
  178. [path addLatitude:41.7672 longitude:-75.0545];
  179. [path addLatitude:41.8808 longitude:-75.1945];
  180. [path addLatitude:42.0013 longitude:-75.3552];
  181. [path addLatitude:42.0003 longitude:-75.4266];
  182. [path addLatitude:42.0013 longitude:-77.0306];
  183. [path addLatitude:41.9993 longitude:-79.7250];
  184. [path addLatitude:42.0003 longitude:-79.7621];
  185. [path addLatitude:42.1827 longitude:-79.7621];
  186. [path addLatitude:42.5146 longitude:-79.7621];
  187. return path;
  188. }
  189. - (GMSPath *)pathOfNewYorkStateHole {
  190. GMSMutablePath *path = [GMSMutablePath path];
  191. [path addLatitude:43.5000 longitude:-76.3651];
  192. [path addLatitude:43.5000 longitude:-74.3651];
  193. [path addLatitude:42.0000 longitude:-74.3651];
  194. return path;
  195. }
  196. - (GMSPath *)pathOfNorthCarolina {
  197. GMSMutablePath *path = [GMSMutablePath path];
  198. [path addLatitude:33.7963 longitude:-78.4850];
  199. [path addLatitude:34.8037 longitude:-79.6742];
  200. [path addLatitude:34.8206 longitude:-80.8003];
  201. [path addLatitude:34.9377 longitude:-80.7880];
  202. [path addLatitude:35.1019 longitude:-80.9377];
  203. [path addLatitude:35.0356 longitude:-81.0379];
  204. [path addLatitude:35.1457 longitude:-81.0324];
  205. [path addLatitude:35.1660 longitude:-81.3867];
  206. [path addLatitude:35.1985 longitude:-82.2739];
  207. [path addLatitude:35.2041 longitude:-82.3933];
  208. [path addLatitude:35.0637 longitude:-82.7765];
  209. [path addLatitude:35.0817 longitude:-82.7861];
  210. [path addLatitude:34.9996 longitude:-83.1075];
  211. [path addLatitude:34.9918 longitude:-83.6183];
  212. [path addLatitude:34.9918 longitude:-84.3201];
  213. [path addLatitude:35.2131 longitude:-84.2885];
  214. [path addLatitude:35.2680 longitude:-84.2226];
  215. [path addLatitude:35.2310 longitude:-84.1113];
  216. [path addLatitude:35.2815 longitude:-84.0454];
  217. [path addLatitude:35.4058 longitude:-84.0248];
  218. [path addLatitude:35.4719 longitude:-83.9424];
  219. [path addLatitude:35.5166 longitude:-83.8559];
  220. [path addLatitude:35.5512 longitude:-83.6938];
  221. [path addLatitude:35.5680 longitude:-83.5181];
  222. [path addLatitude:35.6327 longitude:-83.3849];
  223. [path addLatitude:35.7142 longitude:-83.2475];
  224. [path addLatitude:35.7799 longitude:-82.9962];
  225. [path addLatitude:35.8445 longitude:-82.9276];
  226. [path addLatitude:35.9224 longitude:-82.8191];
  227. [path addLatitude:35.9958 longitude:-82.7710];
  228. [path addLatitude:36.0613 longitude:-82.6419];
  229. [path addLatitude:35.9702 longitude:-82.6103];
  230. [path addLatitude:35.9547 longitude:-82.5677];
  231. [path addLatitude:36.0236 longitude:-82.4730];
  232. [path addLatitude:36.0669 longitude:-82.4194];
  233. [path addLatitude:36.1168 longitude:-82.3535];
  234. [path addLatitude:36.1345 longitude:-82.2862];
  235. [path addLatitude:36.1467 longitude:-82.1461];
  236. [path addLatitude:36.1035 longitude:-82.1228];
  237. [path addLatitude:36.1268 longitude:-82.0267];
  238. [path addLatitude:36.2797 longitude:-81.9360];
  239. [path addLatitude:36.3527 longitude:-81.7987];
  240. [path addLatitude:36.3361 longitude:-81.7081];
  241. [path addLatitude:36.5880 longitude:-81.6724];
  242. [path addLatitude:36.5659 longitude:-80.7234];
  243. [path addLatitude:36.5438 longitude:-80.2977];
  244. [path addLatitude:36.5449 longitude:-79.6729];
  245. [path addLatitude:36.5449 longitude:-77.2559];
  246. [path addLatitude:36.5505 longitude:-75.7562];
  247. [path addLatitude:36.3129 longitude:-75.7068];
  248. [path addLatitude:35.7131 longitude:-75.4129];
  249. [path addLatitude:35.2041 longitude:-75.4720];
  250. [path addLatitude:34.9794 longitude:-76.0748];
  251. [path addLatitude:34.5258 longitude:-76.4951];
  252. [path addLatitude:34.5880 longitude:-76.8109];
  253. [path addLatitude:34.5314 longitude:-77.1378];
  254. [path addLatitude:34.3910 longitude:-77.4481];
  255. [path addLatitude:34.0481 longitude:-77.7983];
  256. [path addLatitude:33.7666 longitude:-77.9260];
  257. [path addLatitude:33.7963 longitude:-78.4863];
  258. return path;
  259. }
  260. @end