জিওজেসন খুব ভারী - কী করব?


19

ওয়েব ব্যবহারকারীদের একটি অঞ্চল নির্বাচন করার অনুমতি দেওয়ার জন্য আমি লিফলেট.জেএস ব্যবহার করছি । বৈধ অঞ্চল হ'ল মার্কিন যুক্তরাষ্ট্রের রাজ্য, কানাডিয়ান প্রভিডেন্স এবং বিশ্বের দেশগুলি (মার্কিন যুক্তরাষ্ট্র এবং কানাডা বাদে)। আমি কিগিস ব্যবহার করে নিজেই একটি শেফফিল তৈরি করেছি এবং এটি জিওজসন হিসাবে সংরক্ষণ করেছি। আমি যতটা সম্ভব জ্যামিতিগুলি সরল করেছিলাম।

ফলাফলের আকারটি 400kb, তবে জিওজসন একটি মেগাবাইটের ওপরে। এটি আমার চেয়ে বড়। আমার এই তথ্য স্থানান্তর করার সাথে জড়িত নেটওয়ার্কের ওভারহেড হ্রাস করতে হবে।

এটি করার সঠিক উপায় কী? বিকল্পগুলি আমি কল্পনা করতে পারি:

  1. জিওজপান ফাইলটি জিপিড পরিবেশন করুন, ক্লায়েন্টকে আনপ্যাক করুন।
  2. জিওজসনে ক্লায়েন্টের শেফফাইলটি পার্স করুন
  3. শেফফাইল থেকে আমার নিজস্ব টাইলস তৈরি করুন এবং সেগুলি পরিবেশন করুন

যদি কেউ আমাকে বলতে পারে কোন বিকল্পটি সর্বোত্তম (বা উপরের কোনওটি নয়) আমি এর প্রশংসা করব!


আমি লক্ষ করেছি যে আপনি বলেছেন যে আপনি জ্যামিতিটি সরল করার চেষ্টা করেছেন, তবে আপনি কি জিআইএস সরলকরণ আলগোরিদম ব্যবহার করে ফলাফলগুলি পরীক্ষা করার চেষ্টা করেছেন? এটি JSON এর কোন অংশটি সর্বাধিক স্থান নিচ্ছে তা দেখতেও সহায়তা করতে পারে।
ব্র্যাডহার্ডস 14:55

1
নিশ্চিত করুন যে জিওজেএসন প্রিন্টেড-মুদ্রিত নয়, সমস্ত অপ্রয়োজনীয় সাদা স্থান ছড়িয়ে দেওয়া ফাইলকে ছোট করে তুলতে সহায়তা করবে - অগত্যা বিপুল পরিমাণে নয় তবে এটি সবই সহায়তা করে!
শেন্ডারসন

উত্তর:


13

আরও কোনও শ্রমসাধ্য পথে নামার আগে, জ্যামিতি হ্রাস করা সহজ বিকল্প। আপনার উত্স ডেটাসেট কি? আপনি এগুলি কীভাবে সরল করলেন? এটি জিওজসন ফাইলের আকার কত হ্রাস করেছে?

যদি আপনি আত্মবিশ্বাসী হন যে আপনি উপরের দিক থেকে যা কিছু করতে পারেন তবে আপনার বিকল্পগুলির সর্বনিম্ন ঝুলন্ত ফল

  1. জিওজপান ফাইলটি জিপিড পরিবেশন করুন, ক্লায়েন্টকে আনপ্যাক করুন।

সমস্ত আধুনিক ব্রাউজার স্বয়ংক্রিয়ভাবে জিজেপড ডেটা আনপ্যাকিং করে, সুতরাং এটি প্রেরণের আগে ডেটা প্যাকআপ করার জন্য আপনার ওয়েব সার্ভারটি সেটআপ করার ঘটনা মাত্র। এটি আপাচে , আইআইএস বা এনগিনেক্সের জন্য প্রায় বাইরে অনেকগুলি উপাদান সহ সাধারণত তুলনামূলকভাবে সোজা ফরোয়ার্ড

আমার টিপটি হ'ল প্রথমে এটি চেষ্টা করে দেখুন, পরীক্ষা করুন, তারপরে যদি বিলম্ব / প্রতিক্রিয়া / ডেটা আকার গ্রহণযোগ্য না হয় তবে অন্য বিকল্পগুলিতে যান। আমি অকালে অপ্টিমাইজ করার চেষ্টা থেকেও সতর্ক থাকব, আপনাকে কেন ডেটার আকার হ্রাস করতে হবে তা নির্ধারণ করার জন্য আমি খুঁজছিলাম এবং এটি করার জন্য একবার আপনার যদি শক্ত কারণ (এবং সংখ্যা) থাকে, তবে পুনরাবৃত্তিমূলক পরিবর্তনগুলি প্রয়োগ করা হয় এবং পরীক্ষাটি পুনরায় পরীক্ষা করে দেখতে হয় লাভ আপনি পাচ্ছেন


13

ম্যাপশ্যাপার.অর্গ একটি হ্যান্ডে বিনামূল্যে অনলাইন সরঞ্জাম যা আপনাকে একটি জিওজসন ফাইল আপলোড করতে, মানচিত্র হিসাবে প্রদর্শন করতে, তারপরে তিনটি সরলিকরণ অ্যালোগ্রিতিমগুলির মধ্যে একটি বেছে নিন যা আপনি একটি স্লাইডারের সাহায্যে শক্তি সামঞ্জস্য করতে পারেন।

এটি মানচিত্র আপডেট করে এবং দুটি অঞ্চলের মধ্যে ওভারল্যাপের মতো অখণ্ডতার ক্ষতি হ'ল এমন কোনও স্থানে লালচে হাইলাইট করে। একটি 'ফিক্স' বাটন রয়েছে যা সাধারণত (তবে সবসময় নয়) এই জাতীয় সমস্যাগুলি সমাধান করে।

আপনি সরলকরণের একটি স্তর খুঁজে পাবেন যা গ্রহণযোগ্য এবং সদ্য সরলীকৃত জিওজসন ফাইলটি রফতানি করতে পারে।

অবশ্যই আপনার কী স্তরের বিশদ প্রয়োজন তা নির্ভর করে তবে ফলাফল চিত্তাকর্ষক হতে পারে। উদাহরণস্বরূপ, এখানে 40 মিমি জিওজসন ফাইল থেকে স্কটল্যান্ডের মানচিত্র রয়েছে:

এখানে চিত্র বর্ণনা লিখুন

একটি 99% অ্যাপ্লিকেশন এটিকে 441 কেবি ফাইলে হ্রাস করে যার কোনও ওভারল্যাপ নেই এবং বিশদটি ক্ষতি হারাবে না যা এই জুম স্তরে অদৃশ্য:

এখানে চিত্র বর্ণনা লিখুন

একটি 99.95% অ্যাপ্লিকেশন (29kb এর নিচে) দেখায় যে কী ধরণের সরলিকরণ প্রয়োগ করা হচ্ছে (এবং এখনও ওভারল্যাপগুলি এড়ানোর জন্য পরিচালনা করে এবং জাতীয় স্তরের ক্লোরোপলথের মতো ব্যবহারের জন্য পুরোপুরি উপযুক্ত):

এখানে চিত্র বর্ণনা লিখুন


আমি এই সরঞ্জামটি সর্বদা ব্যবহার করি। এটা অসাধারণ!
মাইক ফারলেন্ডার

1
তুমি একজন জীবন রক্ষাকারী!!
খিজার

6

আমি ভাবছি যে আপনি এই উত্তরটিতে পাওয়া সংক্ষেপণটি টপোজসনের সাথে জিওজেএসনকে সংক্ষেপিত করার বিষয়ে কথা বলার ব্যবহার করতে পারেন ।

লিফলেট এখনও জিওজেসন পড়তে সক্ষম হবে কিনা তা আমি জানি না - চেষ্টা করার কিছু =)

টপোজসন সম্পর্কে আরও: https://github.com/mbostock/topojson/


লিফলেট.জিওজেসন আর্ক ডেটা বিশ্লেষণ করে না, সুতরাং এই পদ্ধতির কাজ হবে না
এসএমসিফিল

লিফলেটটি স্থানীয়ভাবে পারে না তবে এটি করার জন্য আপনি ক্লায়েন্টের পক্ষের টপোজসন ব্যবহার করতে পারেন, লিফলেটে টপোজসনের উদাহরণ , যদিও উদাহরণটি এটি রেন্ডার করতে ডি 3 ব্যবহার করে।
ক্যালভিন

1
আমার কাছে একটি 27 এমবি জিওজেসন ফাইল ছিল। Maphaper.org এ গিয়ে সরলীকরণের পরে (1.0%) এবং টপজসন রফতানির পরে তা 122 কেবি হয়ে যায়। যে যোগ topoJson লিফলেট কোড পর থেকে github.com/shramov/leaflet-plugins/blob/master/layer/vector/... আমার অ্যাপ্লিকেশানের প্রয়োজন এবং করেনি নিম্নলিখিত। নতুন L.TOPOJSON ( "myExported.topojson") toGeoJson ()।
স্ট্যাকউন্ডার

3

আমি আপনার জ্যামিতিটি সরল করার জন্য উপরের কেলসোর সাথে একমত।

আপনি gzip, এর সাথে ডেটা স্ফীতি হ্রাস করার আপনার সার্ভারে অ্যাক্সেস না থাকে তাহলে সহজে আপনি কটাক্ষপাত করা যায়নি MessagePack গ্রন্থাগার বাইনারি ডেটা আপনার GeoJSON serialise করতে (আমি বিশ্বাস করি এটি একটি বাস্তবায়ন এর BSON বৈশিষ্ট যে MongoDB ভালো জিনিস দ্বারা ব্যবহৃত হচ্ছে স্টোর ডেটা, কিন্তু আমি ভুল হতে পারে)পাইথন এবং জাভাস্ক্রিপ্টে (অন্যদের মধ্যে) লাইব্রেরি রয়েছে যা আপনি ডেটা সিরিয়ালাইজ / ডিসরিয়ালাইজ করতে ব্যবহার করতে পারেন।


2
MessagePack BSON এর সাথে সম্পর্কিত নয় (এটা অনুযায়ী অনেক ক্ষেত্রে আসলে ভালো stackoverflow.com/questions/6355497/... । Messagepack এবং বিশেষভাবে GeoJSON আরো আকর্ষণীয় তথ্য পাওয়া যাবে nelsonslog.wordpress.com/2012/06/22/checking -out-msgpack
কেলসো

@ কেলসোর জন্য ধন্যবাদ - উত্তরটি আপডেট করেছে। এবং ভাল নিবন্ধ!
ওমেনার্স 15:25

1

লিফলেট বহুভুজ বস্তুগুলির জন্য আপনার নিজের পদ্ধতিগত অ্যারে তৈরি করার পরামর্শ দিচ্ছি। আমি জিওজসনের সাথে অনেক বড় হওয়ার সাথে একমত। অবজেক্টের মূল নামগুলি খুব বর্ণনামূলক তবে সম্ভবত অযথা দীর্ঘতর। আমি এই জাতীয় জিনিসটি করি:

objects = [];
objects.push( new L.polygon([[1,1],[1,2],[3,4]],options );
objects.push( new L.polygon([[4,7],[8,27],[35,66]],options );
objects.push( new L.polygon([[3,5],[56,24],[13,49]],options );
objects.push( new L.polygon([[13,7],[7,68],[23,9]],options );
layerGroup = L.layerGroup(objects).addTo(map);

এটা সোজা। এটি জিওজেএসনের চেয়ে অনেক বেশি লাইটওয়েট:

{ "type": "FeatureCollection",
  "features": [
    { "type": "Feature",
      "geometry": {"type": "Polygon",
      "coordinates": [1,1],[1,2],[3,4]},
      },

    //etc...

এবং প্রতিটি একক বহুভুজ জন্য পুনরাবৃত্তি ... উঘ ... উপায় খুব স্ফীত ইমো। আপনার জেএসে প্রচুর বাইট যুক্ত করে। যেমনটি আমি বলেছিলাম, মূল নামগুলি সুন্দর এবং বর্ণনামূলক ... তবে সেগুলি দীর্ঘ এবং আপনার জেএসে প্রচুর অপ্রয়োজনীয় বাইগুলি যুক্ত করে।

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