Вычисление ограничительной рамки определенное расстояние далеко от lat/long координирует в Java

Я изучил документы, и это - мой результат: я поместил ограничение по времени одного трудно кодированного месяца, но это - просто пример.

public void GetAllCalendarItems()
{
    Microsoft.Office.Interop.Outlook.Application oApp = null;
    Microsoft.Office.Interop.Outlook.NameSpace mapiNamespace = null;
    Microsoft.Office.Interop.Outlook.MAPIFolder CalendarFolder = null;
    Microsoft.Office.Interop.Outlook.Items outlookCalendarItems = null;

    oApp = new Microsoft.Office.Interop.Outlook.Application();
    mapiNamespace = oApp.GetNamespace("MAPI"); ;
    CalendarFolder = mapiNamespace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderCalendar);
    outlookCalendarItems = CalendarFolder.Items;
    outlookCalendarItems.IncludeRecurrences = true;

    foreach (Microsoft.Office.Interop.Outlook.AppointmentItem item in outlookCalendarItems)
    {
        if (item.IsRecurring)
        {
            Microsoft.Office.Interop.Outlook.RecurrencePattern rp = item.GetRecurrencePattern();
            DateTime first = new DateTime(2008, 8, 31, item.Start.Hour, item.Start.Minute, 0);
            DateTime last = new DateTime(2008, 10, 1);
            Microsoft.Office.Interop.Outlook.AppointmentItem recur = null;



            for (DateTime cur = first; cur <= last; cur = cur.AddDays(1))
            {
                try
                {
                    recur = rp.GetOccurrence(cur);
                    MessageBox.Show(recur.Subject + " -> " + cur.ToLongDateString());
                }
                catch
                { }
            }
        }
        else
        {
            MessageBox.Show(item.Subject + " -> " + item.Start.ToLongDateString());
        }
    }

}
36
задан Bryce Thomas 7 November 2009 в 03:26
поделиться

3 ответа

Я написал статью о нахождении ограничивающих координат:

http://JanMatuschek.de/LatitudeLongitudeBoundingCoordinates

В статье объясняются формулы, а также предоставляется реализация на Java. (Это также показывает, почему формула IronMan для минимальной / максимальной долготы неточна.)

55
ответ дан 27 November 2019 в 05:41
поделиться
import com.vividsolutions.jts.geom.Envelope;

...
Envelope env = new Envelope(centerPoint.getCoordinate());
env.expandBy(distance_in_degrees); 
...

Теперь env содержит ваш конверт. На самом деле это не «квадрат» (что бы это ни значило на поверхности сферы), но должно быть.

Обратите внимание, что расстояние в градусах будет зависеть от широты центральной точки. На экваторе 1 градус широты составляет около 111 км, но в Нью-Йорке всего около 75 км.

На самом деле круто то, что вы можете поместить все свои точки в com.vividsolutions.jts.index.strtree.STRtree , а затем использовать его для быстрого вычисления точек внутри этого конверта.

3
ответ дан 27 November 2019 в 05:41
поделиться
double R = 6371;  // earth radius in km

double radius = 50; // km

double x1 = lon - Math.toDegrees(radius/R/Math.cos(Math.toRadians(lat)));

double x2 = lon + Math.toDegrees(radius/R/Math.cos(Math.toRadians(lat)));

double y1 = lat + Math.toDegrees(radius/R);

double y2 = lat - Math.toDegrees(radius/R);

Хотя я бы также рекомендую JTS.

15
ответ дан 27 November 2019 в 05:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: