2013-11-29 3 views
2

создать DbGeography точку, как это:DbGeography сделать круг с центром и радиусом

String selectedLocation = String.Format("POINT ({0} {1})", lon, lat).Replace(",", "."); 
DbGeography selectedLocationGeo = DbGeography.FromText(selectedLocation, 4326); 

Я также имеют радиус R.

Я хочу создать curvepolygon с формой круга с заданный радиус от координаты точки. Имейте в виду, что я использую DbGeography, а не DbGeometry.

Как создать ЦИРКУЛЯРНУЮ? Или есть лучший способ, чем использовать CIRCULARSTRING?


Возможно, что-то подобное?

String polyString = String.Format("CURVEPOLYGON(CIRCULARSTRING(xx yy, xx yy, xx yy, xx yy, xx yy))"); 
DbGeography polygon = DbGeography.FromText(polyString, 4326); 

Спасибо.

ответ

0

Посмотрите методом Buffer: http://msdn.microsoft.com/en-us/library/hh506085(v=vs.110).aspx

Это создает циклический буфер вокруг точки. Его можно использовать и для других типов геометрий.

Будьте осторожны, если радиус достаточно велик при использовании для географии (несколько километров должно быть в порядке)

Я не уверен, как это реализовано в C#, но я бы определенно использовать в других пространственных инструментов.

3

Создайте DbGeography Круг, создав PointFromText, а затем буфером, который указывает на радиус. Для системы координат WGS84 единицы радиуса DbGeography выглядят в километрах.

string textPoint = String.Format("POINT ({0} {1})", longitude, latitude); 
DbGeography point = DbGeography.PointFromText(textPoint, DbGeography.DefaultCoordinateSystemId); //4326 = [WGS84] 
DbGeography targetCircle = point.Buffer(radiusKilometers); 

Отредактировано с информацией от adrian о DbGeography.DefaultCoordinateSystemId.

+2

Стоит отметить, что вы можете использовать 'DbGeography.DefaultCoordinateSystemId' вместо магического номера 4326, так как WGS84 используется по умолчанию. Кроме того, я обнаружил, что единица аргумента «Буфер» - это метры, а не километры. – adrian

+0

Хорошая точка в DefaultCoordinateSystemId. У меня было достаточно времени с буферами. Все, что я мог найти в Интернете, указывал на метры, но только юнит-тесты с использованием кругов из Google Maps (радиус-метры) выглядят только с килограммами, используемыми для буферов. Первоначально поставленный под сомнение это из-за круга вокруг Аризоны создало бы исключение - радиус/геометрия больше земли - или некоторые такие. –

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