Как преобразовать координаты Векторного слоя в Широту Карты и Долготу в Openlayers

Я довольно смущен. У меня есть точка:

x= -12669114.702301
y= 5561132.6760608

То, что я добрался из рисования квадрата на векторном слое с контроллером DrawFeature.

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

Проблема состоит в том, когда я пытаюсь преобразовать эту точку в широту и долготу.

Я использую:

map.getLonLatFromPixel(pointToPixel(points[0]));

Где точками [0] является Точка геометрии, и pointToPixel функция берет любую точку и превращает ее в пиксель (так как getLonLatFromPixel нужен пиксель). Это делает это путем простого взятия x точки и создания этого пикселями x, и так далее.

Широта и долгота, которую я получаю, находятся на порядке:

lat: -54402718463.864
lng: -18771380.353223

Это очень явно неправильно. Меня оставляют действительно смущенным. Я пытаюсь проектировать этот объект, с помощью:

.transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());

Но я действительно не получаю его, и вполне уверено, я сделал это неправильно, так или иначе.

Мой код здесь: http://pastie.org/909644

Я - вид в недоумении. Координаты кажутся последовательными, потому что я могу снова использовать их для получения того же результата..., но они кажутся путем, больше, чем любой из примеров, которые я вижу на openLayers веб-сайте...

21
задан winwaed 18 November 2010 в 20:14
поделиться

2 ответа

Согласно вашему коду, вы используете проекцию EPSG: 900913, которую использует Google. Единицы измерения для этой проекции - метры, и значения, которые вы получаете для точки, совершенно верны:

x= -12669114.702301 (longitude)
y= 5561132.6760608 (latitude)

Это значения не пиксели, а координаты в проекции EPSG: 900913, и они верны (если они предполагаются в Айдахо , если где-то что-то не так)

Чтобы проверить это, вы можете перейти на http://proj4js.org/ и преобразовать свои координаты из EPSG: 900913 в WGS84 (широта / долгота), что даст вам:

x = -113.8085937334033 (longitude)
y = 44.615123313472 (latitude)

Это значения, которые вы, вероятно, ожидаете. Если вы хотите получить их из координат точки, используйте что-то вроде:

point.transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326"));

Это преобразует координаты из проекции Google в WGS84 (широта / долгота).

34
ответ дан 29 November 2019 в 20:55
поделиться

Насколько я помню, обработчик ящика реализован иначе, чем другие обработчики в OL. Нам пришлось реализовать собственный обработчик, который возвращает геометрию с координатами долгота / широта, а не с координатами пикселей:

Legato.Handler.Box = OpenLayers.Class(OpenLayers.Handler.Box, {
  endBox : function(end) {
    var result;
    if (Math.abs(this.dragHandler.start.x - end.x) > 5
        || Math.abs(this.dragHandler.start.y - end.y) > 5) {
      var start = this.dragHandler.start;
      var top = Math.min(start.y, end.y);
      var bottom = Math.max(start.y, end.y);
      var left = Math.min(start.x, end.x);
      var right = Math.max(start.x, end.x);

      var lowerLeftLonLat = this.map.getLonLatFromPixel(new OpenLayers.Pixel(
          left, bottom));
      var upperRightLonLat = this.map.getLonLatFromPixel(new OpenLayers.Pixel(
          right, top));
      var bounds = new OpenLayers.Bounds(lowerLeftLonLat.lon,
          lowerLeftLonLat.lat, upperRightLonLat.lon, upperRightLonLat.lat);
      result = bounds.toGeometry();
    } else {
      var xy = this.dragHandler.start.clone();
      var lonLat = this.map.getLonLatFromPixel(xy);
      result = new OpenLayers.Geometry.Point(lonLat.lon, lonLat.lat);
    }
    this.removeBox();
    this.callback("done", [ result ]);
  },

  CLASS_NAME :"Legato.Handler.Box"
});
2
ответ дан 29 November 2019 в 20:55
поделиться
Другие вопросы по тегам:

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