Вычислите долготу/широту

Если вы хотите проверить какое-то условие (условие AND EXISTS ...), только если выполняется какое-то другое условие (источник - MANUAL), и вы хотите сделать это в одном запросе вместо:

WHERE (...some condition ...) AND (.. some other condition ... )
IF @source != 'MANUAL'
    AND EXISTS (
        SELECT 1 ... )

который не поддерживается, так как это неправильный синтаксис sql, который вы можете сделать:

WHERE (...some condition ...) AND (.. some other condition ... )
    AND (
       (
         (SELECT md.[source] 
          FROM sports_service.meet.meet_detail md 
          WHERE md.meet_id = #{meetId}
         ) = 'MANUAL'
       )
      OR EXISTS (
        SELECT 1 
        FROM ...
      )
    )

Вам нужно проверить, будет ли производительность результирующего запроса удовлетворительной.

Вероятно, было бы лучше выполнить запрос, который сначала получает source, а затем выполнить любой запрос с дополнительным условием или без него в зависимости от значения source. Для этого вы можете сгенерировать запрос в mybatis, используя динамический SQL (включая или исключая это дополнительное условие).

8
задан Peter Mortensen 22 February 2010 в 10:34
поделиться

3 ответа

Это походит на основной вопрос о триангуляции долготы широты. Общие подходы обрисованы в общих чертах в теме Ответов Yahoo! здесь. Существуют вероятные библиотеки, чтобы сделать это на многих языках. Поиск Google "триангуляции долготы широты" плюс Ваш предпочтительный язык, вероятно, покажет некоторый существующий код для использования. "Геокодирование" является другой общей задачей, прокрученной в подобные библиотеки, так, чтобы могло быть другое полезное ключевое слово.

Править: Как другие упомянули, "трилатерация", кажется, самое благоприятное условие. Однако в зависимости от Ваших данных и требований, существуют более простые решения для приближения, которые могут удовлетворить Ваши требования.

Сообщение Ответов Yahoo! процитировано ниже для удобства:

"Для больших расстояний, сферической геометрии. Для относительно маленьких рассматривайте землю, столь же плоскую, и координаты как координаты xy. Для расстояний для работы со степенями координат необходимо будет использовать косинусную функцию для преобразования от одного до другого. (В то время как степени широты составляют приблизительно 69 миль на всем протяжении земли, степени долготы варьируются от того же на экватор к 0 в полюсах.)

У Вас есть центральные точки трех кругов и радиус тех кругов. Они, как предполагается, пересекаются однажды, таким образом, можно рассматривать их в парах, чтобы найти точки пересечения каждого и вывести тех, которые не соответствуют http://mathworld.wolfram.com/Circle-CircleIntersection.html". (mike1942f)

7
ответ дан 5 December 2019 в 12:13
поделиться

Трилатерация - то, что Вы хотите. Это только требует 3 из Ваших контрольных точек, однако остальные могут использоваться для увеличения точности, если Вы хотите стать действительно умными.

Самая хитрая часть работает с long/lat в противоположность Декартовым координатам, тем более, что земля не является идеальной сферой.

4
ответ дан 5 December 2019 в 12:13
поделиться

Это - проблема трилатерации. В Вашем случае у Вас есть несколько ориентиров, таким образом, можно минимизировать сумму ошибок в квадрате между данными расстояниями и теми, которые соответствуют оптимальному положению m.

3
ответ дан 5 December 2019 в 12:13
поделиться
Другие вопросы по тегам:

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