0

この SVG インライン コードでは、中央にドットがある 60 x 40 のボックスが生成されないのはなぜですか?

SVG を使用して、通常のデカルト座標マップにアイテムをプロットしたいと思います。私が持つデータは、表示可能なマップのサイズとデカルトのメインマップの中心点です。

<svg xmlns="http://www.w3.org/2000/svg" width="60" height="40" viewBox="0 0 60 40">
  <g transform="translate(-470,480) scale(1,-1)">
    <circle title="Center" cx="500" cy="500" r="3" fill="red"/>
  </g>
</svg>
4

2 に答える 2

4

あなたのコードは 60 x 40 ピクセルの SVG を作成しています。

  • (500, 500) を中心とした円を描く
  • スケール変換は円を (500, -500) に移動します
  • translate 変換はそれを (30, -20) に移動します

変換を次のように変更すると、transform="translate(-470,520) scale(1,-1)"必要なものが得られるはずです。

于 2011-08-14T17:10:40.323 に答える
2

デカルト座標でマップを作成し、それらの座標を使用してSVGウィンドウにプロットするこのコードスニペットを思いつきました。これが誰かを助けることを願っています。

この関数は、マップの中心を$ x、$ yとして取り、その座標の周りにマップを描画します。

    public static function xyMap( $x, $y, $width = 0, $height = 0, $show = array('X')) {

    $minx = $x - ($width / 2);
    $maxx = $x + ($width / 2);

    if ($minx < 0) {
        $minx = 0;
        $maxx = $width;
    } elseif ($maxx > Yii::app()->params['maxMapX']) {
        $maxx = Yii::app()->params['maxMapX'];
        $minx = Yii::app()->params['maxMapX'] - $width;
    }

    $miny = $y - ($height / 2);
    $maxy = $y + ($height / 2);

    if ($miny < 0) {
        $miny = 0;
        $maxy = $height;
    } elseif ($maxy > Yii::app()->params['maxMapY']) {
        $maxy = Yii::app()->params['maxMapY'];
        $miny = Yii::app()->params['maxMapY'] - $height;
    }


    $x_xform = -1 * $minx;
    $y_xform = $maxy;

    $x_scale = 1;
    $y_scale = -1;

    echo "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"$width\" height=\"$height\" viewBox=\"0 0 $width $height\">\n";
    echo "<g transform=\"translate($x_xform, $y_xform) scale($x_scale,$y_scale)\">\n";
    echo "<rect x=\"$minx\" y=\"$miny\" width=\"$width\" height=\"$height\" stroke=\"black\" stroke-width=\"2\" fill=\"white\" />\n";
    echo "<circle title=\"Center\" cx=\"$x\" cy=\"$y\" r=\"3\" fill=\"red\"/>\n";
    echo "</g>\n</svg>\n";

}
于 2011-08-15T11:06:02.137 に答える