Več

Openlayers 2 getLonLatFromLayerPx () daje napačne koordinate po pan

Openlayers 2 getLonLatFromLayerPx () daje napačne koordinate po pan


Poskušam prikazati položaj miške na zunanjem divju (na osnovi ExtJS) s to kodo:

map.events.register ("mousemove", map, function (e) {position = map.getLonLatFromLayerPx (this.events.getMousePosition (e)); position = position.transform (novo OpenLayers.Projection ("EPSG: 900913") , nova OpenLayers.Projection ("EPSG: 4326")); Ext.fly (mouseposition.getEl ()). update ("Lat (N):" + position.lat.toFixed (4) + "Long (E): "+ position.lon.toFixed (4));});

Težava je v tem, da ko pomaknem zemljevid, so koordine, ki jih dobim, izvirne pred pomikom, le če povečam / pomanjšam, ko dobim pravilne koordine iz položaja miške.

Kako lahko to popravim?

Tu je primer (poglejte na koordine na dnu zemljevida) :

  1. Začetna obremenitev nad Izraelom, glejte širino / dolžino miške.

  1. Preusmerim se v Evropo, lat / lon ostane približno enak vrednosti prvotnega obsega zemljevida

  1. Povečava in pomanjšava ter posodobitev širine / dolžine na trenutni obseg pogleda zemljevida.


Moral bi uporabitigetLonLatFromPixelnamestogetLonLatFromLayerPx. Na žalost slednja metoda sploh ni dokumentirana (glej tukaj), zato vam prepuščam, da raziščete, kje se razlikujejo.

To lahko enostavno preverite tako, da obiščete spletno mesto http://openlayers.org/two/ in v konzolo JS prilepite naslednjo kodo:

map.events.register ("mousemove", map, function (e) {var position = map.getLonLatFromPixel (this.events.getMousePosition (e)); position = position.transform (novo OpenLayers.Projection ("EPSG: 900913" ), nova OpenLayers.Projection ("EPSG: 4326")); console.log ("Lat (N):" + position.lat.toFixed (4) + "Long (E):" + position.lon.toFixed ( 4));});

Zdaj, ko zagrabite in povlečete območje z miško, boste pokazali, da lon / lat ostane enak, to je - pravilno.

Upoštevajte, da če poskusite isto kodo zgetLonLatFromLayerPxnamesto tega koordinate "drsijo" skupaj z zemljevidom, ki ga vlečete, kar je očitno napačno (in to sem opisal v svojem komentarju pod vašim vprašanjem).


Če sem narobe razumel vaš opis, poskusite ustvariti funkcijo, ki je lahko ponovljiva, npr. tako da prilepite na http://openlayers.org/two/ in si ogledate konzolo JS.


Poglej si posnetek: Openlayers 6 Tutorial #3 - First Web Map