ওপেনলায়ারস 3 জ্যামিতির কেন্দ্র পান


12

Geometryওপেনলায়ার্সে একটি অবজেক্ট দেওয়া হয়েছে ৩. কীভাবে কেউ এর কেন্দ্র পেতে চলেছে?

ওপেনলায়ার্সের পুরানো সংস্করণগুলি একটি getCentroidপদ্ধতি সরবরাহ করে। একটি getBoundsworkaround ছিল। তবে এগুলি ওপেনলায়ার্স 3-এ সরানো হবে বলে মনে হয়।

উত্তর:


16

কার্যবিধির বিট কিন্তু getExtentমানচিত্রের সীমা নির্ধারণ করতে আপনি জ্যামিতির পদ্ধতিটি ব্যবহার করতে পারেন । আমি মনে করি দৃশ্যের কেন্দ্রস্থলটি তখন জ্যামিতির কেন্দ্র হবে;

Test = new ol.geom.Geometry();
map.getView().fitExtent(Test.getExtent, map.getSize());
var CenterOfGeom = map.getView().getCenter()

আপনি যদি দৃষ্টিভঙ্গিটি পরিবর্তন করতে না চান (যা আমি কল্পনা করতে পারি), আপনি কিছুটা কেন্দ্রের অংশ গণনা করতে কোনও ফাংশন সম্পর্কে ভাবতে পারেন। এটি নির্দিষ্ট ধরণের সমন্বিত সিস্টেমগুলিতে সহজ হবে (EPSG: 3857, যা মিটার ভিত্তিক) তবে অন্যদের মধ্যে আরও কঠিন (ইপিএসজি: 4326, লম্বা / ল্যাড কর্ডের উপর ভিত্তি করে)। এই কেন্দ্রটি গণনা করতে পারে এমন একটি ফাংশন (ইপিএসজিতে: 3857) নিম্নলিখিত হিসাবে থাকবে;

function getCenterOfExtent(Extent){
var X = Extent[0] + (Extent[2]-Extent[0])/2;
var Y = Extent[1] + (Extent[3]-Extent[1])/2;
return [X, Y];
}

আশাকরি এটা সাহায্য করবে!


1
আমি মনে করি এটি হওয়া উচিত var x = extent[0] + (extent[2] - extent[0]) / 2; var y = extent[1] + (extent[3] - extent[1]) / 2;
জেরিট ফুলস্টার

হ্যাঁ আপনি ঠিক বলেছেন, ছোট্ট ভুল, আমার অ্যাঞ্জার বদলেছে
টিম.লুকাস

3
এত তুচ্ছ কিছু হ'ল ওল 3 দিয়ে প্রেরণ করা উচিত। অগ্নিবিদ্যার জন্য +1getCenterOfExtent
জোয়েল

4
@ জোয়েল এই যে এখন! ওএল সংস্করণে 3.9.0 রয়েছে ol.extent.getCenterএবং এটি স্থিতিশীল। উদাহরণস্বরূপ, আমি করেছি var aa = e.selected[0].getGeometry().getExtent(); var oo = ol.extent.getCenter(aa);এবং আমাকে পয়েন্টস, লাইন এবং বহুভুজগুলির কেন্দ্র দিয়েছি। এটি এখানে দেখুন
21'15

এটি আসলে বেশ ভাল :)
জোয়েল

15

আপনি এর ব্যাপ্তি কেন্দ্রটি ব্যবহার করে পেতে পারেন ol.extent.getCenter। আমার ক্ষেত্রে আমার কাছে ভেক্টর স্তর রয়েছে এবং আমি এটিতে ক্লিক করার পরে কোনও বৈশিষ্ট্যের কেন্দ্র পেতে চাই।

সুতরাং

একটি সাধারণ ক্লিক ইন্টারেক্টিভ তৈরি করুন এবং এটি মানচিত্রে যুক্ত করুন

 var select = new ol.interaction.Select();
 map.addInteraction(select);

প্রতিটি ক্লিকের জন্য ...

select.on('select', function(e) {

"নির্বাচিত" অ্যারে থেকে নির্বাচিত প্রথম বৈশিষ্ট্যটি পান। তারপরে এর জ্যামিতিটি পান এবং তারপরে তার প্রসার পান।

ব্যবহার করে এর কেন্দ্র সন্ধান করতে সেই পরিমাণটি ব্যবহার করুন ol.extent.getCenter

    var aa = e.selected[0].getGeometry().getExtent();
    var oo = ol.extent.getCenter(aa);
    console.log("The center is :  "+oo); // voila!!!!

 });

একই কোড লাইন, পয়েন্ট এবং বহুভুজগুলির জন্য কাজ করেছিল।

পুনশ্চ. ol.extent.getCenterসুস্থিত হয়, ওল সংস্করণ 3.9.0 এবং সংস্করণ 3.10.1 ব্যবহার করা হয় এবং আপনি তা খুঁজে পেতে পারেন এখানে


1
রেখাগুলির জন্য, এটি আপনাকে লাইন জ্যামিতির দ্বারা দখল করা সীমার মধ্যবর্তী স্থানটি লাভ করবে। আসলে লাইনে রয়েছে এমন একটি পয়েন্ট পেতে, আপনি e.selected [0] .getGeometry () ব্যবহার করতে পারেন। GetClosestPoint (oo)
jOshT

1

আপনি এর সাথে কেন্দ্রটি পেতে পারেন:

var center = e.feature.getGeometry().getCenter();

ওপেনলায়ার্স 3 এর কোন সংস্করণে এটি কাজ করে? 3.15.1 এ, আমি একটি পাই Uncaught TypeError: feature.getGeometry(...).getCenter is not a function
ডার্ক

getCenter()পদ্ধতিটি কেবল বৃত্তের জ্যামিতির ক্ষেত্রে প্রযোজ্য ol.geom.Circle। আপনার কি পৃথক পৃথক জ্যামিতি থাকতে পারে?
বুয়ইস

হ্যাঁ, আমি এটি একটি লাইনস্ট্রিং দিয়ে চেষ্টা করেছি, এটি জেনে রাখা ভাল যে এটি কেবল চেনাশোনাগুলির সাথেই কাজ করে। লাইন স্ট্রিংয়ের জন্য, তবে কেউ @ স্লাভিনের উত্তরে কোডটি ব্যবহার করতে পারেন যা "লাইনের মাঝখানে" পয়েন্টটি ফিরিয়ে দেবে।
ডার্ক

1

ওপেনলায়ার্স বনাম 6.1.1

var center = e.feature.getGeometry().getExtent().getCenter()


এটি প্রশ্নটির অনুরোধ অনুসারে জ্যামিতির কেন্দ্র নয়, সীমার কেন্দ্র।
তোমাজিকএম

আমি মনে করি না যে এটি আপনাকে জ্যামিতির কেন্দ্রীভূত করবে, এটি আপনাকে লাইন / বহুভুগের জ্যামিতির দ্বারা সীমাবদ্ধ স্থানের কেন্দ্রবিন্দুতে পাবেন।
কাদির bazাহবাজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.