ओपनर 3 में परिपत्र बहुभुज कैसे बनाएं?


10

इसलिए मैं वास्तव में इस उदाहरण को संशोधित करना चाहूंगा: http://openlayers.org/en/v3.0.0/examples/tissot.html?q=circle

समस्या यह है कि जब मैं इसे अपने नक्शे पर लागू करने की कोशिश करता हूं तो यह काम नहीं करता है, शायद इसलिए कि मैं ओएसएम शैली का उपयोग करता हूं जो गोलाकार नहीं है:

var map = new ol.Map({
  layers: [
    new ol.layer.Tile({
        source: new ol.source.OSM()
      }),
    new ol.layer.Vector({
      source: vectorSource
    })
  ],
  renderer: 'canvas',
  target: 'map',
  view: new ol.View({
    center: ol.proj.transform([2.1833, 41.3833], 'EPSG:4326', 'EPSG:3857'),
    zoom: 2
  })
});

और सवाल के लिए: परिपत्र बहुभुज कैसे बनाएं? जैसा कि मैं देख सकता हूं, दो विकल्प हैं:

  1. किसी तरह से geom.Circle को geom.Polygon में परिवर्तित करें, जो मैं नहीं कर सकता, जो कि मेरे noob स्तर पर आधारित है

  2. ऐसा करने के लिए अपना स्वयं का फ़ंक्शन बनाएं, ओपनर 2 जैसा कुछ:

    OpenLayers.Geometry.Polygon.createRegularPolygon = function (उत्पत्ति, त्रिज्या, भुजाएँ, घूर्णन) {
    var angle = Math.PI * ((1 / side) - (1/2)); if (रोटेशन) {angle + = (रोटेशन / 180) * Math.PI; } var रोटेटएंगल, x, y; var अंक = []; के लिए (var i = 0; मैं

क्या किसी को उनके जीआईएस मास्टर जीवन में समान बिंदु मिला है? इनमे से कौन बेहतर है? या क्या कोई छिपा हुआ रास्ता है, जिसे केवल समझदार और मजबूत लोग देख सकते हैं? कृपया मेरी मदद करें!

जवाबों:


13

जैसा कि अन्य लोगों ने सही ढंग से बताया है, जियोजोन और डब्ल्यूकेटी प्रारूप किसी भी तरह से परिपत्र ज्यामितीय का समर्थन नहीं करते हैं। मंडलियां KML विनिर्देश में नहीं हैं। यह एक दर्द बनाता है जब KML, GeoJSON या WKT को मैप फ़्रेम लिखने की कोशिश की जाती है।

OpenLayers v3 के पास बहुभुज के साथ एक वृत्त को अनुमानित करने का एक तरीका है, लेकिन यह बहुत सुंदर नहीं है क्योंकि इसमें महान सर्कल दूरी को परिवर्तित करना शामिल है। ol.geom.Polygon.circularयहाँ विधि के लिए एपीआई संदर्भ देखें : http://openlayers.org/en/v3.5.0/apidoc/ol.geom.Polygon.html#circular

ol.geom.Polygon.circularविधि का एक उदाहरण नीचे दिखाया गया है, लेकिन इस OpenLayers में भी देखा जा सकता है ।

 var lowpoly = ol.geom.Polygon.circular(
  /* WGS84 Sphere */
  new ol.Sphere(6378137),
  circle.getCenter(),
  circle.getRadius(),
  /* Number of verticies */
  12);

वैकल्पिक रूप से, आप fromCircleइस पोस्ट के समय प्रयोग कर सकते हैं , जो प्रायोगिक है।

var lowpoly = ol.geom.Polygon.fromCircle(
  circle,
  /* Number of verticies (optional) */
  12,
  /* Start angle (optional) */
  90
);

किसी ऐसी चीज़ के लिए जिसे आप खेल सकते हैं, मेरी jsFiddle यहाँ देखें: https://jsfiddle.net/a1syw4od/9/


मैं एक संपादन का प्रस्ताव कर सकता था, लेकिन अगर आप इसे ठीक करते हैं तो शायद यह आसान है: अंतिम उदाहरण के ol.geom.Polygon.fromCircle बजाय इसका उपयोग करना चाहिए ol.geom.Polygon.circular। चीयर्स!
अर्जन

0

यदि आप एक साधारण परिपत्र बहुभुज बनाने में रुचि रखते हैं तो उपयोग करें:

new ol.geom.Circle(
            ol.proj.transform([longitude, latitude], 'EPSG:4326', 'EPSG:3857'),
            radius_meters),
            'XY'
        )

स्रोत: http://openlayers.org/en/v3.0.0/apidoc/ol.geom.Circle.html (पृष्ठ के शीर्ष पर स्थिर टिक निकालें)


यह मान्य है, लेकिन वर्तमान में समस्याएँ हैं यदि आप इस सुविधा का प्रयास करना चाहते हैं और इस सुविधा को GeoJSON में परिवर्तित कर सकते हैं। देखें github.com/openlayers/ol3/pull/3237#issuecomment-78475413
डैरेन रीड

यह भी जब आप लिखने का उपयोग कर wkt में ज्यामिति निकालने की कोशिश करते हैं।
सूरज

1
ol.geom.Circleबहुभुज नहीं है, यह एक त्रिज्या और केंद्र द्वारा दर्शाया गया एक सरल ज्यामिति है। (के आधार वर्ग को देखने के ol.geom.Circleहै ol.geom.SimpleGeometryनहीं ol.geom.Polygon) GeoJSON, वाली WKT-, और एम एल उनके विनिर्देश में परिपत्र ज्यामिति की जरूरत नहीं है और स्वरूपण से पहले रूपांतरण की आवश्यकता है। कृपया ol.geom.Circleएक सच्चे बहुभुज द्वारा अनुमानित के रास्ते के लिए मेरा जवाब देखें ।
नगिटेच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.