Зависит от Вашей версии крона. Используя крон Vixie на FreeBSD, я могу сделать что-то вроде этого:
(cd /var/cron/tabs && grep -vH ^# *)
, если я хочу его больше вкладки deliminated, я мог бы сделать что-то вроде этого:
(cd /var/cron/tabs && grep -vH ^# * | sed "s/:/ /")
, Где это - литеральная вкладка в sed заменяющей части.
Это может быть более системно-независимо, чтобы циклично выполниться через пользователей в /etc/passwd
и сделать crontab -l -u $user
для каждого из них.
Если у вас есть заданная широта и долгота, вы можете рассчитать правильную широту и долготу изменения широты на x км следующим образом:
new-lat = ((old-km-north + x-km-change)/40,075) * 360)
^ is the ratio of the ^ times the ratio of the circle
of the earth the change by 360 to get the total ratio
covers. covered in degrees.
То же самое можно применить и к долготе. Если у вас есть общее расстояние плюс изменение, вы можете рассчитать общее количество градусов аналогичным образом.
new-long = ((old-km-east + x-km-change)/40,075) * 360)
^ is the ratio of the ^ times the ratio of the circle
of the earth the change by 360 to get the total ratio
covers. covered in degrees.
Опять же, эти расчеты должны работать, но здесь я исхожу из чистой интуиции, но логика, кажется, верна.
Изменить: Как указал Скиз 40,
У меня очень похожий фрагмент кода. По сравнению с другой реализацией он дал мне очень близкие результаты.
Я думаю, что проблема с вашей в том, что вы используете «расстояние» как линейное расстояние в метрах вместо углового расстояния в радианах.
/// <summary>
/// Calculates the end-point from a given source at a given range (meters) and bearing (degrees).
/// This methods uses simple geometry equations to calculate the end-point.
/// </summary>
/// <param name="source">Point of origin</param>
/// <param name="range">Range in meters</param>
/// <param name="bearing">Bearing in degrees</param>
/// <returns>End-point from the source given the desired range and bearing.</returns>
public static LatLonAlt CalculateDerivedPosition(LatLonAlt source, double range, double bearing)
{
double latA = source.Latitude * UnitConstants.DegreesToRadians;
double lonA = source.Longitude * UnitConstants.DegreesToRadians;
double angularDistance = range / GeospatialConstants.EarthRadius;
double trueCourse = bearing * UnitConstants.DegreesToRadians;
double lat = Math.Asin(
Math.Sin(latA) * Math.Cos(angularDistance) +
Math.Cos(latA) * Math.Sin(angularDistance) * Math.Cos(trueCourse));
double dlon = Math.Atan2(
Math.Sin(trueCourse) * Math.Sin(angularDistance) * Math.Cos(latA),
Math.Cos(angularDistance) - Math.Sin(latA) * Math.Sin(lat));
double lon = ((lonA + dlon + Math.PI) % UnitConstants.TwoPi) - Math.PI;
return new LatLonAlt(
lat * UnitConstants.RadiansToDegrees,
lon * UnitConstants.RadiansToDegrees,
source.Altitude);
}
Где
public const double EarthRadius = 6378137.0; // WGS-84 ellipsoid parameters
и LatLonAlt в градусах / метрах (преобразование происходит внутренне). При необходимости отрегулируйте.
Я полагаю, вы можете выяснить, какое значение для UnitConstants.DegreesToRadians
равно:)
Я не уверен, что мне здесь что-то не хватает, но я думаю, что вопрос можно перефразировать как , «У меня есть точка широты / долготы, и я хочу найти точку на x метров к северу и на x метров к югу от этой точки».
Если это вопрос, то вам не нужно находить новую долготу (что делает все попроще), вам просто нужна новая широта. Градус широты составляет примерно 60 морских миль в любой точке Земли, а морская миля составляет 1852 метра. Итак, для новых широт x метров на север и юг:
north_lat = lat + x / (1852 * 60)
north_lat = min(north_lat, 90)
south_lat = lat - x / (1852 * 60)
south_lat = max(south_lat, -90)
Это не совсем точно, потому что Земля не является идеальной сферой с точно 60 морскими милями между каждым градусом широты. Однако другие ответы предполагают, что линии широты равноудалены, поэтому я предполагаю, что вы этого не сделаете. Меня это не волнует. Если вас интересует, сколько ошибок это может привести, по этой ссылке есть хорошая таблица в Википедии, которая показывает «Расстояние от поверхности на 1 ° изменения широты» для разных широт:
Будет более точным, если вы сначала перепроецируете его на UTM , а затем проверите расстояние.
Надеюсь, это поможет