Я использую пользовательские плитки на веб-карте (отображается с использованием openlayers). Плитки генерируются maperetive, и это здорово. Однако моя карта повернута на -3/4Pi (у openlayers есть эта функция), и многие метки перевернуты вверх ногами. Я верю, что maperitive не имеет возможности визуализировать метки относительно произвольного угла. Может быть, есть другие варианты исправить это?Поворот меток на плитки, сгенерированных Maperitive
0
A
ответ
0
Может быть, вы можете создать растровое изображение с помощью команды экспорта-растровый в maperetive. Затем вы вращаете целое. Надеюсь, эта помощь!
0
Я смог решить проблему (в некоторой степени), изменяющую dll's Maperitive, используя ILSpy & Reflexil.
Если кому-то это интересно, то предоставление меток производится методом GdiPainter.DrawText(string, IPointF2List, ...)
(from Karta.dll). Он использует класс Brejc.Geometry.Algorithms.Polylines.Analysis.PolylineWalker
(от Brejc.Geospatial.dll), который контролирует размещение отдельных символов по полилинии. Я изменил этот класс, чтобы он шел по полилинии в противоположном направлении.
public class PolylineWalker : IPolylineWalker
{
private readonly PolylineAnalysis polylineAnalysis;
private float currentOffset;
private int currentSegment;
private float currentOffsetWithinSegment;
private float polylineLength;
public float CurrentAngle
{
get
{
return this.polylineAnalysis.SegmentAngles[this.currentSegment] + 180f;
}
}
public float CurrentOffsetWithinSegment
{
get
{
return this.currentOffsetWithinSegment;
}
}
public Brejc.Geometry.PointF2 CurrentPoint
{
get
{
float num;
float num2;
this.polylineAnalysis.Points.GetPoint(this.currentSegment, out num, out num2);
float num3;
float num4;
this.polylineAnalysis.Points.GetPoint(this.currentSegment + 1, out num3, out num4);
float num5 = this.currentOffsetWithinSegment/this.polylineAnalysis.SegmentLengths[this.currentSegment];
float x = (num - num3) * num5 + num3;
float y = (num2 - num4) * num5 + num4;
return new Brejc.Geometry.PointF2(x, y);
}
}
public float CurrentOffset
{
get
{
return this.currentOffset;
}
}
public int CurrentSegment
{
get
{
return this.currentSegment;
}
}
public float LengthLeftOnSegment
{
get
{
return this.polylineAnalysis.SegmentLengths[this.currentSegment] - this.currentOffsetWithinSegment;
}
}
public PolylineWalker(PolylineAnalysis polylineAnalysis)
{
this.polylineAnalysis = polylineAnalysis;
this.polylineLength = polylineAnalysis.PolylineLength;
}
public void MoveBy(float delta)
{
if (delta.IsZero())
{
return;
}
if (this.currentOffset + delta > this.polylineLength)
{
throw new System.ArgumentOutOfRangeException("delta");
}
if (this.currentOffset + delta == this.polylineLength)
{
int num = 0;
num++;
}
float num2 = this.currentOffset + delta;
this.currentOffset -= this.currentOffsetWithinSegment;
if (delta > 0f)
{
while (this.currentSegment >= 0)
{
this.currentOffset += this.polylineAnalysis.SegmentLengths[this.currentSegment];
if (this.currentOffset >= num2)
{
this.currentOffsetWithinSegment = num2 - (this.currentOffset - this.polylineAnalysis.SegmentLengths[this.currentSegment]);
this.currentOffset = num2;
return;
}
this.currentSegment--;
}
throw new System.InvalidOperationException("Bug in the algorithm");
}
this.MoveTo(num2);
}
public void MoveTo(float offset)
{
if (offset < 0f)
{
throw new System.ArgumentOutOfRangeException("offset");
}
if (offset > this.polylineLength)
{
throw new System.ArgumentOutOfRangeException("offset");
}
this.currentOffset = 0f;
this.currentSegment = this.polylineAnalysis.SegmentsCount - 1;
while (this.currentSegment >= 0)
{
if (this.currentOffset + this.polylineAnalysis.SegmentLengths[this.currentSegment] >= offset)
{
this.currentOffsetWithinSegment = offset - this.currentOffset;
this.currentOffset = offset;
return;
}
this.currentOffset += this.polylineAnalysis.SegmentLengths[this.currentSegment];
this.currentSegment--;
}
throw new System.InvalidOperationException("Bug in the algorithm");
}
}
Смежные вопросы
- 1. Поворот меток осей в jqplot
- 2. Поворот текста меток вторичной оси
- 3. Создание случайно сгенерированных горизонтальных летающих меток
- 4. Tkinter: Настроить метод динамически сгенерированных меток
- 5. размер меток или поворот на морских графиках python
- 6. Использование tabindex на сгенерированных сгенерированных формах
- 7. В игре-головоломке, как сделать поворот подвижной плитки красным, а другие плитки сохранить оригинал?
- 8. Список меток плитки() не будет мутировать в классе
- 9. OpenLayers 3: выравнивание/поворот меток с функциями линии
- 10. Проблемы с загрузкой плитки на плитки
- 11. Swift - Поворот и поворот на 90 градусов
- 12. iPhone вопрос на тему плитки на основе плитки
- 13. Нарезать изображение на плитки
- 14. плитки плитки динамически изменяются
- 15. многократный поворот на ImageView
- 16. Поворот ROI на картинке
- 17. Поворот на поле?
- 18. Как добавить еще несколько меток на плитки даты после загрузки календаря в tapku?
- 19. Вычисление, какие плитки зажжены в игре на основе плитки («raytracing»)
- 20. Как определить структуру плитки для 2D-плитки на основе игры?
- 21. Обнаружение столкновений на основе плитки, объект проваливается сквозь плитки
- 22. Движется игрок или плитки в игре на основе плитки?
- 23. Создание меток на pdf
- 24. Перемещение меток на диаграмме
- 25. Поворот UILabel On Clockface
- 26. Как сделаны плитки на Lynda?
- 27. Изображение плитки на iPhone 4
- 28. Рисунок плитки на основе карты
- 29. Наложение на основе плитки MKMapView
- 30. скоблить все плитки на WP7
Попробуйте повторно задать этот вопрос по адресу http://gis.stackexchange.com или http://help.openstreetmap.org/. – scai