2016-05-09 7 views
2

Моя цель - рассчитать расстояние между двумя объектами цезия в километрах. В качестве бонуса я в конечном итоге хочу иметь возможность измерять расстояние в пикселях.CesiumJS - Расстояние между двумя точками

Я кучу метки в формате KML, как это:

<Placemark> 
    <name>Place</name> 
    <Point><coordinates>48.655,-31.175</coordinates></Point> 
    <styleUrl>#style</styleUrl> 
    <ExtendedData> 
    ... 
    </ExtendedData> 
</Placemark> 

Я импортируя их в цезий, как так:

viewer.dataSources.add(Cesium.KmlDataSource.load('./data.kml', options)).then(function(dataSource) { 
    var entities = dataSource.entities._entities._array; 

Я попытался создать новые объекты Cartesian3 сущностей I но значения x, y и z, которые я получаю от объекта сущности, составляют сотни тысяч. Широта и долгота из моего KML нигде не найдены в объектах сущности.

Если я создавать объекты Cartesian3 и вычислить расстояние примерно так:

var distance = Cesium.Cartesian3.distance(firstPoint, secondPoint); 

возвращает число в миллионах. Я оценил расстояние между несколькими точками таким образом, и когда я сравниваю эти значения, возвращаемые с результатом онлайн-калькулятора, который возвращает фактическое значение в километрах, различия в расстояниях не являются линейными (некоторые расстояния, возвращаемые цезием, равны 900 раз фактическое расстояние, а некоторые - в 700 раз больше фактического расстояния).

Надеюсь, этого достаточно, чтобы получить помощь. Я не знаю, с чего начать это исправление. Любая помощь будет оценена по достоинству. Спасибо.

ответ

5

Здесь несколько вещей. Класс Cesium.Cartesian3 содержит метры, поэтому правильно делиться на 1000, чтобы получить километр, но это не полная история. Cartesian3s являются позициями на трехмерном глобусе, и если вы вычислите простой Cartesian.distance между двумя из них на противоположных сторонах этого земного шара, вы получите декартово линейное расстояние, как и длина линии, прорезающей середину земного шара чтобы перейти от одного к другому, а не путешествовать по поверхности земного шара, чтобы добраться до дальней стороны.

Чтобы получить требуемое расстояние - расстояние от линии, которая следует за кривизной поверхности Земли - проверьте ответ на Cesium JS Line Length на ГИС SE.

Смежные вопросы