Changeset 5956
- Timestamp:
- Jan 14, 2016 9:29:56 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
- 24 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/geomap (added) merged: 5928,5949,5951,5954-5955
- Property svn:mergeinfo changed
-
trunk/gui/scripts/Makefile.in
r5331 r5956 61 61 $(srcdir)/gauge.tcl \ 62 62 $(srcdir)/getopts.tcl \ 63 $(srcdir)/geomapdataprovider.tcl \ 64 $(srcdir)/geomapdataprovidercolorramp.tcl \ 65 $(srcdir)/geomapdataprovidergdal.tcl \ 66 $(srcdir)/geomapdataproviderogr.tcl \ 67 $(srcdir)/geomapdataprovidertfs.tcl \ 68 $(srcdir)/geomapdataprovidertms.tcl \ 69 $(srcdir)/geomapdataproviderwfs.tcl \ 70 $(srcdir)/geomapdataproviderwms.tcl \ 71 $(srcdir)/geomapdataproviderxyz.tcl \ 72 $(srcdir)/geomaplayer.tcl \ 73 $(srcdir)/geomaplayerimage.tcl \ 63 74 $(srcdir)/grab.tcl \ 64 75 $(srcdir)/groupentry.tcl \ -
trunk/gui/scripts/map.tcl
r5948 r5956 30 30 } 31 31 32 public method addLayer { type name paramArray driver driverParamArray {stylesheet {}} {script {}} {selectors {}} }33 32 public method addViewpoint { name props } 34 public method deleteLayer { layerName }35 33 public method earthfile {} 36 public method hasLayer { layerName }37 34 public method hints { args } 38 35 public method isGeocentric {} … … 40 37 return $_isValid; 41 38 } 42 public method layer { layerName}39 public method layer { option args } 43 40 public method layers {} 44 41 public method selectors { layerName } … … 58 55 protected method Parse { xmlobj path } 59 56 57 private method AddLayer { args } 58 private method DeleteLayer { layerName } 59 private method GetLayerNames {} 60 private method GetLayerSettings { layerName } 61 62 60 63 private variable _tree ""; # Tree of information about the map. 61 64 private variable _isValid 0; 65 private common _nextLayer 0; # Counter used to generate unique 66 # layer names. 62 67 private common _nextSelector 0; 63 68 private common _nextViewpoint 0; # Counter used to generate unique … … 147 152 foreach layer [$layers children -type layer] { 148 153 # Unique identifier for layer. 149 set name [$map element -as id "layers.$layer"] 150 if {[hasLayer $name]} { 151 puts stderr "ERROR: Duplicate layer ID '$name', skipping" 152 continue 153 } 154 set name "layer[incr _nextLayer]" 154 155 set child [$_tree insert $parent -label $name] 155 156 set layerType [$layers get $layer.type] … … 157 158 error "invalid layer type \"$layerType\": should be one of [array names _layerTypes]" 158 159 } 159 $_tree set $child "name" $ name160 $_tree set $child "name" $layer 160 161 $_tree set $child "type" $layerType 161 162 foreach key { label description attribution profile srs verticalDatum } { … … 456 457 } 457 458 458 itcl::body Rappture::Map::addLayer { type name paramArray driver driverParamArray {stylesheet {}} {script {}} {selectors {}} } {459 set id "$name"460 if {[hasLayer $id]} {461 error "Layer '$id' already exists"462 }463 set parent [$_tree findchild root "layers"]464 set child [$_tree insert $parent -label $id]465 $_tree set $child "name" $name466 $_tree set $child "type" $type467 array set params $paramArray468 foreach key { label description attribution profile srs verticalDatum } {469 if {[info exists params($key)]} {470 $_tree set $child $key $params($key)471 } else {472 $_tree set $child $key ""473 }474 }475 # Common settings (for all layer types) with defaults476 foreach { key defval } { visible 1 cache 1 } {477 $_tree set $child $key $defval478 if {[info exists params($key)]} {479 set val $params($key)480 if {$val != ""} {481 $_tree set $child $key $val482 }483 }484 }485 # These are settings for which there should be no default486 # We want to know if they have been set by the user or not487 # Not all layer types use these488 foreach key { coverage opacity content priority style } {489 if {[info exists params($key)]} {490 set val $params($key)491 if {$val != ""} {492 $_tree set $child $key $val493 }494 }495 }496 if {$stylesheet != ""} {497 set val $stylesheet498 # Normalize whitespace499 regsub -all "\[ \t\r\n\]+" [string trim $val] " " val500 $_tree set $child stylesheet $val501 }502 if {$script != ""} {503 regsub -all "\[\r\n\]+" [string trim $script] " " script504 $_tree set $child script $script505 }506 if {$selectors != ""} {507 set sparent [$_tree insert $child -label "selectors"]508 foreach selectorItem $selectors {509 array set selector $selectorItem510 set id "selector[incr _nextSelector]"511 set snode [$_tree insert $sparent -label $id]512 foreach key { name style styleExpression query queryBounds queryOrderBy } {513 if {[info exists selector($key)]} {514 set val $selector($key)515 if {$val != ""} {516 $_tree set $snode $key $val517 }518 }519 }520 }521 }522 $_tree set $child "driver" $driver523 switch -- $driver {524 "arcgis" {525 array set params $driverParamArray526 foreach key { url token format layers } {527 if {[info exists params($key)]} {528 set value $params($key)529 $_tree set $child "arcgis.$key" $value530 }531 }532 }533 "colorramp" {534 array set params $driverParamArray535 $_tree set $child "colorramp.elevdriver" "gdal"536 $_tree set $child "colorramp.colormap" "0 0 0 0 1 1 1 1 1 1"537 if {[info exists params(colormap)]} {538 set cmap $params(colormap)539 if {$cmap != ""} {540 # Normalize whitespace541 regsub -all "\[ \t\r\n\]+" [string trim $cmap] " " cmap542 $_tree set $child "colorramp.colormap" $cmap543 }544 }545 foreach key { url elevdriver } {546 if {[info exists params($key)]} {547 set value $params($key)548 if {$value != ""} {549 $_tree set $child "colorramp.$key" $value550 }551 }552 }553 }554 "gdal" {555 array set params $driverParamArray556 foreach key { url } {557 set value $params($key)558 $_tree set $child "gdal.$key" $value559 }560 }561 "ogr" {562 array set params $driverParamArray563 foreach key { url } {564 set value $params($key)565 $_tree set $child "ogr.$key" $value566 }567 foreach key { connection geometry geometry_url layer ogr_driver build_spatial_index } {568 if {[info exists params($key)]} {569 set value $params($key)570 if { $value != "" } {571 $_tree set $child "ogr.$key" $value572 }573 }574 }575 }576 "tfs" {577 foreach key { url format } {578 if {[info exists params($key)]} {579 set value $params($key)580 $_tree set $child "tfs.$key" $value581 }582 }583 }584 "tms" {585 foreach key { url tmsType format } {586 if {[info exists params($key)]} {587 set value $params($key)588 $_tree set $child "tms.$key" $value589 }590 }591 }592 "wcs" {593 foreach key { url identifier format elevationUnit rangeSubset } {594 if {[info exists params($key)]} {595 set value $params($key)596 $_tree set $child "wcs.$key" $value597 }598 }599 }600 "wfs" {601 foreach key { url typename format maxfeatures requestBuffer } {602 if {[info exists params($key)]} {603 set value $params($key)604 $_tree set $child "wfs.$key" $value605 }606 }607 }608 "wms" {609 foreach key { url layers format transparent } {610 if {[info exists params($key)]} {611 set value $params($key)612 $_tree set $child "wms.$key" $value613 }614 }615 }616 "xyz" {617 foreach key { url } {618 if {[info exists params($key)]} {619 set value $params($key)620 $_tree set $child "xyz.$key" $value621 }622 }623 }624 }625 return $id626 }627 628 itcl::body Rappture::Map::deleteLayer { layerName } {629 set id [$_tree findchild root->"layers" $layerName]630 if { $id < 0 } {631 error "unknown layer \"$layerName\""632 }633 $_tree delete $id634 }635 636 # ----------------------------------------------------------------------637 # USAGE: layers638 #639 # Returns a list of IDs for the layers in the map640 # ----------------------------------------------------------------------641 itcl::body Rappture::Map::layers {} {642 set list {}643 foreach node [$_tree children root->"layers"] {644 lappend list [$_tree label $node]645 }646 return $list647 }648 649 459 # ---------------------------------------------------------------------- 650 460 # USAGE: viewpoints … … 663 473 664 474 # ---------------------------------------------------------------------- 475 # USAGE: AddLayer -format <format> 476 # 477 # Associate a new layer to the map 478 # ---------------------------------------------------------------------- 479 itcl::body Rappture::Map::AddLayer { args } { 480 set layerName "" 481 set valids "-format" 482 set format "blt_tree" 483 484 set layerObj [lrange $args end end] 485 set args [lrange $args 0 end-1] 486 487 while {[llength $args] > 0} { 488 set flag [lindex $args 0] 489 switch -- $flag { 490 "-format" { 491 if {[llength $args] > 1} { 492 set format [lindex $args 1] 493 set args [lrange $args 2 end] 494 } else { 495 error "wrong number args: should be ?-format <format>?" 496 } 497 } 498 default { 499 error "invalid option \"$flag\": should be one of $valids" 500 } 501 } 502 } 503 504 set valids "blt_tree" 505 506 switch -- $format { 507 "blt_tree" { 508 # check if a layer by the same name already exists 509 set layerName "layer[incr _nextLayer]" 510 if {[$_tree findchild root->"layers" $layerName] != -1} { 511 error "key error \"$layerName\": layer name exists" 512 } 513 # copy the incomming layer data into our map object 514 set id [$layerObj copy root $_tree root->"layers"] 515 # give the layer a searchable layer name 516 $_tree label $id $layerName 517 } 518 default { 519 error "bad format \"$format\": should be one of $valids" 520 } 521 } 522 523 return $layerName 524 } 525 526 # ---------------------------------------------------------------------- 527 # USAGE: DeleteLayer <layerName> 528 # 529 # Remove a layer from the map 530 # ---------------------------------------------------------------------- 531 itcl::body Rappture::Map::DeleteLayer { layerName } { 532 set id [$_tree findchild root->"layers" $layerName] 533 if {$id <= 0} { 534 # layer not found 535 error "invalid layer \"$layerName\": should be one of [GetLayerNames]" 536 } 537 # delete the layer 538 $_tree delete $id 539 } 540 541 542 # ---------------------------------------------------------------------- 543 # USAGE: GetLayerNames 544 # USAGE: layers 545 # 546 # Returns a list of IDs for the layers in the map 547 # ---------------------------------------------------------------------- 548 itcl::body Rappture::Map::GetLayerNames {} { 549 set list {} 550 foreach node [$_tree children root->"layers"] { 551 lappend list [$_tree label $node] 552 } 553 return $list 554 } 555 556 # ---------------------------------------------------------------------- 557 # USAGE: GetLayerSettings <layerName> 665 558 # USAGE: layer <layerName> 666 559 # 667 # Returns a n arrayof settings for the named layer668 # ---------------------------------------------------------------------- 669 itcl::body Rappture::Map:: layer{ layerName } {560 # Returns a list of settings for the named layer 561 # ---------------------------------------------------------------------- 562 itcl::body Rappture::Map::GetLayerSettings { layerName } { 670 563 set id [$_tree findchild root->"layers" $layerName] 671 564 if { $id < 0 } { … … 675 568 } 676 569 677 itcl::body Rappture::Map::hasLayer { layerName } { 678 set id [$_tree findchild root->"layers" $layerName] 679 if { $id < 0 } { 680 return 0 681 } else { 682 return 1 683 } 684 } 570 # ---------------------------------------------------------------------- 571 # USAGE: layer 572 # 573 # This public method is called by clients using this widget to manage 574 # layers in the map. 575 # 576 # layer add ?-type type? layerData 577 # layer delete layerName 578 # layer names 579 # layer settings layerName 580 # 581 itcl::body Rappture::Map::layer {option args} { 582 set result "" 583 switch -- $option { 584 "add" { 585 set result [eval AddLayer $args] 586 } 587 "delete" { 588 set result [eval DeleteLayer $args] 589 } 590 "names" { 591 set result [GetLayerNames] 592 } 593 "settings" { 594 set result [GetLayerSettings $args] 595 } 596 default { 597 error "unknown layer option \"$option\"" 598 } 599 } 600 return $result 601 } 602 685 603 686 604 # ---------------------------------------------------------------------- -
trunk/gui/scripts/mapviewer.tcl
r5950 r5956 53 53 public method camera {option args} 54 54 public method delete {args} 55 public method remove {args} 55 56 public method disconnect {} 56 57 public method download {option args} … … 63 64 public method select {option {args ""}} 64 65 public method setSelectCallback {cmd} 66 67 public method send { cmd } 65 68 66 69 private method KeyPress { key } … … 539 542 } 540 543 544 # 545 # send -- 546 # 547 # Test method for dsk 548 # 549 # send [list my command] 550 # 551 itcl::body Rappture::MapViewer::send {cmd} { 552 puts "sending: \"$cmd\"" 553 SendCmd $cmd 554 } 555 541 556 itcl::body Rappture::MapViewer::DoResize {} { 542 557 set sendResize 1 … … 697 712 } 698 713 # When a map is marked deleted, we hide its layers. 699 foreach layer [$dataobj layer s] {714 foreach layer [$dataobj layer names] { 700 715 SendCmd "map layer visible 0 $layer" 701 716 set _visibility($layer) 0 717 } 718 # Remove it from the dataobj list. 719 set _dlist [lreplace $_dlist $pos $pos] 720 array unset _obj2ovride $dataobj-* 721 array unset _settings $dataobj-* 722 set changed 1 723 } 724 # If anything changed, then rebuild the plot 725 if { $changed } { 726 $_dispatcher event -idle !rebuild 727 } 728 } 729 730 # ---------------------------------------------------------------------- 731 # USAGE: remove ?<dataobj1> <dataobj2> ...? 732 # 733 # Clients use this to permanantly remove a dataobj from the client 734 # and the server. If no dataobjs are specified, then all dataobjs 735 # are removed. Unlike the delete method, dataobjects are permenantly 736 # removed from both the client and the server and it is safe to add 737 # them again without conflict in layer names. 738 # ---------------------------------------------------------------------- 739 itcl::body Rappture::MapViewer::remove {args} { 740 DebugTrace "Enter" 741 if { [llength $args] == 0} { 742 set args $_dlist 743 } 744 # Remove all specified dataobjs 745 set changed 0 746 foreach dataobj $args { 747 set pos [lsearch -exact $_dlist $dataobj] 748 if { $pos < 0 } { 749 continue; # Don't know anything about it. 750 } 751 # Remove the layers from the client and server. 752 foreach layer [$dataobj layer names] { 753 SendCmd "map layer delete $layer" 754 if { [info exists _layers($layer)] } { 755 array unset _layers $layer 756 } 757 if { [info exists _opacity($layer)] } { 758 array unset _opacity $layer 759 } 760 if { [info exists _visibility($layer)] } { 761 array unset _visibility $layer 762 } 702 763 } 703 764 # Remove it from the dataobj list. … … 855 916 } 856 917 } 857 foreach layer [$dataobj layer s] {918 foreach layer [$dataobj layer names] { 858 919 if { [$dataobj type $layer] == "elevation" } { 859 920 set _haveTerrain 1 … … 1300 1361 set _first $dataobj 1301 1362 } 1302 foreach layer [$dataobj layer s] {1363 foreach layer [$dataobj layer names] { 1303 1364 array unset info 1304 array set info [$dataobj layer $layer]1365 array set info [$dataobj layer settings $layer] 1305 1366 if { ![info exists _layers($layer)] } { 1306 1367 if { $_reportClientInfo } { … … 1472 1533 set rlist "" 1473 1534 foreach dataobj $dlist { 1474 foreach layer [$dataobj layer s] {1535 foreach layer [$dataobj layer names] { 1475 1536 if { [info exists _layers($layer)] && $_layers($layer) } { 1476 1537 lappend rlist $layer … … 2406 2467 2407 2468 itcl::body Rappture::MapViewer::SetLayerStyle { dataobj layer } { 2408 array set info [$dataobj layer $layer]2469 array set info [$dataobj layer settings $layer] 2409 2470 if { [info exists info(visible)] && 2410 2471 !$info(visible) } { … … 2851 2912 set imgIdx 0 2852 2913 foreach dataobj [get -objects] { 2853 foreach layer [$dataobj layer s] {2914 foreach layer [$dataobj layer names] { 2854 2915 array unset info 2855 array set info [$dataobj layer $layer]2916 array set info [$dataobj layer settings $layer] 2856 2917 checkbutton $f.${layer}_visible \ 2857 2918 -text $info(label) \ … … 2995 3056 2996 3057 foreach dataobj [get -objects] { 2997 foreach layer [$dataobj layer s] {3058 foreach layer [$dataobj layer names] { 2998 3059 set _layers($layer) 1 2999 3060 array unset info 3000 array set info [$dataobj layer $layer]3061 array set info [$dataobj layer settings $layer] 3001 3062 switch -- $info(type) { 3002 3063 "image" {
Note: See TracChangeset
for help on using the changeset viewer.