PageRenderTime 54ms CodeModel.GetById 41ms RepoModel.GetById 1ms app.codeStats 0ms

/dnd_map/try_2/Map.as

https://github.com/airportyh/misc
ActionScript | 179 lines | 148 code | 27 blank | 4 comment | 6 complexity | cbaefce19b9561c9383342e4c4994b22 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. package{
  2. import mx.containers.Canvas
  3. import flash.geom.Point
  4. import flash.events.MouseEvent
  5. import com.google.maps.interfaces.IOverlay
  6. import com.google.maps.interfaces.IControl
  7. import com.google.maps.LatLng
  8. import com.google.maps.MapMouseEvent
  9. import com.google.maps.overlays.Marker
  10. import com.google.maps.overlays.Polyline
  11. [Event(name="mapevent_mapready", type="com.google.maps.MapEvent")]
  12. public class Map extends Canvas{
  13. public var map:OurMap
  14. var overlayPane:OverlayPane
  15. public function Map(){
  16. map = new OurMap()
  17. overlayPane = new OverlayPane()
  18. addChild(map)
  19. addChild(overlayPane)
  20. setChildIndex(overlayPane, 1)
  21. setChildIndex(map, 0)
  22. setupMapEventListeners()
  23. }
  24. function setupMapEventListeners(){
  25. addEventListener(MouseEvent.MOUSE_MOVE, onMapMouseMove)
  26. }
  27. function mapCoordinates(e:MouseEvent):Point{
  28. return map.globalToLocal(new Point(e.stageX, e.stageY))
  29. }
  30. // =========== mimic Map's interface ======================
  31. public function set key(key:String):void{
  32. map.key = key
  33. }
  34. public function set client(client:String):void{
  35. map.client = client
  36. }
  37. public function setCenter(c:LatLng):void{
  38. map.setCenter(c)
  39. }
  40. public function setZoom(z:Number):void{
  41. map.setZoom(z)
  42. }
  43. public override function addEventListener(
  44. type:String,
  45. listener:Function,
  46. useCapture:Boolean = false,
  47. priority:int = 0,
  48. useWeakReference:Boolean = false):void{
  49. if (type == 'maptypechanged' ||
  50. type.match(/^mapevent_.*/))
  51. map.addEventListener(type, listener,
  52. useCapture, priority, useWeakReference)
  53. else
  54. super.addEventListener(type, listener,
  55. useCapture, priority, useWeakReference)
  56. }
  57. // =========== util functions ====================
  58. var draggedMarker:Marker
  59. public function addPolyline(points:Array):void{
  60. var polyline:Polyline = new Polyline(points)
  61. polyline.addEventListener(MapMouseEvent.MOUSE_UP, onPolylineMouseUp)
  62. polyline.addEventListener(MapMouseEvent.ROLL_OVER, onPolylineRollOver)
  63. map.addOverlay(polyline)
  64. }
  65. public function addMarker(point:LatLng):void{
  66. var marker:Marker = new Marker(point)
  67. marker.addEventListener(MapMouseEvent.MOUSE_DOWN, onMarkerMouseDown)
  68. marker.addEventListener(MapMouseEvent.MOUSE_UP, onMarkerMouseUp)
  69. map.addOverlay(marker)
  70. }
  71. // =========== Drag & Drap Machinery =============
  72. function onPolylineMouseUp(e:MapMouseEvent):void{
  73. trace('polyline moused up') // this never happens if you drop a marker onto a polyline
  74. }
  75. function onPolylineRollOver(e:MapMouseEvent):void{
  76. trace('polyline rolled over')
  77. }
  78. function onMarkerMouseDown(e:MapMouseEvent):void{
  79. draggedMarker = e.feature as Marker
  80. }
  81. function onMarkerMouseUp(e:MapMouseEvent):void{
  82. if (draggedMarker === e.feature){
  83. trace('unset draggedMarker')
  84. draggedMarker = null
  85. overlayPane.clearDot()
  86. }
  87. }
  88. function onMapMouseMove(e:MouseEvent){
  89. //trace('onMapMouseMove()')
  90. if (draggedMarker){
  91. var point:Point = mapCoordinates(e)
  92. overlayPane.setDot(point)
  93. }
  94. }
  95. }
  96. }
  97. import com.google.maps.Map
  98. import com.google.maps.MapEvent
  99. import com.google.maps.controls.*
  100. import com.google.maps.LatLng
  101. class OurMap extends com.google.maps.Map{
  102. public function OurMap(){
  103. sensor = "false"
  104. addEventListener(MapEvent.MAP_READY, onReady)
  105. percentWidth = 100
  106. percentHeight = 100
  107. }
  108. function onReady(e){
  109. setCenter(new LatLng(36.1741, -97.0422))
  110. setZoom(4)
  111. enableContinuousZoom()
  112. enableScrollWheelZoom()
  113. addControl(new PositionControl())
  114. addControl(new ZoomControl())
  115. }
  116. }
  117. import mx.core.UIComponent;
  118. import flash.display.Sprite;
  119. import flash.geom.Point
  120. import flash.display.Graphics
  121. class OverlayPane extends UIComponent{
  122. var dot:Sprite
  123. public function OverlayPane(){
  124. percentWidth = 100
  125. percentHeight = 100
  126. }
  127. function removeAllChildren(){
  128. for (var i:int = numChildren - 1; i >= 0; i--) {
  129. removeChildAt(0)
  130. }
  131. }
  132. override protected function updateDisplayList(
  133. unscaledWidth:Number,
  134. unscaledHeight:Number):void {
  135. removeAllChildren()
  136. if (dot) addChild(dot)
  137. }
  138. public function setDot(pos:Point){
  139. var color = 0xff766a
  140. dot = new Sprite()
  141. var g:Graphics = dot.graphics
  142. g.lineStyle(1, 0x000000, 0.5, false, 'normal', 'rounded')
  143. g.drawCircle(pos.x, pos.y, 5)
  144. g.beginFill(color, 0.8)
  145. g.drawCircle(pos.x, pos.y, 5)
  146. invalidateDisplayList()
  147. }
  148. public function clearDot(){
  149. dot = null
  150. invalidateDisplayList()
  151. }
  152. }