ওপেনলায়ার্স 2 এ গুগল স্তরে কীভাবে ল্যাট / লম্ব পয়েন্টগুলি ওভারলে করা যায়?


13

আমি ওপেনলায়ার্সে গুগল স্তরের শীর্ষে ল্যাট / লম্বায় একটি ভেক্টর পয়েন্ট যুক্ত করতে আটকে আছি। আমি মানচিত্রটি প্যান করার সময় বিন্দুটি সরছে। যদি আমি গুগল স্তরটি WGS84 এর একটি স্তর দিয়ে প্রতিস্থাপন করি তবে এটি ঘটে না। আমি এটা কিভাবে ঠিক করবো?

map = new OpenLayers.Map('map');
map.addControl(new OpenLayers.Control.LayerSwitcher());

var gmap = new OpenLayers.Layer.Google(
            "Google Streets", 
            {numZoomLevels: 20}
           );
var pointLayer = new OpenLayers.Layer.Vector("Point Layer");

map.addLayers([gmap,pointLayer]);
map.setCenter(new OpenLayers.LonLat(16.373056, 48.208333), 5);

var point = new OpenLayers.Geometry.Point(16.373056, 48.208333);
var pointFeature = new OpenLayers.Feature.Vector(point,null,null);
pointLayer.addFeatures([pointFeature]);

আমি http://docs.openlayers.org/library/spherical_mercator.html অনুসরণ করার চেষ্টা করেছি কিন্তু সাফল্য ছাড়াই।


আমার সমস্যা একই পৃষ্ঠাতে জ্যাকুরির ব্যবহারের সাথে সম্পর্কিত। আমি যদি জ্যাকুরির সমস্ত উল্লেখ পুনরুদ্ধার করি তবে ঠিকঠাক কাজ করে।

উত্তর:


11

প্রয়োজনীয় ফলাফল পেতে আপনাকে কয়েকটি পরিবর্তন যুক্ত করতে হবে:

  1. গোলকবৃত্তাকারটি যোগ করুন : আপনার গুগল স্তরে সত্য সম্পত্তি তাই ভেক্টর স্তরগুলি আপনার Google বেস স্তরটির উপরে সঠিকভাবে প্রদর্শিত হয় (এটি স্থানান্তরিত জ্যামিতির কারণ) reason
  2. আপনার গুগল স্তরের সর্বাধিক প্রচ্ছন্ন সম্পত্তি যুক্ত করুন, অন্যথায় মানচিত্রের কেন্দ্রটি সঠিকভাবে সেট করা হবে না। নীচে দেখানো পরিমাণটি মার্কেটের স্থানাঙ্কে বিশ্বের সীমাবদ্ধতা।
  3. হিসাবে ব্যবহারকারী 1795 আপনার পয়েন্ট জ্যামিতি মানচিত্রে সঠিকভাবে প্রদর্শিত করতে 4326 থেকে ওয়েব মারকেটর থেকে পুনঃনির্দেশ করা উচিত।
  4. এটি সেটেন্টার লনল্যাটের ক্ষেত্রেও প্রযোজ্য যাতে আপনার এটিরও রূপান্তর করতে হবে।

ওয়ার্কিং কোড নীচে:

            map = new OpenLayers.Map('map');
            map.addControl(new OpenLayers.Control.LayerSwitcher());

            var proj = new OpenLayers.Projection("EPSG:4326");

            var gmap = new OpenLayers.Layer.Google("Google Streets", {
                sphericalMercator: true,
                'maxExtent': new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34)
            });
            var pointLayer = new OpenLayers.Layer.Vector("Point Layer");

            map.addLayers([gmap, pointLayer]);
            var lonlat = new OpenLayers.LonLat(16.373056, 48.208333);
            lonlat.transform(proj, map.getProjectionObject());
            map.setCenter(lonlat, 5);

            var point = new OpenLayers.Geometry.Point(16.373056, 48.208333);
            point = point.transform(proj, map.getProjectionObject());
            //console.log(point);
            var pointFeature = new OpenLayers.Feature.Vector(point, null, null);
            pointLayer.addFeatures([pointFeature]);

এটি দুর্দান্ত কাজ করে! রূপান্তরের বিষয়টি মনে হয় ওপেনলায়ার্স সত্যই স্বজ্ঞাত নয়। এটি কি 'স্পেরিকালমেকেরেটর' বিকল্পটি আসলে প্রত্যাবর্তনকে সক্ষম করে?
underdark

1
রাজি এটা intuitive..the sphericalMercator বিকল্প নিম্নলিখিত ফাংশন আছে যা অন্য অনুমান ডাটা সঙ্গে কাজ করার অনুমোদন দেয় যোগ করা নয় - dev.openlayers.org/docs/files/OpenLayers/Layer/...
geographika

4

এটি একটি অভিক্ষেপ সমস্যা, আপনাকে বিন্দুটির প্রজেকশনটি বেস স্তর হিসাবে (গুগল ম্যাপে এখানে) রূপান্তর করতে হবে। নিম্নলিখিত কোড কাজ করা উচিত

    map = new OpenLayers.Map('map');
    map.addControl(new OpenLayers.Control.LayerSwitcher());

    var gmap = new OpenLayers.Layer.Google(
        "Google Streets", 
        {numZoomLevels: 20}
    );
    var pointLayer = new OpenLayers.Layer.Vector("Point Layer");

    map.addLayers([gmap,pointLayer]);
    map.setCenter(new OpenLayers.LonLat(16.373056, 48.208333), 5);

    var point = new OpenLayers.Geometry.Point(16.373056, 48.208333);
    point.transform(new OpenLayers.Projection("EPSG:4326"),new OpenLayers.Projection("EPSG:900913"));
    var pointFeature = new OpenLayers.Feature.Vector(point,null,null);
    pointLayer.addFeatures([pointFeature])

এর কারণ হ'ল গুগল ম্যাপের ডিফল্ট অভিক্ষেপ (গোলাকৃতির মেরিটার) 900913 এবং 4326 এ লনলটে একটি সাধারণ বিন্দুর।

দয়া করে নিশ্চিত করুন যে বিন্দুটি (দ্রাঘিমাংশ, দ্রাঘিমাংশ) হিসাবে সেট করা হয়েছে এবং (অক্ষাংশ, দ্রাঘিমাংশ) হিসাবে নয়।


রূপান্তর যুক্ত করে পয়েন্টটি আমার মানচিত্রে অদৃশ্য হয়ে যায়। আমার ওপেনলায়ার্স সংস্করণটি 2.9.1 হয় যদি এটি কোনও পার্থক্য করে।
underdark

বিন্দু। ট্রান্সফর্মটি আমার জন্য কৌশলটি করেছে!
স্টিফান

1

আপনি যখন গুগল ম্যাপস জেএস এপিআইয়ের সাথে কাজ করছেন, আপনার সংস্করণে সতর্ক হওয়া উচিত। বিকাশ সংস্করণ গুগল জেএস মানচিত্র এপিআইয়ের সাথে যেতে পূর্বনির্ধারিত আছে। পৃষ্ঠাটি দেখুন: http://code.google.com/apis/maps/docamentation/javascript/basics.html# সংস্করণ

এবং গুগল ম্যাপস জেএস টিম বাগগুলিও ঠিক করছে। পরীক্ষা করে দেখুন http://code.google.com/p/gmaps-api-issues/wiki/JavascriptMapsAPIv3Changelog

ভবিষ্যতে, প্রশ্নটিতে গুগল ম্যাপস এপিআই সংস্করণ উল্লেখ করুন। v3.3 এর বেশিরভাগই বিকাশকারীদের দ্বারা ব্যবহৃত হিসাবে ওপ্লেলেয়ারগুলির সাথে কোনও সমস্যা নেই।


হাই সেন্টথিল, আমি নিশ্চিত নই যে গুগল ম্যাপস জেএস এপিআই সংস্করণগুলি ওপেনলায়ারগুলির সাথে আমার সমস্যাটিকে কীভাবে প্রভাবিত করে।
underdark

হাই আন্ডারডার্ক, আমি ওপ্লেলেয়ারগুলির সাথে এবং পরে বিশেষত ৩.৩ ব্যবহার করার সাথে সাথে v3.4 নিয়ে সমস্যা ছিল এবং যখন গুগল ম্যাপস ট্রাঙ্ক সংস্করণ ব্যবহার করা হয়, ফলাফলগুলি চলমান উন্নয়ন হিসাবে অনাকাঙ্ক্ষিত। আপনি কি ভার্সন দিয়ে চেষ্টা করেছেন? যদিও আপনি ওপেনলেয়ারগুলি ব্যবহার করছেন, গুগল এটির অন্তর্নিহিত এপিআই ম্যাপ করে।
সেন্থিল

0

আমি মনে করি এটি একটি প্রক্ষেপণ সমস্যা।

আপনি যখন মানচিত্রটি প্যান করেন তখন আপনি কি বিন্দুটির সেন্ট্রয়েড রিপোর্ট করার চেষ্টা করেছেন? কিছুটা পরিবর্তন হচ্ছে কিনা তা আপনি দেখতে সক্ষম হতে পারেন।

তবে আমি ইউওর কোডটি দেখতে পাচ্ছি না কেন আপনি WGS84 পয়েন্টটি আলাদা কর্ডিসিতে যুক্ত করবেন


যাইহোক, আপনি যে মানচিত্রটি রেখেছেন সেটির প্রক্ষেপণটি অনুসন্ধান করার চেষ্টা করেছেন, এটি আসলে কী সেট করা আছে তা দেখার জন্য?
চুলের

এবং পরিশেষে, দুঃখিত, তবে আপনি যদি অভিক্ষেপ সংক্রান্ত সমস্যাগুলি সমাধান করেন তবে আপনার পয়েন্টটি রুপান্তর করার একটি উপায় রয়েছে: var a = new OpenLayers.LonLat (3,53)। ট্রান্সফর্ম (ll, নতুন ওপেনলায়ার্স.প্রজেকশন ('EPSG: 900913')) ;
হারি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.