Потяните радиус вокруг точки в карте Google

Рад, что наконец нашел это. При наведении курсора мыши напишите этот код:

                    isdraggingshape = true;
                    if (selectedshape != null)
                        {
                           OffsetX = selectedshape.Start.X - e.Location.X;
                           OffsetY = selectedshape.Start.Y - e.Location.Y;

                        }   

при движении мыши:

          if (isdraggingshape == true)
                {
                    if (OffsetX != null && OffsetY != null)
                    {
                        if (e.Button == MouseButtons.Left)
                        { int new_x1 = e.X + OffsetX;
                            int new_y1 = e.Y + OffsetY;
                            int dx = new_x1 - selectedshape.Start.X;
                            int dy = new_y1 - selectedshape.Start.Y;
                            if (dx == 0 && dy == 0) return;

                            // Move the shape
                            for (int i = 0; i < selectedshape.points.Count; i++)
                            {
                                selectedshape.points[i] = new Point(selectedshape.points[i].X + dx,selectedshape.points[i].Y + dy);
                            }

                            // Redraw.
                            ImagepictureBox.Invalidate();
                        }
92
задан webjunkie 5 May 2009 в 18:15
поделиться

4 ответа

Кажется, что наиболее распространенный способ достижения этого - нарисовать GPolygon с достаточным количеством точек для симуляции круга. В приведенном вами примере используется этот метод. На этой странице есть хороший пример - ищите функцию drawCircle в исходном коде.

10
ответ дан 24 November 2019 в 06:25
поделиться

У меня была эта проблема в прошлом, поэтому я отметил это обсуждение .

Подводя итог, вы можете:

  1. Взгляните на это окружность фильтрует исходный код и выясняет, как включить его в ваш проект.
  2. Нарисуйте GPolygon с достаточным количеством точек для имитации круга.
  3. Создайте файл KML, изменив http: // www.nearby.org.uk/google/circle.kml.php?radius=30miles&lat=40.173&long=-105.1024 и затем импортируйте его. В Google Maps вы можете просто вставить URI в поле поиска, и он отобразится на карте. Я не уверен, как вы могли бы сделать это, используя API.
4
ответ дан 24 November 2019 в 06:25
поделиться

В сферической геометрии фигуры определяются точками, линиями и углами между этими линиями. У вас есть только те элементарные значения, с которыми можно работать.

Поэтому круг (в форме фигуры, спроецированной на сферу) - это то, что должно быть аппроксимировано с использованием точек. Чем больше точек, тем больше это будет выглядеть как круг.

Сказав это, поймите, что карты Google проецируют Землю на плоскую поверхность (подумайте, «раскатывая» Землю и растягивая + уплощая пока не выглядит "квадрат"). А если у вас плоская система координат, вы можете рисовать на ней 2D-объекты сколько хотите.

Другими словами, вы можете нарисовать масштабированный векторный круг на карте Google. Подвох, Google Maps не делает не дать его вам из коробки (они хотят оставаться настолько близкими к значениям ГИС, насколько это прагматично возможно). Они только дают вам GPolygon, который они хотят, чтобы вы использовали, чтобы приблизиться к кругу. Однако этот парень сделал это , используя vml для IE и svg для других браузеров (см. Раздел «Масштабированные круги»).

Теперь вернемся к вашему вопросу о Google Локаторе, используя масштабированное изображение круга (и это, вероятно, наиболее полезно для вас): если вы знаете, что радиус вашего круга никогда не изменится (например, он всегда составляет 10 миль вокруг некоторой точки), то самым простым решением будет использование GGroundOverlay , который это просто URL-адрес изображения + GLatLngBounds, которые представляет изображение. Единственная работа, которую вам нужно сделать, это собрать GLatLngBounds , представляющий ваш радиус в 10 миль. Как только у вас есть это,

9
ответ дан 24 November 2019 в 06:25
поделиться

Я только что написал в блоге статью, которая посвящена именно этому и может быть вам полезна: http://seewah.blogspot.com/2009/10/circle-overlay-on-google-map.html

По сути, вам нужно создать GGroundOverlay с правильными GLatLngBounds. Сложность заключается в вычислении координаты юго-западного угла и координаты северо-восточного угла этого воображаемого квадрата (GLatLngBounds), ограничивающего этот круг, на основе желаемого радиуса. Математика довольно сложная, но вы можете просто сослаться на функцию getDestLatLng в блоге. Остальное должно быть довольно простым.

1
ответ дан 24 November 2019 в 06:25
поделиться
Другие вопросы по тегам:

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