Я использую WebGL для рисования линий и многоугольников на слое холста поверх моей карты для данных OSM. Я написал запрос, который возвращает список полигонов из таблицы planet_osm_polygon
. Он возвращает список в виде объектов JSON. я использую
gl.drawElements(gl.LINES, vetexIndex.length, gl.UNSIGNED_SHORT, 0)
Чтобы нарисовать многоугольники.
Мой индексный буфер выглядит так:
pIndexBuffer = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, pIndexBuffer);
pVertexIndices = new Uint16Array([0,1, 1,2, 2,3]);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, pVertexIndices, gl.STATIC_DRAW);
Здесь для индексов многоугольника я использовал 0,1 1,2 и 2,3 как пары, которые рисуют три последовательные линии (в качестве границы, окружающей многоугольник). Я хотел бы нарисовать несколько других многоугольников, подобных этому. Без использования drawElements() и индексных буферов, используя только drawArrays() и gl.LINE_STRIP следующим образом:
gl.drawArrays(gl.LINESTRIP, 0, json_data_length)
Рисует многоугольники, но соединяет один конец каждого многоугольника со следующим (поскольку это LINE_STRIP).
Как я могу нарисовать отдельные полигоны на моей карте? Как я могу использовать здесь свой индексный буфер для каждого полигона?
Я не хочу использовать какую-либо внешнюю библиотеку; просто JavaScript. Я уже преобразовал координаты широты и долготы из моей базы данных OSM в координаты пикселей в моем коде JavaScript.
используя gl.LINE_STRIP
используя gl.LINES и индексный буфер
GL_LINE_STRIP
. 23.06.2015