Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как сгенерировать круг по координатам  [new]
Dimmf28
Member

Откуда:
Сообщений: 357
Есть у меня в базе табличка с координатами филиалов необходимо нарисовать круг вокруг координаты филиала, кто сталкивался можете помочь.

пробывал вот так,

declare @scb0 geography = geography::STGeomFromText('POINT(-90.851758 44.292658)',4326);

-- buffer that by 50 metres, resulting shape is circular

set @scb0 = @scb0.STBuffer(50);

-- convert to a geometry instance

declare @scb1 geometry = geometry::STGeomFromText(@scb0.ToString(),4326);

-- convert to an MBR

set @scb1 = @scb1.STEnvelope();

-- convert back to a geography

set @scb0 = geography::STGeomFromText(@scb1.ToString(),4326);

select @scb0;

 


но после того как скидываю в KML и записываю их в формате longitude and latitude и высота у меня получаеться дуга только, хотя в Студии на закладке Spatial result выводиться круг.
3 мар 16, 15:11    [18892536]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать круг по координатам  [new]
Glory
Member

Откуда:
Сообщений: 104760
Dimmf28
нарисовать круг вокруг координаты филиала

Нарисовать где ?
В типах данных geometry/geography нельзя рисовать.
Можно хранить некоторые фигуры
3 мар 16, 15:14    [18892552]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать круг по координатам  [new]
Dimmf28
Member

Откуда:
Сообщений: 357
Glory,

ну хранить в базе координаты, потом уже вытяну их для рисования KML
3 мар 16, 15:16    [18892565]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать круг по координатам  [new]
Glory
Member

Откуда:
Сообщений: 104760
declare @scb0 geography = geography::STGeomFromText('POINT(-90.851758 44.292658)',4326);

-- buffer that by 50 metres, resulting shape is circular

select @scb0.STBuffer(50);
3 мар 16, 15:22    [18892614]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать круг по координатам  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Dimmf28,

Сделайте полигон максимально близкий к кругу. Набор линии (x1 = R * cos(a), y1 = R * sin(a)) -- (x2 = R * cos(a + da), y2 = R * sin(a + da)) для a 0..Pi*2 с шагом da
3 мар 16, 15:23    [18892617]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать круг по координатам  [new]
Dimmf28
Member

Откуда:
Сообщений: 357
a_voronin,

както не понятно радиус умножить на коф получиться длина, а мне нужны координаты этой точки круга
3 мар 16, 15:33    [18892690]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать круг по координатам  [new]
Dimmf28
Member

Откуда:
Сообщений: 357
a_voronin,

может вы мне подскажите алгорит а то я вот написал и уу меня строит елип вместо круга

/* package codechef; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Codechef
{
public static void main (String[] args) throws java.lang.Exception
{
int[] a = new int[10];
double[] ar1;
double ar2[];
a[1]=5;

double centerLat = (44.507693* Math.PI) / 180.0; //rad
double centerLng = (34.152739* Math.PI) / 180.0; //rad
double dist = 1/ 6371.0;
double lan;
for (int x = 0; x <= 360; x += 1)
{
double brng = x * Math.PI / 180.0; //rad
double latitude = Math.asin(Math.sin(centerLat) * Math.cos(dist) + Math.cos(centerLat) * Math.sin(dist) * Math.cos(brng));
double longitude = ((centerLng + Math.atan2(Math.sin(brng) * Math.sin(dist) * Math.cos(centerLat), Math.cos(dist) - Math.sin(centerLat) * Math.sin(latitude))) * 180.0) / Math.PI;
lan=(latitude * 180.0) / Math.PI; //, longitude));
System.out.println(""+lan+" "+longitude );
}


}
}
3 мар 16, 16:20    [18892987]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать круг по координатам  [new]
Glory
Member

Откуда:
Сообщений: 104760
Dimmf28
может вы мне подскажите алгорит а то я вот написал и уу меня строит елип вместо круга

Потому, что окружность - она на плоскости
А наш земной шар - он все же не совсем плоский.

declare @scb0 geography = geography::STGeomFromText('POINT(-90.851758 44.292658)',4326);
select @scb0.STBuffer(50)--.ToString();
 

declare @scb1 geometry = geometry::STGeomFromText('POINT(-90.851758 44.292658)',4326);
select @scb1.STBuffer(50)--.ToString();
3 мар 16, 16:28    [18893039]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать круг по координатам  [new]
Dimmf28
Member

Откуда:
Сообщений: 357
Glory,

да нету разницы между приминением geometry или geography рузультат координаты что генеряться что 1 что другим методом одинаковые
3 мар 16, 16:47    [18893142]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать круг по координатам  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Dimmf28
a_voronin,

както не понятно радиус умножить на коф получиться длина, а мне нужны координаты этой точки круга


Что-то у вас с геометрией либо плохо либо чрезмерно хорошо. Делайте как Glory советует. Вы собираетесь ещё кривизну земли учитывать? Может ещё высоту на уровнем моря?
3 мар 16, 16:48    [18893148]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать круг по координатам  [new]
Glory
Member

Откуда:
Сообщений: 104760
Dimmf28
да нету разницы между приминением geometry или geography рузультат координаты что генеряться что 1 что другим методом одинаковые

есть. просто не всем дано увидеть.
3 мар 16, 16:49    [18893157]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать круг по координатам  [new]
Dimmf28
Member

Откуда:
Сообщений: 357
Glory,

а можете тогда свою версию выборки написать от начала до конца?
3 мар 16, 17:07    [18893258]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать круг по координатам  [new]
Glory
Member

Откуда:
Сообщений: 104760
Dimmf28
а можете тогда свою версию выборки написать от начала до конца?


Да ради бога. Вот еще раз

declare @scb0 geography = geography::STGeomFromText('POINT(-90.851758 44.292658)',4326);
select @scb0.STBuffer(50)--.ToString();
 

declare @scb1 geometry = geometry::STGeomFromText('POINT(-90.851758 44.292658)',4326);
select @scb1.STBuffer(50)--.ToString();
3 мар 16, 17:08    [18893267]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить