ওপেনলায়ার্সে মানচিত্রের অভিক্ষেপ


22

আমি এমন কিছু ডেটা ওভারলে করতে চাই যার ওপেনলায়ারগুলিতে গুগল ম্যাপ স্তরটিতে প্রজেকশন ডাব্লুজিএস -৪৪ তবে আমি তাদের সঠিক জায়গায় তৈরি করতে পারি না। আমি নিম্নলিখিত হিসাবে করেছি:

map = new OpenLayers.Map('map', {           
        numZoomLevels: 20,
        projection: new OpenLayers.Projection("EPSG:900913"),
        displayProjection: new OpenLayers.Projection("EPSG: 4326")
        });
googlelayer = new OpenLayers.Layer.Google("Google street", {sphericalMercator: true});
map.addLayer(googlelayer);
veclayer = new OpenLayers.Layer.Vector("vector", {
                                    projection: map.displayProjection
                                    };
var geojson_format = new OpenLayers.Format.GeoJSON();
veclayer.addFeatures(geojson_format.read(jsonData));

যদিও আমি veclayer4326 প্রক্ষেপণের জন্য নির্ধারিত করেছি , তবে এটি এখনও 900913 হিসাবে ব্যাখ্যা করা হয়েছে, এবং ডিসপ্লে সমন্বয় ব্যবস্থাও 900913, যদিও আমি 4326 এ ডিসপ্লেপ্রক্রিয়া সেট করেছি? আমি কী ভুল করব?

উত্তর:


16

আমি "প্রিফিজিচার্ট ইনসার্ট" এর একটি বড় অনুরাগী ....

var veclayer = new OpenLayers.Layer.Vector("vector", {
           projection: map.displayProjection,
           preFeatureInsert: function(feature) {
           feature.geometry.transform(projWGS84,proj900913);
           }
        });

আহা, এটা কাজ করে! আপনাকে অনেক ধন্যবাদ. তবে আমি ভাবছি সম্পত্তিটির preFeatureInsertঅর্থ কী, যাইহোক, আমি এটির আনুষ্ঠানিক এপিআই ডকটিতে এটি খুঁজে পাচ্ছি না
চ্যানডন

1
যতদূর আমি উদ্বিগ্ন, বৈশিষ্ট্যটি সন্নিবেশ করার আগে এটি সংজ্ঞায়িত হিসাবে অনুমানগুলিকে রূপান্তরিত করে ... চমৎকার এবং জেনেরিক, এবং রূপান্তর ফাংশনগুলির প্রয়োজন নেই ইত্যাদি
CatchingMonkey

6

কোলন পরে আপনার একটি জায়গা আছে। Projection("EPSG: 4326")প্রকৃতপক্ষে হওয়া উচিত Projection("EPSG:4326"), এর আগে কোনও স্থান নেই 4326


হাহা আসলেই কাজ করে! আমি প্রদর্শন প্রক্ষেপণের জন্য বলতে চাই। তবে ওভারল্যাড ডেটা এখনও সঠিক জায়গায় নেই (আগের মতো একই ভুল জায়গা)। কোন ধারনা?
চ্যানডন

2
               map = new OpenLayers.Map('map',
                { numZoomLevels: 19,
                  units: 'm',
                  eventListeners: {"moveend": update_movend},
                  projection: new OpenLayers.Projection("EPSG:900913"),
                  displayProjection: new OpenLayers.Projection("EPSG:4326")

                });

        OpenLayers.Projection.addTransform("EPSG:4326", "EPSG:900913", OpenLayers.Layer.SphericalMercator.projectForward);
        OpenLayers.Projection.addTransform("EPSG:900913", "EPSG:4326", OpenLayers.Layer.SphericalMercator.projectInverse);


        var layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
        var layerTah = new OpenLayers.Layer.OSM.Osmarender("Osmarender");

        var gphy = new OpenLayers.Layer.Google(
            "Google Physical",
            {
                type: google.maps.MapTypeId.TERRAIN
            }
        );
//        gphy = map.projection;

        var gmap = new OpenLayers.Layer.Google(
            "Google Streets",
            {
                numZoomLevels: 20,
            }
        );
        //gmap = map.projection;

        layerMapnik.projection = map.projection;
        layerTah.projection = map.projection;

        vectors = new OpenLayers.Layer.Vector("Vector Layer");

          var help_layer = new OpenLayers.Layer.Vector("Waypoints", {
             projection: map.displayProjection,
             strategies: [new OpenLayers.Strategy.Fixed()],
         });

আমি আমার পুরানো কোড স্নিপেট পোস্ট। আমার মনে আছে ক্লো অনুমানের মধ্যে রয়েছে। অ্যাড ট্রান্সফর্ম আপনার সমস্যার সমাধান করা উচিত। (Proj4)


আপনার সাহায্যের জন্য ধন্যবাদ। তবে এটি কাজ করছে না বলে মনে হচ্ছে
চ্যানডন

1

আপনি সেখানে পড়তে পারেন কারণ আপনি অন্যান্য মান স্তরগুলিতে সূক্ষ্মভাবে ইপিএসজি: 4326 কে ইপিএসজি: 900913 বা ইপিএসজি: 3857 রূপান্তর করে Google মানচিত্রে কিছুটা অফসেট ভেক্টর প্রতিনিধিত্ব খুঁজছেন everything

গুগল ম্যাপে একটি ত্রুটি রয়েছে যা ওপেনলায়ার্স ম্যাপ অবজেক্টটি এখনও দৃশ্যমান না হয়ে শুরু করার সময় ডিভ আকারের মূল্যায়ন করে না। সুতরাং রূপান্তর () ও পুনরায় আঁকা () কলগুলির পরে, আপনাকে myMapObject.updateSize();Google কে আপনার মানচিত্রের প্রকৃত অনুপাতটি স্ক্রিনে জানাতে হতে হবে ।

আপনি যদি একটি প্রজেকশন থেকে অন্যটিতে স্তরকে রূপান্তর করার জন্য জেনেরিক সমাধানের সন্ধান করেন তবে আপনি এই ফাংশনটি ব্যবহার করতে পারেন:

var myMap = new OpenLayers.Map('mapDiv');

function mapBaseLayerChanged(evtObj) {
  var mapProj, baseProj, map_this, newBase;
  map_this = this;
  newBase = evtObj.layer;
  mapProj = (map_this.projection && map_this.projection instanceof OpenLayers.Projection) ?
            map_this.projection : new OpenLayers.Projection(map_this.projection);
  baseProj = newBase.projection;
  if (!(baseProj.equals(mapProj))) {
     var center, maxExt;
     center = map_this.getCenter().transform(mapProj, baseProj);
     maxExt = newBase.maxExtent;
     map_this.projection = baseProj;
     map_this.maxExtent = maxExt;
     map_this.setCenter(center, map_this.getZoom(), false, true);
     // Transforms all sub-layers
     for (var i = 0; i < map_this.layers.length; i++) {
        if (map_this.layers[i].isBaseLayer == false) {
           map_this.layers[i].addOptions({projection: baseProj}, true);
           // Transforms all features of the vectors
           for (var j = 0; j < map_this.layers[i].features.length; j++) {
              map_this.layers[i].features[j].geometry.transform(mapProj, baseProj);
           }
           map_this.layers[i].redraw();
        }
     }
     //Solves Google's problem (and mine at the same occasion)
     map_this.updateSize();
  }
}
myMap.events.register('changebaselayer', myMap, mapBaseLayerChanged);

এট ভয়েইল!


0

ইয়াহুর জন্য আপনি এই বিকল্পগুলি ব্যবহার করতে পারেন:

baseLayerOptions:{
  sphericalMercator: true,
  maxExtent:new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34)
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.