वहाँ एक से दूसरे बिंदु से असर की गणना करने के लिए एक रास्ता है?

वोट
0

इस तरह मैं इसे स्वयं करना होगा है ...

मैं इन तीन निर्देशांक है:

var coordinateOne   = [-72.642883, 42.201343];
var coordinateTwo   = [-72.639532, 42.200784];
var coordinateThree = [-72.637823, 42.199687];

मैं इस नक्शे को, जो पहले समन्वय पर केंद्रित है मिल गया है:

var map = new mapboxgl.Map({
  container: 'map',
  style: 'mapbox://styles/mapbox/streets-v8',
  center: coordinateOne,
  zoom: 19
});

मैं मैन्युअल रूप से इतना है कि बगल में है समन्वय (बिल्कुल, लेकिन इस उदाहरण के लिए काफी निकट) असर सेट कर सकते हैं सीधे आगे:

map.easeTo({ bearing:109, pitch:60, zoom:19 });

तब मैं सीधे कि करने के लिए आगे उड़ सकता है दूसरा समन्वय:

map.flyTo({ center:coordinateTwo, zoom: 19 });

तब मैं मैन्युअल रूप से पुन असर सेट कर सकते हैं, लगातार तीसरे आगे समन्वय डाल:

map.easeTo({ bearing:130, pitch:60, zoom:19 });

तब मैं सीधे कि करने के लिए आगे उड़ सकता है तीसरे समन्वय:

map.flyTo({ center:coordinateThree, zoom: 19 });

वहाँ हर बार स्वचालित रूप से, कि असर मूल्य की गणना करने ताकि प्रत्येक एक रास्ता है flyToहमेशा सीधे आगे चल रहा है?


मैंने पाया इस सवाल है, जो जावा में इस विचार को शामिल किया गया। वहाँ कोड के आधार पर, मैं निम्नलिखित कोड है कि आता है के साथ आया था पास लेकिन जैसा कि अगले अंक सीधा आगे संरेखित करने का विरोध किया है कि यह करने के लिए एक सीधा कोण की अधिक है।

function bearing(lat1, lon1, lat2, lon2) {
  var longDiff = lon2 - lon1;
  var y        = Math.sin(longDiff) * Math.cos(lat2);
  var x        = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(longDiff);

  return ( toDegrees( Math.atan2( y, x ) ) + 360 ) % 360;
}

function toDegrees (angle) {
  return angle * (180 / Math.PI);
}
18/03/2016 को 22:00
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
0

मैंने पाया कि TurfJS एक शामिल असर माप, इसलिए मुझे लगता है कि उपयोग कर रहा हूँ।

मैं एक साथ इस समारोह डाल दो अंक के बीच असर वापस जाने के लिए:

function bearingBetween(coordinate1, coordinate2) {
  var point1 = {
    "type": "Feature",
    "geometry": {
      "type": "Point",
      "coordinates": [coordinate1[0], coordinate1[1]]
    }
  };
  var point2 = {
    "type": "Feature",
    "geometry": {
      "type": "Point",
      "coordinates": [coordinate2[0], coordinate2[1]]
    }
  };
  return turf.bearing(point1, point2);
}

मैं का उपयोग करें कि मेरे में easeToलाइन:

map.easeTo({ bearing: bearingBetween(coordinateOne, coordinateTwo), pitch: 60, zoom: 19 });

कोड है कि TurfJS इस गणना करने के लिए उपयोग करता है अपने में है संकुल / मैदान उठाने वाले / index.js फ़ाइल।

19/03/2016 को 15:10
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more