/* sopenspc/ShirleyOpenSpace.java History: 13 Nov 06 R. Burkhardt Refer to Valley Farm, Harriet Lyon and Farandnear properties as "Conservation Land" rather than "Conservation Restriction". 23 Mar 06 R. Burkhardt Rename Rich Tree Farm as Rich Tree Farm Conservation Area. 23 Sep 05 R. Burkhardt Draw message indicating image is loading for map. Consolidate map rendering into MapDisplayArea.drawBaseMap() and MapDisplayArea.drawOutline(). In imageUpdate, don't use ABORT flag to help determine return value. Delete LookupColorFailure and LookupColor (use ColorUtility instead). Use safe version of ColorUtility.getColor(). 24 May 05 R. Burkhardt Add Longley Acres. 19 May 05 R. Burkhardt Take down new coordinates a notch. 18 May 05 R. Burkhardt Pencil in Longley Acres Conservation Area. Erase penciled-in Going Road C.A. Rename #16 as Benjamin Hill Open Space instead of penciling in separate entry and redigitize boundary. Revise boundary of second largest block of Holdenwood Trust (#29) to match MassGIS better. 01 Jan 01 R. Burkhardt Add Dow Conservation Area. Augment Rust Conservation Area. Eliminate obsolete arrow data. 30 Jun 00 R. Burkhardt Add Pumpkin Link (Haines) parcel. 24 Aug 99 R. Burkhardt Augment name of "Townsend Rd." and "Groton Rd." with "Parcel". 06 Jul 99 R. Burkhardt Slightly revise Oxbow and J&A wording. Update Oxbow boundaries. 10 Mar 99 R. Burkhardt Correct spelling of Appalacian. 29 Jan 99 R. Burkhardt Use hide/show instead of just show. 26 Jan 99 R. Burkhardt Amend #8 and #22 descriptions. Add Hunting Hill parcels. Revise #32 and #37 boundaries. 10 Dec 98 R. Burkhardt Added info for J&A parcel. 18 Nov 98 R. Burkhardt Put copy of control panel at bottom too. 17 Nov 98 R. Burkhardt Got rid of the arrow. Read toggle colors from parameters. 16 Nov 98 R. Burkhardt Added a few newlines to descriptions. Fixed so base map is only updated on toggle() calls when it is being loaded instead of everytime new portion is available. Redigitized Holdenwood and added another parcel to U.S. Fish and Wildlife. Corrected polygonSize computation. Added description for U.S. F&W parcel. 13 Nov 98 R. Burkhardt Redigitized Valley Farm. Supplemented Holdenwood and Pumpkin with additional polygons and modified software to handle multiple polygons. Allow for area selection using the mouse and display of detailed descriptions. 12 Nov 98 R. Burkhardt Finished first draft. To add a new parcel, draw the new parcel on shirley.jpg (xpaint recommended), augment areaNames, areaOutlines (use Tablet on shirley.jpg to get points) and areaDescriptions. To do: Find out boundaries of new Valley Farm addition. */ import java.applet.Applet; import java.awt.*; import java.net.*; class Toggle extends Thread { MapDisplayArea m_client; long m_ms_delay; public Toggle(MapDisplayArea client, long ms_delay) { m_client = client; m_ms_delay = ms_delay; start(); } public void run() { for (;;) { try { sleep(m_ms_delay); } catch(Exception e) { } m_client.toggle(); } } } class DescriptionDialog extends Frame { Label m_name; TextArea m_description; Button m_dismiss; DescriptionDialog() { super("Description"); setLayout(new BorderLayout()); m_name = new Label(); m_description = new TextArea(); m_description.setEditable(false); m_dismiss = new Button("Dismiss"); add("North", m_name); add("Center", m_description); Panel p = new Panel(); p.add(m_dismiss); add("South", p); } public boolean action(Event evt, Object arg) { if (evt.target == m_dismiss) { hide(); return true; } return super.action(evt, arg); } } class MapDisplayArea extends Canvas { boolean m_redraw_basemap = false; Image m_baseMap; int m_area; Polygon[] m_outlines[]; Color m_outlineColor, m_outlineColor1, m_outlineColor2; ShirleyOpenSpace m_client; Toggle m_toggle; final static String m_loading_message = "Please wait, image is loading ..."; public MapDisplayArea (URL image_url, Polygon[][] outlines, ShirleyOpenSpace client) { m_outlines = outlines; m_client = client; m_outlineColor1 = ColorUtility.getColor(m_client.getParameter("color1"), Color.black); m_outlineColor2 = ColorUtility.getColor(m_client.getParameter("color2"), Color.green); m_baseMap = getToolkit().getImage(image_url); prepareImage(m_baseMap, this); m_toggle = new Toggle(this, 500); } synchronized void setArea(int i) { m_area = i; m_redraw_basemap = true; repaint(); } public boolean imageUpdate (Image img, int flags, int x, int y, int w, int h) { m_redraw_basemap = true; // let it get repainted when toggle is called return (flags & ALLBITS) == 0; } public void toggle() { m_outlineColor = (m_outlineColor == m_outlineColor1) ? m_outlineColor2 : m_outlineColor1; repaint(); } private void drawBaseMap(Graphics g) { StringUtility.drawCenteredString(m_loading_message, g, this); g.drawImage(m_baseMap, 0, 0, this); } private void drawOutline(Graphics g) { g.setColor(m_outlineColor); for (int i = 0; i < m_outlines[m_area].length; i++) g.drawPolygon(m_outlines[m_area][i]); } public void update(Graphics g) { if (m_redraw_basemap) { paint(g); m_redraw_basemap = false; } else drawOutline(g); } public void paint(Graphics g) { drawBaseMap(g); drawOutline(g); } public boolean mouseDown(Event evt, int x, int y) { for (int i = 0; i < m_outlines.length; i++) for (int j = 0; j < m_outlines[i].length; j++) if (m_outlines[i][j].inside(x, y)) { m_client.setArea(i); return true; } return super.mouseDown(evt, x, y); } } public class ShirleyOpenSpace extends Applet { Choice m_choice_n, m_choice_s; MapDisplayArea m_map_display_area; Button m_describe_n, m_describe_s; DescriptionDialog m_description_dialog; Polygon[] areaPolygons[]; public void init() { setLayout(new BorderLayout()); Panel p; m_choice_n = new Choice(); m_choice_s = new Choice(); for (int i = 0; i < areaNames.length; i++) { m_choice_n.addItem(areaNames[i]); m_choice_s.addItem(areaNames[i]); } m_description_dialog = new DescriptionDialog(); m_description_dialog.resize(500, 300); p = new Panel(); p.add(m_choice_n); m_describe_n = new Button("Description"); p.add(m_describe_n); add("North", p); p = new Panel(); p.add(m_choice_s); m_describe_s = new Button("Description"); p.add(m_describe_s); add("South", p); initPolygons(); try { m_map_display_area = new MapDisplayArea(new URL(getDocumentBase(), getParameter("baseMapName")), areaPolygons, this); add("Center", m_map_display_area); } catch(Exception e) { showStatus(e.toString()); } } void initPolygons() { areaPolygons = new Polygon[areaOutlines.length][]; int polygonCount, polygonSize; int polygonOffsets[] = new int[5]; polygonOffsets[0] = 0; for (int i = 0; i < areaOutlines.length; i++) { polygonCount = 1; for (int j = 0; j < areaOutlines[i].length; j++) if (areaOutlines[i][j][0] == 0) polygonOffsets[polygonCount++] = j + 1; areaPolygons[i] = new Polygon[polygonCount]; for (int j = 0; j < polygonCount; j++) { /* wraps back to the starting point since I found at least one platform that doesn't do this automatically */ if (j == polygonCount - 1) polygonSize = 1 + areaOutlines[i].length - polygonOffsets[j]; else polygonSize = polygonOffsets[j + 1] - polygonOffsets[j]; areaPolygons[i][j] = new Polygon(); areaPolygons[i][j].xpoints = new int[polygonSize]; areaPolygons[i][j].ypoints = new int[polygonSize]; areaPolygons[i][j].npoints = polygonSize; int k; for (k = 0; k < polygonSize - 1; k++) { areaPolygons[i][j].xpoints[k] = areaOutlines[i][polygonOffsets[j] + k][0]; areaPolygons[i][j].ypoints[k] = areaOutlines[i][polygonOffsets[j] + k][1]; } areaPolygons[i][j].xpoints[k] = areaOutlines[i][polygonOffsets[j]][0]; areaPolygons[i][j].ypoints[k] = areaOutlines[i][polygonOffsets[j]][1]; } } } public void start() { handleChoice(m_choice_n.getSelectedItem()); } public void stop() { m_description_dialog.hide(); } private void handleChoice(Object arg) { for (int i = 0; i < areaNames.length; i++) if (arg == areaNames[i]) { m_choice_n.select(i); m_choice_s.select(i); setArea(i); break; } } synchronized void setArea(int i) { m_choice_n.select(i); m_choice_s.select(i); m_description_dialog.m_name.setText(areaNames[i]); m_description_dialog.m_description.setText(areaDescriptions[i]); m_map_display_area.setArea(i); } public boolean action(Event evt, Object arg) { if (evt.target == m_choice_n || evt.target == m_choice_s) handleChoice(arg); else if (evt.target == m_describe_n || evt.target == m_describe_s) { m_description_dialog.hide(); m_description_dialog.show(); m_description_dialog.toFront(); } return super.action(evt, arg); } final static String areaNames[] = { " 1. Spruce Swamp", " 2. Holden Road Conservation Area", " 3. Thompson Conservation Area", " 4. Harriet Lyon Bird Sanctuary", " 5. Squannacook Conservation Area", " 6. Crow Island Conservation Area", " 7. Fredonian Park and Nature Center", " 8. Rust Conservation Area", " 9. J&A Conservation Area", "10. Mitchell Conservation Area", "11. Nashua River Frontage/Walker Rd.", "12. Rich Tree Farm Conservation Area", "13. Ronchetti Conservation Area", "14. Lura A. White School", "15. Center School", "16. Benjamin Hill Open Space", "17. Whiteley Park", "18. Center Cemetery", "19. Center Common", "20. Village Cemetery", "21. Leominster Rd. Landfill", "22. Townsend Rd. Parcel", "23. Groton Rd. Parcel", "24. Highway Dept. Gravel Pit", "25. Oxbow National Wildlife Refuge", "26. Valley Farm Conservation Land", "27. Harriet Lyon Conservation Land", "28. Farandnear Conservation Land", "29. Holdenwood Trust", "30. Shirley Rod and Gun", "31. Shirley Water District", "32. Squannacook Wildlife Management Area", "33. Mulpus Brook Wildlife Management Area", "34. DFW / Lawton Rd.", "35. DFW / Nashua Rd.", "36. MCI-Shirley Greenway", "37. Pumpkin Brook Open Space", "38. Woodland Ridge Open Space", "39. Longley Trace Open Space", "40. Birchwood Hills Open Space", "41. Squannacook Woods", "42. Hunting Hill / Town of Shirley", "43. Hunting Hill / DFW", "44. Pumpkin Brook Link", "45. Longley Acres Conservation Area", "46. Dow Conservation Area", }; final static int[][] areaOutlines[] = { // (x, y) = (0, 0) signals the end of one polygon and the start of another /* Spruce Swamp */ { { 164, 570 }, { 167, 567 }, { 168, 563 }, { 169, 561 }, { 173, 561 }, { 174, 556 }, { 186, 556 }, { 188, 571 }, { 182, 572 }, { 179, 570 }, { 173, 572 }, { 169, 570 } }, /* Holden Rd. */ { { 130, 589 }, { 136, 594 }, { 136, 602 }, { 139, 609 }, { 141, 618 }, { 150, 618 }, { 140, 620 }, { 140, 634 }, { 131, 634 }, { 131, 644 }, { 119, 645 }, { 119, 641 }, { 107, 641 }, { 99, 634 }, { 99, 636 }, { 76, 638 }, { 75, 627 }, { 120, 619 }, { 129, 619 } }, /* Thompson */ { { 84, 504 }, { 80, 502 }, { 78, 503 }, { 73, 501 }, { 70, 505 }, { 67, 505 }, { 65, 511 }, { 82, 528 }, { 82, 511 } }, /* Harriet Lyon */ { { 80, 502 }, { 79, 501 }, { 84, 484 }, { 75, 477 }, { 75, 475 }, { 101, 479 }, { 95, 487 }, { 90, 485 } }, /* Squannacook */ { { 222, 199 }, { 228, 188 }, { 223, 185 }, { 215, 172 }, { 219, 168 }, { 217, 159 }, { 217, 157 }, { 227, 156 }, { 228, 158 }, { 234, 158 }, { 235, 162 }, { 230, 166 }, { 234, 172 }, { 239, 179 }, { 234, 183 }, { 230, 189 }, { 223, 199 }, }, /* Crow Island */ { { 313, 289 }, { 316, 286 }, { 317, 278 }, { 323, 281 }, { 322, 290 }, { 319, 293 }, }, /* Fredonian Park */ { { 166, 780 }, { 161, 777 }, { 169, 774 }, { 178, 780 }, { 171, 792 }, { 163, 784 }, { 166, 781 }, }, /* Rust Conservation Area - outer boundary */ { { 186, 304 }, { 175, 257 }, { 223, 274 }, { 224, 286 }, { 211, 283 }, { 210, 288 }, { 193, 284 }, { 189, 305 }, { 0, 0 }, /* Rust Conservation Area - inholding */ { 190, 269 }, { 203, 273 }, { 201, 279 }, { 189, 277 }, }, /* J&A Conservation Area */ { { 427, 483 }, { 444, 477 }, { 445, 480 }, { 445, 484 }, { 440, 486 }, { 433, 488 }, { 428, 490 }, }, /* Mitchell */ { { 168, 515 }, { 182, 524 }, { 171, 527 }, }, /* Nashua River */ { { 392, 688 }, { 393, 689 }, { 375, 699 }, { 370, 697 }, { 382, 690 }, }, /* Rich Tree Farm Conservation Area */ { { 294, 573 }, { 295, 570 }, { 301, 567 }, { 305, 573 }, { 310, 572 }, { 308, 565 }, { 309, 564 }, { 325, 571 }, { 336, 569 }, { 346, 586 }, { 359, 595 }, { 357, 617 }, { 342, 618 }, { 342, 611 }, { 326, 611 }, { 320, 613 }, { 313, 621 }, { 300, 608 }, { 304, 601 }, { 301, 587 }, }, /* Ronchetti */ { { 44, 663 }, { 52, 600 }, { 65, 587 }, { 67, 575 }, { 93, 570 }, { 104, 623 }, { 51, 632 }, { 47, 663 }, }, /* Lura White */ { { 148, 802 }, { 168, 802 }, { 173, 810 }, { 165, 816 }, { 161, 815 }, { 160, 818 }, { 145, 815 }, }, /* Center School */ { { 193, 508 }, { 203, 507 }, { 204, 517 }, { 192, 516 }, }, /* Benjamin Hill */ { { 190, 608 }, { 203, 608 }, { 203, 624 }, { 214, 622 }, { 216, 630 }, { 214, 631 }, { 214, 634 }, { 234, 615 }, { 234, 636 }, { 210, 649 }, { 217, 654 }, { 205, 657 }, { 203, 660 }, { 201, 660 }, { 201, 650 }, { 195, 653 }, { 194, 638 }, { 203, 638 }, { 202, 633 }, { 192, 634 }, { 192, 625 }, { 199, 624 }, { 199, 615 }, { 191, 615 }, }, /* Whiteley Park */ { { 206, 760 }, { 206, 767 }, { 213, 765 }, { 213, 759 }, }, /* Center Cemetery */ { { 195, 533 }, { 204, 532 }, { 208, 540 }, { 208, 548 }, { 203, 550 }, }, /* Center Common */ { { 196, 535 }, { 194, 531 }, { 193, 524 }, { 187, 534 }, }, /* Village Cemetery */ { { 168, 800 }, { 182, 792 }, { 178, 804 }, { 173, 809 }, }, /* Leominster Rd. Landfill */ { { 34, 756 }, { 38, 754 }, { 46, 755 }, { 56, 778 }, { 60, 779 }, { 63, 785 }, { 60, 790 }, { 40, 797 }, { 30, 797 }, }, /* Townsend Rd. */ { { 104, 187 }, { 103, 197 }, { 108, 200 }, { 160, 195 }, { 160, 189 }, { 156, 185 }, { 152, 175 }, { 147, 169 }, { 143, 169 }, { 138, 163 }, { 132, 175 }, }, /* Groton Rd. */ { { 230, 311 }, { 237, 311 }, { 240, 326 }, { 238, 338 }, { 229, 336 }, { 231, 317 }, }, /* Highway Dept. Gravel Pit */ { { 362, 662 }, { 367, 660 }, { 372, 665 }, { 369, 687 }, { 348, 698 }, { 345, 693 }, }, /* U.S. Fish and Wildlife - Oxbow Nat'l Wildlife Refuge */ { /* North parcel */ { 428, 644 }, { 409, 643 }, { 406, 637 }, { 403, 631 }, { 403, 616 }, { 416, 598 }, { 424, 599 }, { 432, 596 }, { 434, 591 }, { 435, 579 }, { 430, 567 }, { 423, 557 }, { 417, 554 }, { 412, 553 }, { 406, 553 }, { 403, 551 }, { 397, 549 }, { 395, 545 }, { 393, 541 }, { 397, 508 }, { 407, 504 }, { 407, 507 }, { 409, 513 }, { 414, 520 }, { 417, 529 }, { 420, 531 }, { 429, 534 }, { 431, 537 }, { 431, 545 }, { 433, 557 }, { 440, 563 }, { 465, 574 }, { 464, 582 }, { 452, 585 }, { 451, 586 }, { 452, 594 }, { 450, 598 }, { 438, 610 }, { 427, 641 }, { 428, 644 }, { 0, 0 }, /* South parcel */ { 362, 708 }, { 359, 701 }, { 284, 731 }, { 300, 743 }, { 298, 748 }, { 299, 749 }, { 294, 753 }, { 290, 757 }, { 284, 780 }, { 286, 781 }, { 284, 783 }, { 281, 781 }, { 278, 782 }, { 269, 792 }, { 282, 800 }, { 284, 796 }, { 294, 795 }, { 298, 789 }, { 302, 782 }, { 304, 772 }, { 306, 764 }, { 309, 760 }, { 318, 752 }, { 324, 744 }, { 328, 736 }, { 329, 732 }, { 337, 727 }, { 347, 720 }, { 354, 712 }, { 363, 708 }, }, /* Valley Farm */ { { 150, 620 }, { 139, 601 }, { 138, 596 }, { 135, 593 }, { 136, 598 }, { 139, 610 }, { 140, 618 }, { 149, 620 }, { 140, 621 }, { 139, 634 }, { 131, 634 }, { 130, 643 }, { 121, 644 }, { 120, 640 }, { 109, 641 }, { 99, 637 }, { 99, 635 }, { 75, 638 }, { 74, 650 }, { 95, 650 }, { 100, 672 }, { 100, 677 }, { 99, 681 }, { 104, 687 }, { 101, 689 }, { 100, 695 }, { 92, 702 }, { 92, 711 }, { 101, 719 }, { 106, 728 }, { 106, 734 }, { 133, 734 }, { 135, 717 }, { 129, 714 }, { 124, 687 }, { 125, 684 }, { 140, 682 }, { 140, 674 }, { 157, 672 }, { 156, 644 }, { 150, 632 }, }, /* Harriet Lyon */ { { 165, 572 }, { 169, 571 }, { 171, 573 }, { 178, 571 }, { 189, 570 }, { 188, 577 }, { 190, 578 }, { 187, 581 }, { 188, 583 }, { 184, 585 }, { 183, 593 }, { 181, 593 }, { 179, 589 }, { 173, 591 }, { 173, 595 }, { 170, 595 }, { 172, 588 }, { 168, 574 }, { 166, 575 }, }, /* Farandnear */ { { 116, 578 }, { 125, 571 }, { 116, 563 }, { 122, 554 }, { 122, 530 }, { 132, 529 }, { 135, 537 }, { 149, 536 }, { 153, 538 }, { 151, 552 }, { 162, 554 }, { 161, 569 }, { 155, 570 }, { 156, 577 }, { 163, 578 }, { 164, 584 }, { 139, 585 }, { 138, 583 }, { 126, 583 }, { 124, 585 }, { 122, 584 }, { 122, 581 }, { 119, 578 }, { 118, 580 }, }, /* Holdenwood Trust */ { { 203, 494 }, { 204, 533 }, { 207, 536 }, { 206, 548 }, { 202, 550 }, { 203, 554 }, { 209, 551 }, { 214, 552 }, { 217, 561 }, { 215, 561 }, { 215, 565 }, { 223, 566 }, { 223, 580 }, { 218, 579 }, { 220, 586 }, { 227, 586 }, { 225, 580 }, { 228, 580 }, { 237, 568 }, { 250, 565 }, { 249, 561 }, { 241, 561 }, { 240, 546 }, { 229, 544 }, { 228, 522 }, { 246, 519 }, { 248, 490 }, { 245, 488 }, { 245, 486 }, { 244, 490 }, { 222, 493 }, { 219, 483 }, { 208, 485 }, { 209, 493 }, { 0, 0 }, /* Holdenwood(2) */ { 233, 587 }, { 234, 636 }, { 211, 648 }, { 212, 650 }, { 235, 637 }, { 240, 641 }, { 242, 639 }, { 236, 635 }, { 236, 615 }, { 240, 613 }, { 244, 611 }, { 248, 612 }, { 247, 601 }, { 244, 588 }, { 0, 0 }, /* Holdenwood(3) */ { 313, 513 }, { 312, 503 }, { 316, 502 }, { 317, 501 }, { 319, 500 }, { 320, 514 }, { 0, 0 }, /* Holdenwood(4) */ { 36, 736 }, { 40, 735 }, { 40, 747 }, { 35, 751 }, }, /* Shirley Rod and Gun */ { { 354, 378 }, { 353, 396 }, { 361, 412 }, { 360, 421 }, { 365, 434 }, { 366, 459 }, { 367, 483 }, { 394, 488 }, { 406, 444 }, { 385, 420 }, { 387, 412 }, { 387, 407 }, { 380, 407 }, }, /* Shirley Water District */ { { 335, 619 }, { 355, 617 }, { 367, 631 }, { 384, 642 }, { 394, 645 }, { 390, 663 }, { 375, 662 }, { 373, 665 }, { 365, 660 }, { 357, 661 }, { 344, 689 }, { 333, 676 }, { 338, 669 }, { 334, 663 }, { 337, 661 }, { 336, 646 }, { 338, 646 }, }, /* Squannacook Wildlife Management Area */ { { 155, 35 }, { 172, 48 }, { 178, 49 }, { 186, 57 }, { 187, 59 }, { 190, 61 }, { 191, 69 }, { 194, 72 }, { 195, 75 }, { 190, 79 }, { 195, 84 }, { 196, 88 }, { 204, 94 }, { 208, 94 }, { 209, 89 }, { 208, 84 }, { 210, 82 }, { 213, 87 }, { 218, 90 }, { 215, 96 }, { 216, 101 }, { 222, 99 }, { 223, 96 }, { 225, 97 }, { 226, 103 }, { 224, 103 }, { 229, 109 }, { 225, 109 }, { 219, 107 }, { 221, 112 }, { 228, 113 }, { 228, 118 }, { 224, 121 }, { 224, 122 }, { 232, 126 }, { 232, 141 }, { 227, 149 }, { 227, 157 }, { 219, 156 }, { 218, 168 }, { 216, 173 }, { 208, 173 }, { 203, 178 }, { 204, 185 }, { 215, 189 }, { 213, 195 }, { 189, 189 }, { 181, 189 }, { 181, 159 }, { 171, 159 }, { 166, 155 }, { 174, 124 }, { 174, 119 }, { 174, 106 }, { 166, 95 }, { 162, 96 }, { 162, 87 }, { 164, 86 }, { 158, 81 }, { 154, 88 }, { 127, 74 }, { 118, 67 }, { 124, 29 }, { 145, 43 }, }, /* Mulpus Brook Wildlife Management Area */ { { 81, 366 }, { 84, 337 }, { 89, 339 }, { 93, 333 }, { 96, 333 }, { 96, 349 }, { 101, 350 }, { 106, 338 }, { 113, 329 }, { 121, 329 }, { 125, 327 }, { 140, 349 }, { 159, 353 }, { 156, 367 }, { 181, 386 }, { 183, 385 }, { 185, 387 }, { 182, 388 }, { 187, 404 }, { 192, 408 }, { 192, 415 }, { 186, 411 }, { 186, 406 }, { 175, 403 }, { 176, 408 }, { 174, 407 }, { 173, 402 }, { 154, 398 }, { 153, 405 }, { 151, 405 }, { 151, 397 }, { 147, 395 }, { 147, 391 }, { 137, 390 }, { 129, 391 }, { 125, 399 }, { 118, 395 }, { 122, 376 }, { 115, 373 }, { 108, 377 }, { 99, 373 }, { 96, 375 }, { 89, 370 }, { 94, 364 }, { 87, 360 }, }, /* DFW / Lawton Rd. */ { { 317, 349 }, { 320, 343 }, { 335, 347 }, { 338, 355 }, { 348, 356 }, { 358, 360 }, { 358, 367 }, { 354, 376 }, { 352, 389 }, { 337, 376 }, { 343, 373 }, { 344, 365 }, { 342, 365 }, { 340, 367 }, { 335, 363 }, { 334, 359 }, { 331, 360 }, { 332, 364 }, { 324, 367 }, }, /* DFW / Nashua Rd. */ { { 409, 645 }, { 417, 646 }, { 418, 643 }, { 428, 645 }, { 430, 660 }, { 438, 671 }, { 438, 681 }, { 433, 685 }, { 414, 687 }, { 399, 690 }, { 399, 684 }, { 412, 680 }, { 415, 676 }, { 408, 675 }, { 406, 670 }, { 414, 670 }, { 414, 668 }, { 407, 668 }, { 407, 663 }, { 413, 662 }, { 412, 654 }, { 416, 654 }, { 416, 650 }, { 409, 647 }, }, /* MCI Shirley Greenway */ { { 278, 847 }, { 271, 846 }, { 257, 864 }, { 254, 870 }, { 254, 885 }, { 273, 931 }, { 286, 933 }, { 286, 928 }, { 264, 890 }, { 264, 872 }, { 279, 855 }, }, /* Pumpkin Brook */ { { 127, 74 }, { 151, 87 }, { 149, 91 }, { 146, 88 }, { 132, 88 }, { 129, 93 }, { 128, 94 }, { 129, 88 }, { 123, 87 }, }, /* Woodland Ridge */ { { 270, 255 }, { 279, 251 }, { 287, 266 }, { 279, 277 }, { 275, 276 }, }, /* Longley Trace */ { { 241, 431 }, { 234, 443 }, { 233, 439 }, { 228, 444 }, { 235, 454 }, { 245, 434 }, }, /* Birchwood Hills */ { { 44, 662 }, { 47, 661 }, { 50, 631 }, { 75, 628 }, { 76, 637 }, { 74, 649 }, { 95, 649 }, { 101, 672 }, { 99, 679 }, { 98, 681 }, { 103, 687 }, { 99, 690 }, { 91, 698 }, { 83, 694 }, { 73, 693 }, { 68, 700 }, { 67, 695 }, { 71, 686 }, { 72, 679 }, { 79, 678 }, { 85, 682 }, { 91, 683 }, { 94, 679 }, { 88, 672 }, { 76, 667 }, { 70, 666 }, { 67, 651 }, { 61, 653 }, { 54, 659 }, { 53, 664 }, { 59, 672 }, { 65, 678 }, { 64, 694 }, { 62, 696 }, { 52, 680 }, { 47, 679 }, { 44, 674 }, }, /* Squannacook Woods */ { { 240, 182 }, { 247, 184 }, { 244, 186 }, { 250, 191 }, { 262, 195 }, { 260, 197 }, { 264, 199 }, { 259, 199 }, { 262, 203 }, { 267, 205 }, { 269, 204 }, { 266, 200 }, { 268, 197 }, { 281, 216 }, { 277, 217 }, { 272, 211 }, { 264, 212 }, { 261, 208 }, { 258, 209 }, { 255, 205 }, { 255, 200 }, { 252, 197 }, { 249, 197 }, { 247, 201 }, { 249, 207 }, { 246, 207 }, { 243, 204 }, { 244, 200 }, { 240, 199 }, { 233, 206 }, { 230, 202 }, }, /* Hunting Hill/Town of Shirley */ { { 102, 199 }, { 109, 202 }, { 118, 201 }, { 112, 248 }, { 96, 249 }, }, /* Hunting Hill/DFW */ { { 113, 247 }, { 118, 200 }, { 151, 196 }, { 160, 246 }, { 150, 249 }, { 144, 261 }, { 143, 273 }, { 150, 275 }, { 150, 279 }, { 125, 286 }, { 110, 281 }, { 112, 265 }, { 117, 262 }, { 118, 249 }, }, /* Pumpkin Brook Link - east */ { { 157, 80 }, { 150, 91 }, { 143, 105 }, { 138, 100 }, { 130, 103 }, { 133, 110 }, { 132, 112 }, { 143, 129 }, { 150, 166 }, { 166, 150 }, { 169, 134 }, { 176, 122 }, { 176, 106 }, { 160, 92 }, { 163, 86 }, { 0, 0 }, /* Pumpkin Brook Link - west */ { 132, 113 }, { 132, 131 }, { 111, 131 }, { 108, 159 }, { 121, 154 }, { 122, 144 }, { 146, 144 }, { 142, 129 }, }, /* Longley Acres */ { { 96, 492 }, { 101, 478 }, { 121, 477 }, { 122, 497 }, { 139, 495 }, { 143, 483 }, { 150, 483 }, { 150, 489 }, { 144, 505 }, { 107, 510 }, { 110, 490 }, { 0, 0 }, { 132, 507}, { 148, 506}, { 147, 523}, { 132, 526}, }, /* Dow */ { { 157, 306 }, { 157, 284 }, { 149, 281 }, { 151, 277 }, { 166, 279 }, { 166, 291 }, { 160, 291 }, { 159, 304 }, }, }; final static String[] areaDescriptions = { "11.62 acres. Access off Center Rd.\n" + "Municipal land managed by the Conservation Commission.\n" + "No developed trails. Contiguous to Harriet Lyon Conservation\n" + "Land off Hazen Rd.", "58.23 acres. Access off Holden Rd. and through Valley Farm Wildlife\n" + "Sanctuary.\n" + "Municipal land managed by the Conservation Commission.\n" + "Includes \"Holden Triangle.\" Developed trails follow\n" + "Spruce Swamp Brook and upland ridges. Trails connect with trail\n" + "system at Valley Farm. Terrific hiking and skiing. Acquired with\n" + "a Self-Help Grant.", "15.7 acres. Access south of Whitney Rd. at Lunenburg line,\n" + "opposite Harriet Lyon Bird Sanctuary.\n" + "Municipal land managed by the Conservation Commission.\n" + "No developed trails but easily traversed. Combines steep eskers\n" + "and marsh. Small heron rookery. Beaver Pond Brook arises from\n" + "these marshes.", "7.83 acres. Access along Beaver Pond Brook north of Whitney Rd.\n" + "Municipal land managed by the Conservation Commission.\n" + "An initial well-defined trail ends in a wetland tangle.", "12.5 acres. Access off Squannacook Rd.\n" + "Municipal land managed by the Conservation Commission.\n" + "A narrow trail leads to a heavily forested river front parcel.\n" + "Perched atop the esker on the river's edge you might think you'd\n" + "dropped into a wilderness. Contiguous to the Division of\n" + "Fisheries and Wildlife's 800 acre Squannacook Wildlife\n" + "Management Area in Shirley, Townsend and Groton. Acquired\n" + "with a Self-Help Grant.", "2.10 acres.\n" + "Municipal land managed by the Conservation Commission.\n" + "Includes 711' of river frontage at the intersection of\n" + "Squannacook Rd. and Rt. 225 and small island opposite the\n" + "shore. Access to the island is by canoe.", "7 acres. Access off Fredonian St.\n" + "Municipal land managed by the Conservation Commission.\n" + "Shirley's urban wilderness. An open meadow and restored\n" + "millpond fed by Catacunemaug Brook on one side, and on the\n" + "other Shirley's largest broadleaf trees -- a magnificent stand\n" + "of ancient cherry and red oak.", "38.36 acres. Access off both sides of Garrison Rd.\n" + "Municipal land managed by the Conservation Commission.\n" + "No developed trails. A combination of open meadow and upland\n" + "forest. Given to the Town of Shirley in memory of Marion E. Rust\n" + "and George A. Rust. George Rust was president of the Appalachian\n" + "Mountain Club from 1926 to 1927.", "2.58 acres and 1200' of Nashua River Frontage.\n" + "South of Rt. 2A at the bridge to Ayer. Contains a mature oak\n" + "forest and a view of the local portion of the Oxbow National\n" + "Wildlife Refuge.", "3.74 acres. Access off Whitney Rd.\n" + "Municipal land managed by the Conservation Commission.\n" + "A small bordering forest without trails.", "2.18 acres.\n" + "Municipal land managed by the Conservation Commission.\n" + "Below Ice House dam; contiguous to MDF&W Nashua River frontage.", "97.97 acres. Access from Walker and Hazen Rds.\n" + "Municipal land managed by the Conservation Commission.\n" + "Mature mixed forest. Part of Walker and Morse Brook drainage.\n" + "Contiguous to Shirley Water District well protection land to\n" + "the south. Area is crisscrossed with established cart paths.\n" + "Acquired with a Self-Help Grant.", "95 acres.\n" + "Municipal land managed by the Conservation Commission.\n" + "Acquired in 1997 with a self-help grant form the Commonwealth.\n" + "This parcel integrates the Holden Road Conservation Area, Valley\n" + "Farm Conservation Land, and Birchwood Hills Open Space\n" + "Set Aside into a 370 acre protected reserve on the Town's\n" + "western border. Access is from Holden Conservation Area, Holden\n" + "Road, and Birchwood Hills.", "10.33 acres.\n" + "Gymnasiums and playfields managed by the Recreation Commission.\n" + "A complex of outdoor playing fields for structured recreational\n" + "programs. Two indoor gymnasiums, available for organized school\n" + "as well as recreation programs.", "4.43 acres.\n" + "Playfields managed by the Recreation Commission.\n" + "Fields adjoining the Center School, used for organized youth\n" + "sports.", "51 acres.\n" + "Managed by the Conservation Commission and the Recreation\n" + "Commission. It is the site of Town's swimming pool,\n" + "elaborate Bob Leathers outdoor playground and tennis courts.\n" + "The open space set aside for the Hill Lane development enlarged\n" + "the orignal 2.4 acre area to include a significant portion of\n" + "Benjamin Hill itself and surrounding open space.", "1.54 acres.\n" + "Village park containing most of Shirley's commemorative\n" + "statuary. Donated by a Shirley Shaker of that name.", "5.73 acres.\n" + "The Town's historic burial ground.", "2.43 acres.\n" + "Heart of the Town's historic district, used for various\n" + "community functions (Grange Fair, Hoedown, etc.) as well as\n" + "informal sports. Includes Colonial training ground.", "7.53 acres.", "47 acres.\n" + "Partially capped Town landfill; formerly part of Tophet Swamp.\n" + "Wetlands persist in over half the site. The landfill is due\n" + "to close in 1998; it could fill recreational needs in the future\n" + "as the permanent cover will need to be maintained as grass.\n" + "The wetlands area could be integrated into any conservation of\n" + "Tophet Swamp, Bow Brook and the Leatherboard Pond.", "53.26 acres. Open to the public.\n" + "Vacant town owned land. Forested, rolling upland with wetlands\n" + "interspersed. Adjacent to active gravel pit. It was reserved\n" + "for conservation purposes as part of the acquisition of the\n" + "Hunting Hill parcels (#42 and #43).", "8.86 acres.\n" + "Vacant Town owned land. Forested; very high perched ground water\n" + "table is characteristic of this area.", "28.09 acres.\n" + "This Town parcel could eventually be added to Water District\n" + "aquifer protection land.", "Originally part of the Ft. Devens Greenway, this area has been \n" + "transferred to the U.S. Fish and Wildlife Service for the\n" + "protection of the Nashua River as part of the Oxbow National\n" + "Wildlife Refuge extension project.", "143 acres.\n" + "The conservation restriction for this land is held by the\n" + "New England Forestry Foundation. These lands are managed\n" + "for sustainable tree harvest and as wildlife habitat. There\n" + "is an extensive trail system, open to the public, which joins\n" + "with the Town's Holden Rd. Conservation Area to offer a long\n" + "distance upland and marsh hiking opportunity from Holden Rd.\n" + "to Catacunemaug Brook.", "14.97 acres. No public access.\n" + "The conservation restriction for this land is held by the\n" + "Conservation Commission. This property is adjacent to Town land\n" + "at Spruce Swamp.", "81 acres. Access is from Holden Road and Center Rd.\n" + "The conservation restriction for this property is held by\n" + "Trustees of Reservations. It is the site of Paradise\n" + "Gorge on Spruce Swamp Brook, cranberry bogs and an extensive\n" + "well-maintained trail system open to the public.", "147.15 acres.\n" + "This private conservation trust has extensively conserved land\n" + "parallel to and east of Center Rd. between Hazen Rd. and The\n" + "Great Rd. (Rt. 2A). Contains wonderful plantings of perennial\n" + "and annual flowers, as well as views and footpaths in the\n" + "English landscaping tradition. In addition, there is a corridor\n" + "which runs to the top of Benjamin Hill and will connect with\n" + "land that the Town has been working to acquire. Open to the\n" + "public with permission. The Holdenwood Trust also owns two\n" + "isolated parcels, one on Mulpus Brook (GIS 1321) and the other\n" + "near Lake Shirley (GIS 1320).", "150 acres.\n" + "This private hunting and fishing club contains extensive\n" + "Squannacook River frontage, a fresh water estuary and\n" + "Squannacook Pond.", "133.45 acres.\n" + "Owned by the Shirley Water Department, an entity established\n" + "by Mass. General Laws operating as a private corporation.\n" + "This land was also originally part of Rich Tree Farm.\n" + "These lands protect the Patterson Rd. well field. Open to\n" + "the public for hiking and passive recreation.", "364.03 acres. There is access at Trap Swamp Brook on Squannacook\n" + "Rd., as well as through the Pumpkin Brook and Squannacook\n" + "Woods subdivisions.\n" + "Owned by the Commonwealth of Massachusetts.\n" + "Managed by the Division of Fisheries and Wildlife.\n" + "Together with land in Groton and Townsend, this Wildlife\n" + "Management Area totals almost 800 acres. It encompasses a\n" + "variety of ecosystems, from to upland and is generously laced\n" + "with well maintained trails.", "156 acres. Canoe access from Townsend Rd. Foot access from\n" + "Rt. 2A and end of Pamela Drive.\n" + "Owned by the Commonwealth of Massachusetts.\n" + "Managed by the Division of Fisheries and Wildlife.\n" + "Extensive marsh and upland protection on north and south sides\n" + "of Mulpus Brook at Lunenburg Town Line. Includes the south side\n" + "of Deacon Hill. A birder's paradise.", "15.21 acres. Access is from Lawton Rd.\n" + "Owned by the Commonwealth of Massachusetts.\n" + "Managed by the Division of Fisheries and Wildlife.\n" + "These two parcels abut Shirley Rod and Gun Club Land and contain\n" + "Squannacook River frontage. Very steep eskers and hen-dock groves.", "36.52 acres. Access along railroad tracks.\n" + "Owned by the Commonwealth of Massachusetts.\n" + "Managed by the Division of Fisheries and Wildlife.\n" + "A very interesting poplar succession forest interspersed with\n" + "small moss covered meadows.", "21 acres.\n" + "Owned by the Commonwealth of Massachusetts.\n" + "This correctional facility, with 236 acres in Shirley and\n" + "additional land in Lancaster, contains a protected Greenway\n" + "along the Nashua River from the Devens boundary to Rt. 2.\n" + "The protection is in the form of agreements with the towns of\n" + "Shirley and Lancaster, as well as the Nashua River Watershed\n" + "Association. There is public access to the Greenway, but\n" + "permission must be first obtained from the Superintendent's\n" + "office. Agricultural fields which historically have produced\n" + "food for the Massachusetts prison system, as well as what remains\n" + "of Shirley Shaker Village are also at MCI. The Shaker Village\n" + "has received Historical Landmark designation. Hopefully the\n" + "Commonwealth will honor its commitment to preserve it, although\n" + "parts are in alarming disrepair. The Shaker sites are open to\n" + "guided tours by the Shirley Historical Society.", "13.63 acres. Access via a footpath within the subdivision.\n" + "Deeded to MDF&W as part of the Squannacook Wildlife\n" + "Management Area.", "17.8 acres. No public access.\n" + "Contains well field for this project.", "10 acres. No public access.\n" + "Protects Mulpus Brook and wetlands associated with Squannacook\n" + "Hill drainage.", "75 acres. Public access is anticipated.\n" + "An extensive trail system is planned which will link with Holden\n" + "Road Conservation Area and Valley Farm trails.", "Public access through Squannacook Woods.\n" + "Protects the Squannacook River shore line at Vose Pond.\n" + "Now part of MDF&W Squannacook Wildlife Management Area.", "30.88 acres. Open to the public.\n" + "Owned by the Town of Shirley. Managed along with the other\n" + "Hunting Hill parcels (#22, #43 and land in Lunenburg) in a\n" + "cooperative effort by the Shirley and Lunenburg Conservation\n" + "Commissions and the Massachusetts Department of Fisheries &\n" + "Wildlife (MDF&W). Purchased in 1998 with the help of numerous\n" + "private contributions and Self-Help Grant #7 from the\n" + "Massachusetts Division of Conservation Services through a\n" + "coordinated effort of town boards in Shirley and Lunenburg,\n" + "the Cook family, MDF&W and New England Forestry Foundation.\n" + "A land use and management plan is currently being drafted.", "134 acres. Open to the public.\n" + "A DF&W Wildlife Management Area. Managed in cooperation with\n" + "Shirley and Lunenburg.", "136 acres.\n" + "Owned by the Town of Shirley.\n" + "Managed by the Shirley Conservation Commission.\n" + "Acquired in 1999-2000 from the estate of William P. Haines.\n" + "Crossing Townsend Road and connecting to Spaulding Road, these\n" + "parcels provide 80% of a connection between the 900+ protected\n" + "acres on the Squannacook and the 525 acre Hunting Hill area.\n" + "A cellar hole on the site is all that remains of the homestead\n" + "of William Bennett, one of the signers of the 1747 petition to\n" + "separate the land west of the Squannacook from Groton to create Shirley.\n" + "A land use and management plan is currently being drafted.", "73.24 acres.\n" + "Owned by the Town of Shirley.\n" + "Managed by the Shirley Conservation Commission.\n" + "It was acquired by the town of Shirley in 2003\n" + "with the help of a state grant. The property is\n" + "maintained as active agricultural open space, with\n" + "haying occurring every summer. The fields and trails\n" + "are open to the public, and educational talks,\n" + "workshops and events occur regularly.", "16.03 acres.\n" + "Owned by the Town of Shirley.\n" + "Managed by the Shirley Conservation Commission.\n" + "Acquired in 2000 from Wilfred Dow.\n" + "Access off Groton Rd./Rt. 225.\n" + "The southeast gateway to Hunting Hill.", }; }