[mapserver-users] perl - zooming, panning, and such
Steve Lime
steve.lime@dnr.state.mn.us
Fri, 19 Apr 2002 13:36:55 -0500
This is a MIME message. If you are reading this text, you may want to
consider changing to a mail reader or gateway that understands how to
properly handle MIME multipart messages.
--=_3865C9CF.BBDAB143
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
Here's a 3.5 version of the mapquakes.pl script. It shows how to do a =
perl-based pan/zoom interface. Hope it helps.
Steve
Stephen Lime
Data & Applications Manager
Minnesota DNR
500 Lafayette Road
St. Paul, MN 55155
651-297-2937
>>> Puneet Kishor <pkishor@GeoAnalytics.com> 04/19/02 01:23PM >>>
Kent,
here's my conceptual $0.02.
> > second, i need guidance on getting a pan-and-zoom interface=20
> to work. i've
> > toyed with porting the php example from the online docs to=20
> perl and also
> > with a recent post from lowell, but to no avail. methinks=20
> most of my
> > problem is because i don't really understand extents and what they
> > represent well enough to manipulate them the way i need
1. everytime you draw the map, you need to set the mapextent.=20
2. if you are doing this for the very first time, you would usually start
with the maximum extent of your map. otherwise, you would start with the
current extent of the map.
3. so, let's reiterate... the first time is easy because you start with =
the
maxextents. at that point in time, you send the current extent (which
happens to be maxextents right now) to the client. you usually do that as
hidden form fields.
4. now the map is sitting on the client. the user chooses to zoomin. the =
act
of zooming in sends back to the server the point-of-click of zoomin, a
(usually) preset zoomfactor, and the current extents that were in the =
hidden
fields.
5. back at the server, you now start with these current extents and apply
the zoomfactor to get the new current extents. and the process in #1 above
restarts.
did this make sense?
pk/
--=_3865C9CF.BBDAB143
Content-Type: application/octet-stream; name="mapquakes.pl"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="mapquakes.pl"
IyEvdXNyL2Jpbi9wZXJsDQoNCnVzZSBDR0kgcXcoOnN0YW5kYXJkIDpodG1sIGVzY2FwZSk7DQp1
c2UgTFdQOjpTaW1wbGU7DQp1c2UgbWFwc2NyaXB0Ow0KDQojDQojIGRlZmF1bHRzLCBtYWtlIGFu
eSBuZWNlc3NhcnkgY2hhbmdlcyBoZXJlLi4uDQojDQokcXVha2VfbWFwID0gJy9ob21lL3NkbGlt
ZS9tYXBxdWFrZXMvcXVha2VzLm1hcCc7DQokcXVha2Vfc291cmNlID0gJ2Z0cDovL2dodGZ0cC5j
ci51c2dzLmdvdi9wdWIvcXVha2UnOw0KDQpAcXVha2VzID0gJyc7DQokcXVha2VfZGF0YSA9ICcn
Ow0KJHF1YWtlX3RpbWVzdGFtcCA9ICcnOw0KDQokaW1hZ2VfcGF0aCA9ICcvdXNyL2xvY2FsL2Fw
YWNoZS9odGRvY3MvdG1wLyc7DQokaW1hZ2VfdmlydHVhbF9wYXRoID0gJy90bXAvJzsNCiRpbWFn
ZV9pZCA9ICQkIC4gdGltZSgpIC4gIi5naWYiOw0KJG1hcCA9ICcnOw0KDQokem9vbV9kaXJlY3Rp
b24gPSAwOyANCiR6b29tX3NpemUgPSAyOw0KDQpzdWIgZ2V0X3F1YWtlcyB7ICAgIA0KICAgICRx
dWFrZV9kYXRhID0gZ2V0ICRxdWFrZV9zb3VyY2Ugb3IgZGllICdnZXQgZmFpbGVkJzsNCg0KICAg
IG15ICRpID0gMDsNCiAgICBteSAkaXNfcXVha2UgPSAwOw0KDQogICAgZm9yZWFjaCAoc3BsaXQo
L14vLCAkcXVha2VfZGF0YSkpIHsgICAgDQoJJHF1YWtlX3RpbWVzdGFtcCA9ICRfIGlmIC9eVXBk
YXRlZCBhcyBvZi87IA0KCQ0KCWlmKCRpc19xdWFrZSkgew0KCSAgICAkcXVha2VzWyRpXXtsYXR9
ID0gc3Vic3RyKCRfLCAxOCwgNyk7DQoJICAgICRxdWFrZXNbJGlde2xvbn0gPSBzdWJzdHIoJF8s
IDI2LCA3KTsNCgkgICAgJHF1YWtlc1skaV17bWFnbml0dWRlfSA9IHN1YnN0cigkXywgNDAsIDMp
Ow0KCSAgICANCgkgICAgaWYoJHF1YWtlc1skaV17bG9ufSA9fiAvRSQvKSB7DQoJCSRxdWFrZXNb
JGlde2xvbn0gPX4gcy9FLy87DQoJICAgIH0gZWxzZSB7DQoJCSRxdWFrZXNbJGlde2xvbn0gPX4g
cy9XLy87DQoJCSRxdWFrZXNbJGlde2xvbn0gKj0gLTE7DQoJICAgIH0NCgkgICAgDQoJICAgIGlm
KCRxdWFrZXNbJGlde2xhdH0gPX4gL04kLykgew0KCQkkcXVha2VzWyRpXXtsYXR9ID1+IHMvTi8v
Ow0KCSAgICB9IGVsc2Ugew0KCQkkcXVha2VzWyRpXXtsYXR9ID1+IHMvUy8vOw0KCQkkcXVha2Vz
WyRpXXtsYXR9ICo9IC0xOw0KCSAgICB9DQoNCgkgICAgJGkrKzsNCgl9DQoNCgkkaXNfcXVha2Ug
PSAxIGlmIC9eeXkvOw0KICAgIH0NCg0KICAgIHJldHVybjsNCn0NCg0Kc3ViIHNldF9leHRlbnQo
KSB7DQogICAgbXkgJHpvb20sIEBpbWdleHQ7DQogICAgbXkgJHgsICR5Ow0KICAgIG15ICRjZWxs
c2l6ZXgsICRjZWxsc2l6ZXk7ICANCg0KICAgIGlmKCRjZ2ktPnBhcmFtKCdpbWdleHQnKSkgeyAj
IGlmIGFuIGludGVyYWN0aXZlIGludGVyZmFjZSB0aGVuIGNhbGN1bGF0ZSBhIG5ldyBleHRlbnQN
CglAaW1nZXh0ID0gc3BsaXQoJyAnLCAkY2dpLT5wYXJhbSgnaW1nZXh0JykpOw0KCSR4ID0gJGNn
aS0+cGFyYW0oJ2ltZy54Jyk7DQoJJHkgPSAkY2dpLT5wYXJhbSgnaW1nLnknKTsNCgkkem9vbV9z
aXplID0gJGNnaS0+cGFyYW0oJ3pvb21zaXplJyk7DQoJJHpvb21fZGlyZWN0aW9uID0gJGNnaS0+
cGFyYW0oJ3pvb21kaXInKTsNCg0KCWlmKCR6b29tX2RpcmVjdGlvbiA9PSAwKSB7ICMgcGFuDQoJ
ICAgICR6b29tID0gMTsNCgl9IGVsc2UgeyAjIGluIG9yIG91dA0KCSAgICAkem9vbSA9ICR6b29t
X3NpemUqJHpvb21fZGlyZWN0aW9uOw0KCSAgICAkem9vbSA9IDEuMC9hYnMoJHpvb20pIGlmICR6
b29tIDwgMDsNCgl9DQoNCgkkY3ggPSAoJGltZ2V4dFsyXS0kaW1nZXh0WzBdKS8oJG1hcC0+e3dp
ZHRofSk7ICMgY2FsY3VsYXRlIGNlbGxzaXplIGluIHggYW5kIHkNCgkkY3kgPSAoJGltZ2V4dFsz
XS0kaW1nZXh0WzFdKS8oJG1hcC0+e2hlaWdodH0pOw0KDQoJJHggPSAkaW1nZXh0WzBdICsgJGN4
KiR4OyAjIGNoYW5nZSB4LHkgZnJvbSBpbWFnZSB0byBtYXAgY29vcmRpbmF0ZXMsIG9mZnNldCBm
cm9tIFVMIGNvcm5lciBvZiBwcmV2aW91cyBpbWFnZQ0KCSR5ID0gJGltZ2V4dFszXSAtICRjeSok
eTsNCg0KCSRtYXAtPntleHRlbnR9LT57bWlueH0gPSAkeCAtIC41KigoJGltZ2V4dFsyXSAtICRp
bWdleHRbMF0pLyR6b29tKTsgIyBjYWxjdWxhdGUgbmV3IGV4dGVudA0KCSRtYXAtPntleHRlbnR9
LT57bWlueX0gPSAkeSAtIC41KigoJGltZ2V4dFszXSAtICRpbWdleHRbMV0pLyR6b29tKTsNCgkk
bWFwLT57ZXh0ZW50fS0+e21heHh9ID0gJHggKyAuNSooKCRpbWdleHRbMl0gLSAkaW1nZXh0WzBd
KS8kem9vbSk7DQoJJG1hcC0+e2V4dGVudH0tPnttYXh5fSA9ICR5ICsgLjUqKCgkaW1nZXh0WzNd
IC0gJGltZ2V4dFsxXSkvJHpvb20pOw0KICAgfQ0KfQ0KDQpzdWIgcmVuZGVyX3F1YWtlcyB7DQog
ICAgZGllICRtYXBzY3JpcHQ6Om1zX2Vycm9yLT57bWVzc2FnZX0gdW5sZXNzICRtYXAgPSBuZXcg
bWFwT2JqKCRxdWFrZV9tYXApOw0KICAgIA0KICAgICZzZXRfZXh0ZW50KCk7DQoNCiAgICBteSAk
aW1nID0gJG1hcC0+cHJlcGFyZUltYWdlKCk7DQoNCiAgICBteSAkcG9pbnQgPSBuZXcgcG9pbnRP
YmooKTsNCiAgICANCiAgICBteSAkbGF5ZXIgPSAkbWFwLT5nZXRMYXllckJ5TmFtZSgncmVsaWVm
Jyk7DQogICAgJGxheWVyLT5kcmF3KCRtYXAsICRpbWcpOyAjIGRyYXcgYmFzZW1hcA0KDQogICAg
JGxheWVyID0gJG1hcC0+Z2V0TGF5ZXJCeU5hbWUoJ3F1YWtlcycpOw0KICAgIG15ICRjbGFzcyA9
ICRsYXllci0+Z2V0Q2xhc3MoMCk7DQogICAgbXkgJGkgPSAxOyAjIHF1YWtlIGNvdW50ZXINCiAg
ICBmb3JlYWNoIG15ICRxIChAcXVha2VzKSB7DQoJJGNsYXNzLT57c2l6ZX0gPSBpbnQoJHEtPntt
YWduaXR1ZGV9KjIpOw0KCSRjbGFzcy0+e21heHNpemV9ID0gJGNsYXNzLT57bWluc2l6ZX0gPSAk
Y2xhc3MtPntzaXplfTsgIyBkb24ndCB3YW50IHRvIHNjYWxlDQoNCgkkcG9pbnQtPnt4fSA9ICRx
LT57bG9ufTsNCgkkcG9pbnQtPnt5fSA9ICRxLT57bGF0fTsNCgkkcG9pbnQtPmRyYXcoJG1hcCwg
JGxheWVyLCAkaW1nLCB1bmRlZiwgIiRpIik7DQoJJGkrKzsNCiAgICB9DQoNCiAgICAjJGxheWVy
ID0gJG1hcC0+Z2V0TGF5ZXJCeU5hbWUoJ3RpbWVzdGFtcCcpOyAjIGFkZCB0aW1lc3RhbXANCiAg
ICAjJGxheWVyLT57c3RhdHVzfSA9IDE7ICMgdHVybiB0aGUgbGF5ZXIgb24NCiAgICAjJGNsYXNz
ID0gJGxheWVyLT5nZXRDbGFzcygwKTsNCiAgICAjJGNsYXNzLT5zZXRUZXh0KCRxdWFrZV90aW1l
c3RhbXApOw0KICAgICMkbGF5ZXItPmRyYXcoJG1hcCwgJGltZyk7DQogICAgDQogICAgJG1hcC0+
ZHJhd0xhYmVsQ2FjaGUoJGltZyk7DQogICAgbWFwc2NyaXB0Ojptc1NhdmVJbWFnZSgkaW1nLCAk
aW1hZ2VfcGF0aCAuICRpbWFnZV9pZCwgJG1hcC0+e2ltYWdldHlwZX0sICRtYXAtPnt0cmFuc3Bh
cmVudH0sICRtYXAtPntpbnRlcmxhY2V9LCAkbWFwLT57aW1hZ2VxdWFsaXR5fSk7DQoNCiAgICBy
ZXR1cm47DQp9DQoNCiMgaGVyZSBpcyB0aGUgbWFpbiBwcm9ncmFtDQokY2dpID0gbmV3IENHSTsN
Cg0KJmdldF9xdWFrZXMoKTsNCiZyZW5kZXJfcXVha2VzKCk7DQoNCiMgbm93IHRoZSBodG1sDQoN
CnByaW50IGhlYWRlcigpOw0KcHJpbnQgc3RhcnRfaHRtbCgtdGl0bGU9PidNYXBTZXJ2ZXIgVGVz
dCBTdWl0ZSAtIEVhcnRocXVha2UgTWFwcGVyJywgLWJnY29sb3I9PiIjZmZmZmZmIik7DQoNCnBy
aW50ICI8IS0tICIgLm1hcHNjcmlwdDo6bXNHZXRWZXJzaW9uKCkuICIgLS0+IjsNCnByaW50ICI8
IS0tICIgLiRtYXAtPntzY2FsZX0uICIgLS0+IjsNCg0KcHJpbnQgIjxjZW50ZXI+PHRhYmxlIHdp
ZHRoPVwiNjAwXCI+PHRyPjx0ZD4iOw0KDQpwcmludCAiPGZvbnQgc2l6ZT1cIisyXCIgZmFjZT1c
ImFyaWFsLGhlbHZldGljYVwiPjxiPk1hcFNjcmlwdCAtIEVhcnRocXVha2UgTWFwcGVyPC9iPjwv
Zm9udD48cD4iOw0KDQpwcmludCAiVGhpcyBpcyBhIHNpbXBsZSBvZiBleGFtcGxlIG9mIHVzaW5n
IE1hcFNjcmlwdC4gTmVhciByZWFsLXRpbWUgZWFydGhxdWFrZSBkYXRhIGlzIHJldHJpZXZlZCAi
Ow0KcHJpbnQgImZyb20gdGhlIFVTR1Mgd2ViIHNlcnZlcnMuIFRoZSByZXN1bHRpbmcgaW5mb3Jt
YXRpb24gaXMgcGFyc2VkIHVzaW5nIHBlcmwgYW5kIGVhY2ggIjsNCnByaW50ICJxdWFrZSBpcyBw
bG90dGVkIG9uIHRvcCBvZiBhIGJhc2VtYXAuIFRoZSBzaXplIG9mIHRoZSBtYXJrZXIgaW5kaWNh
dGVzIHF1YWtlIG1hZ25pdHVkZS4gIjsNCnByaW50ICJNYW55IG90aGVyIHBvc3NpYmxlIGVuaGFu
Y2VtZW50cy4gIElmIHRoZSBpbnRlcmZhY2Ugc2VlbXMgYSBiaXQgc2xvdyBpdCdzIGJlY2F1c2Ug
dGhlICI7DQpwcmludCAiVVNHUyBzZXJ2ZXJzIGNhbiBiZSBkaWZmaWN1bHQgdG8gcmVhY2gtIHRo
ZSBwZXJpbHMgb2YgcmVtb3RlIGRhdGEuIEhlcmUncyB0aGUgIjsNCnByaW50ICI8YSBocmVmPVwi
L21hcHNlcnZlcl9kZW1vcy90ZXN0cy9wZXJsL3F1YWtlcy9tYXBxdWFrZXMucGxcIj5zb3VyY2U8
L2E+IGNvZGUuPHA+IjsNCg0KcHJpbnQgIjxmb3JtIG5hbWU9XCJtYXBxdWFrZXNcIiBhY3Rpb249
XCIvY2dpLWJpbi9tYXBxdWFrZXMucGxcIiBtZXRob2Q9XCJnZXRcIj4iOw0KcHJpbnQgIjxjZW50
ZXI+IjsNCnByaW50ICI8aW5wdXQgYm9yZGVyPVwiMFwiIHR5cGU9XCJpbWFnZVwiIG5hbWU9XCJp
bWdcIiBzcmM9XCIiLiAkaW1hZ2VfdmlydHVhbF9wYXRoIC4gJGltYWdlX2lkIC4iXCI+PGJyPiI7
DQpwcmludCAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiaW1nZXh0XCIgdmFsdWU9XCIi
IC4gam9pbignICcsICRtYXAtPntleHRlbnR9LT57bWlueH0sJG1hcC0+e2V4dGVudH0tPnttaW55
fSwkbWFwLT57ZXh0ZW50fS0+e21heHh9LCRtYXAtPntleHRlbnR9LT57bWF4eX0pIC4iXCI+IjsN
Cg0KaWYoJHpvb21fZGlyZWN0aW9uID09IDApIHsNCiAgICBwcmludCAiPGlucHV0IHR5cGU9XCJy
YWRpb1wiIG5hbWU9XCJ6b29tZGlyXCIgdmFsdWU9XCIxXCI+IHpvb20gaW4gJm5ic3A7Jm5ic3A7
IjsNCiAgICBwcmludCAiPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ6b29tZGlyXCIgdmFs
dWU9XCIwXCIgY2hlY2tlZD4gcGFuICZuYnNwOyZuYnNwOyI7DQogICAgcHJpbnQgIjxpbnB1dCB0
eXBlPVwicmFkaW9cIiBuYW1lPVwiem9vbWRpclwiIHZhbHVlPVwiLTFcIj4gem9vbSBvdXQgJm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCn0gZWxzZSB7DQogICAgaWYoJHpvb21fZGlyZWN0aW9u
ID09IC0xKSB7DQoJcHJpbnQgIjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiem9vbWRpclwi
IHZhbHVlPVwiMVwiPiB6b29tIGluICZuYnNwOyZuYnNwOyI7DQoJcHJpbnQgIjxpbnB1dCB0eXBl
PVwicmFkaW9cIiBuYW1lPVwiem9vbWRpclwiIHZhbHVlPVwiMFwiPiBwYW4gJm5ic3A7Jm5ic3A7
IjsNCglwcmludCAiPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ6b29tZGlyXCIgdmFsdWU9
XCItMVwiIGNoZWNrZWQ+IHpvb20gb3V0ICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyI7DQogICAg
fSBlbHNlIHsNCglwcmludCAiPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ6b29tZGlyXCIg
dmFsdWU9XCIxXCIgY2hlY2tlZD4gem9vbSBpbiAmbmJzcDsmbmJzcDsiOw0KCXByaW50ICI8aW5w
dXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInpvb21kaXJcIiB2YWx1ZT1cIjBcIj4gcGFuICZuYnNw
OyZuYnNwOyI7DQoJcHJpbnQgIjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiem9vbWRpclwi
IHZhbHVlPVwiLTFcIj4gem9vbSBvdXQgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgICB9
DQp9DQoNCnByaW50ICJ6b29tIHNpemUgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgc2l6ZT1cIjJcIiBu
YW1lPVwiem9vbXNpemVcIiB2YWx1ZT1cIiR6b29tX3NpemVcIj4iOw0KDQpwcmludCAiPC9jZW50
ZXI+IjsNCnByaW50ICI8L2Zvcm0+IjsNCg0KcHJpbnQgIjxwPjxmb250IGZhY2U9XCJhcmlhbCxo
ZWx2ZXRpY2FcIj48Yj5IZXJlJ3Mgc29tZSBvZiB0aGUgb3V0cHV0IGZyb20gdGhlIFVTR1M6PC9i
PjwvZm9udD48cD4iOw0KcHJpbnQgIjxwPjxwcmU+IjsNCg0KJHNob3cgPSAwOw0KJG51bWJlciA9
IDA7DQpmb3JlYWNoIChzcGxpdCgvXi8sICRxdWFrZV9kYXRhKSkgew0KICAgICRzaG93ID0gMSBp
ZiAvVXBkYXRlZC87ICAgIA0KICAgDQogICAgcHJpbnRmICI8Yj4lMmQ8L2I+OiAiLCAkbnVtYmVy
IGlmICRzaG93IGFuZCAkbnVtYmVyOw0KICAgIHByaW50ICIgICAgIi4gJF8gaWYgJHNob3cgYW5k
ICEkbnVtYmVyOw0KICAgIHByaW50ICRfIGlmICRzaG93IGFuZCAkbnVtYmVyOw0KICAgICRudW1i
ZXIrKyBpZiAkc2hvdyBhbmQgJG51bWJlcjsNCg0KICAgICRudW1iZXIgPSAxIGlmIC9eeXkvOw0K
fQ0KDQpwcmludCAiPC9wcmU+IjsNCg0KcHJpbnQgIjwvdGQ+PC90cj48L3RhYmxlPiI7DQoNCnBy
aW50IGVuZF9odG1sKCk7DQpleGl0KDApOw0K
--=_3865C9CF.BBDAB143--