<div dir="ltr">>> Everything you need should already be encapsulated in QgsRenderContext<div>>> (and the QgsMapToPixel member).</div><div><br></div><div>For everything but degrees it is.</div><div>But in the case of degrees is is not</div><div>- there the (incorrect) assumption is being made that the world is flat</div><div>The value being used for DEGREE_TO_METER 111319.49079327358</div><div>- is only valid on the Equator</div><div>In my area a degree is around 66666,666666667 meters</div><div>- and this is the value needed</div><div><br></div><div>>> <span style="font-size:12.8px">This shouldn't be implemented using an external dependency</span></div><div><span style="font-size:12.8px">I understand the reluctance to adding a further dependency, but GEOS is also used</span></div><div><span style="font-size:12.8px">- and librttopo is an extension of GEOS</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Unfortunately there are not many degree based functions that allows the combination with a distance as meters.</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">---</span></div><div><span style="font-size:12.8px">Looking at the code yesterday, the following could be a realistic possiblity to implement this:</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">QgsMapRenderer:</span><br></div><div><span style="font-size:12.8px">- add double </span><span style="font-size:12.8px">mMeterAsMapUnit</span><span style="font-size:12.8px"> [default 1.0 for meters distance unit]</span></div><div><span style="font-size:12.8px">QgsMapRenderer::setDestinationCrs</span><br></div><div><span style="font-size:12.8px">// before setExtent is called:  mMeterAsMapUnit=QgsUnitTypes::fromUnitToUnitFactor(QGis::Meters,crs.mapUnits());</span><br></div><div><span style="font-size:12.8px">mRenderContext.setMeterAsMapUnit( mMeterAsMapUnit ) ;</span><br></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">QgsMapRenderer::setExtent</span><br></div><div><span style="font-size:12.8px"><br></span></div><div><div><span style="font-size:12.8px">  if ( mSettings.destinationCrs().isGeographic() )</span></div><div><span style="font-size:12.8px">  { // Retrieve realistic MapUnits for a meter based on result of QgsMapCanvas::center()</span></div><div><span style="font-size:12.8px">   // </span><span style="font-size:12.8px">meterAsMapUnit=</span></div><div><span style="font-size:12.8px">  }</span></div></div><div><br></div><div><span style="font-size:12.8px">QgsRenderContext</span><br></div><div><span style="font-size:12.8px">add:</span></div><div><div><span style="font-size:12.8px">    /** 1 meter in Map-Unit*/</span></div><div><span style="font-size:12.8px">    double mMeterAsMapUnit;</span></div></div><div><span style="font-size:12.8px">    void setMeterAsMapUnit( double meterAsMapUnit ) {mMeterAsMapUnit = meterAsMapUnit;}</span><br></div><div><span style="font-size:12.8px">    double meterAsMapUnit() const {return mMeterAsMapUnit;}</span><br></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">QgsSymbolLayerV2Utils::convertToMapUnits:</span><br></div><div><span style="font-size:12.8px"><br></span></div><div><div><span style="font-size:12.8px">  switch ( unit )</span></div><div><span style="font-size:12.8px">  {</span></div><div><span style="font-size:12.8px">    case QgsSymbolV2::MetersUnit:</span></div><div><span style="font-size:12.8px">    { // Note: must fall through to QgsSymbolV2::MapUnit</span></div><div><span style="font-size:12.8px">     size=size*c.meterAsMapUnit();</span></div><div><span style="font-size:12.8px">    }</span></div><div><span style="font-size:12.8px">    case QgsSymbolV2::MapUnit:</span></div></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">I will try this out and see if it brings a reasonable result.</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Mark Johnson, Berlin Germany</span></div><div><br></div></div>